Pergunta

Eu olhei a capacidade de usar abas no vim (com :tabe, :tabnew, etc.) como um substituto para a minha prática atual de ter muitos arquivos abertos na mesma janela em buffers escondidos.

Gostaria cada arquivo distinto que eu tenho aberto a estar sempre em sua própria guia. No entanto, existem algumas coisas que ficam no caminho disso. Como faço para corrigir estes:

  1. Quando comandos como gf e salto ^] para um local em outro arquivo, o arquivo é aberto em uma nova reserva na aba atual. Existe uma maneira de ter todos esses tipos de comandos abrir o arquivo em uma nova aba, ou mude para a guia existente com o arquivo se ele já está aberto?

  2. Quando mudar buffers eu posso usar :b <part of filename><tab> e vai completar os nomes dos arquivos em buffers existentes. <part of filename> pode até ser no meio de um arquivo em vez do início. Existe um equivalente para alternar as guias?

Foi útil?

Solução

Stop, stop, stop.

Isto não é como guias do Vim são projetados para ser usado. Na verdade, eles estão misnamed. Um nome melhor seria "janela" ou "layout", porque é isso que um guia é-é um layout diferente das janelas de todas de seus buffers existentes.

Tentando bater Vim em 1 guia == 1 buffer é um exercício de futilidade. O Vim não sabe ou cuidado e não vai respeitá-lo em todos os comandos-in particular, qualquer coisa que usa o buffer quickfix (:make, :grep e :helpgrep são os que vêm à mente) vai alegremente ignorar guias e não há nada que você possa fazer para parar isso.

Em vez disso:

  • :set hidden
    Se você não tem esse conjunto já, então fazê-lo. Ele faz o trabalho vim como qualquer outro editor de múltiplos arquivos no planeta. Você pode ter buffers editados que não são visíveis em algum lugar da janela.
  • Use :bn, :bp, :b #, :b name e ctrl-6 para alternar entre buffers. Eu como ctrl-6 me (sozinho que é comutado para o tampão utilizado anteriormente, ou #ctrl-6 muda para tamponar número #).
  • Use :ls à lista buffers, ou um plugin como MiniBufExpl ou BufExplorer

Outras dicas

Um pouco tarde para a festa aqui, mas surpreendeu Eu não vi o seguinte nesta lista:

:tab sball -. Isso abre uma nova guia para cada tampão aberto

:help switchbuf - tampão comportamento de chaveamento esta controles, tente :set switchbuf=usetab,newtab. Isso deve significar mudar para o separador existente se o buffer está aberta, ou a criação de um novo se não.

Vim :help window explica a confusão "tabs vs buffers" muito bem.

Um buffer é o texto em memória de um arquivo.
Uma janela é uma janela de visualização em um buffer.
A página da guia é uma coleção de janelas.

Abrir vários arquivos é alcançado no vim com buffers . Em outros editores (por exemplo Notepad ++) isso é feito com guias, de modo a guia nome no vim talvez enganosa.

Windows são para o propósito de dividir o espaço de trabalho e exibição de arquivos múltiplas (buffers) em conjunto em uma única tela. Em outros editores isto poderia ser alcançado através da abertura de várias janelas GUI e reorganizando-os na área de trabalho.

Finalmente, em páginas essa analogia do Vim corresponderia a várias áreas de trabalho, isto é diferentes rearranjos de janelas.

Como help: tab-page vim explica uma página da guia pode ser usado, quando se quer temporariamente editar um arquivo, mas não quer mudar nada no layout atual de janelas e buffers. Em tal caso, uma outra página da guia pode ser usado apenas para o propósito de editar esse arquivo em particular.

É claro que você tem que lembrar que exibir o mesmo arquivo em muitas páginas de guia ou janelas resultaria em exibindo a mesma cópia de trabalho (tampão).

Ao contrário do que alguns dos outros respostas aqui, eu digo que você pode usar guias como quiser. vim foi projetado para ser versátil e personalizável, ao invés de forçá-lo a trabalhar de acordo com parâmetros pré-definidos. Todos nós sabemos como nós programadores amor para impor os nossos "ética" em todo mundo, então essa conquista é certamente uma característica primária.

<C-w>gf é o equivalente guia de comando gf buffers. <C-PageUp> e <C-PageDown> vai alternar entre as abas. (Em Byobu, esses dois comandos não trabalho para mim, mas eles trabalham fora do Byobu / tmux. As alternativas são gt e gT.) <C-w>T irá mover a janela atual para uma nova página.

Se você preferir uma guia existente que o uso vim se possível, em vez de criar uma aba duplicada, adicione :set switchbuf=usetab ao seu arquivo .vimrc. Você pode adicionar newtab à lista (:set switchbuf=usetab,newtab) para forçar comandos QuickFix que os erros de exibição de compilação para abrir em guias separadas. Eu prefiro split vez, que abre os erros de compilação em uma janela dividida.

Se você tem suporte a mouse habilitado com :set mouse=a, você pode interagir com as abas clicando sobre eles. Há também um botão + por padrão que irá criar uma nova guia.

Para a documentação em abas, digite :help tab-page no modo normal. (Depois de fazer isso, você pode praticar mover uma janela para uma guia usando <C-w>T.) Há uma longa lista de comandos. Alguns dos comandos da janela tem a ver com guias, de modo que você pode querer olhar para que a documentação, bem via :help windows.

Adição: 2013/12/19

Para abrir vários arquivos no vim com cada arquivo em uma guia separada, uso vim -p file1 file2 .... Se você gosta de mim e sempre se esqueça de adicionar -p, pode adicioná-lo no final, como vim segue a linha de comando regras normais opção de análise. Alternativamente, você pode adicionar um vim mapeamento festa alias para vim -p.

Eu corri para o mesmo problema. Eu queria guias para funcionar como tampões e eu nunca conseguem fazê-los. A solução que eu finalmente liquidada em era fazer buffers se comportam como guias!

Confira o plugin chamado Mini tampão Explorador , uma vez instalado e configurado, você será capaz de trabalhar com buffers virtaully da mesma forma como guias sem perder nenhuma funcionalidade.

Esta é uma resposta para aqueles não familiarizados com Vim e vindo de outros editores de texto (no meu caso Sublime texto).

Eu li através de todas essas respostas e ainda não estava clara. Se você lê-los bastante coisas começam a fazer sentido, mas ele me levou horas de idas e vindas entre as perguntas.

A primeira coisa é, como outros já explicou:

Páginas Tab , soar um pouco como guias , eles agem como guias e parecem muito com guias na maioria dos outros editores de GUI, mas eles não são. Eu acho que é um um modelo mental ruim que foi construído sobre no Vim, que infelizmente nuvens o poder extra que você tem dentro de uma página da guia.

A primeira descrição que eu entendi foi de de @ crenate resposta é que eles são o equivalente a vários desktops. Quando visto a esse respeito que você só já tem um par de desktops abertos, mas tem um monte de janelas GUI abrir dentro de cada um.

Eu diria que eles são semelhantes aos de outros editores / navegadores:

  1. agrupamentos Tab
  2. Sublime espaços de trabalho de texto (ou seja, uma lista de arquivos abertos que você tem em um projeto)

Quando você vê-los assim que você perceber o poder deles que você pode facilmente agrupar conjuntos de arquivos (buffers) em conjunto por exemplo seus arquivos CSS, seus arquivos HTML e seus arquivos JS em diferentes páginas de guia. Que na verdade é bastante impressionante.

Outras descrições que eu acho confuso

Viewport

Isso não faz sentido para mim. A janela que embora tenha um definido dicionário prazo , eu só ouvi referindo-se janelas Vim no doc :help window. Viewport não é um termo que eu já ouvi com relação a editores como Sublime texto, Visual Studio, Atom, Notepad ++. Na verdade eu nunca tinha ouvido falar sobre isso por Vim até que comecei a tentar usar páginas de guia.

Se você exibir páginas de guia como várias áreas de trabalho, em seguida, referindo-se a uma área de trabalho como uma única janela parece estranho.

Workspaces

Isto possivelmente faz mais sentido, o definição do dicionário é:

A instalação de armazenamento de memória para uso temporário.

Então, é como um lugar onde você armazenar um grupo de buffers.

Eu não inicialmente soar como Sublime conceito do texto de um espaço de trabalho que é uma lista de todos os arquivos que você tenha aberto em seu projeto:

O arquivo sublime-workspace, que contém dados específicos do usuário, como os arquivos abertos e as modificações para cada um.

No entanto pensar nisso mais, isso realmente concordar. Se você considerar uma página da guia Vim como um projeto do Texto Sublime, então parece estranho ter apenas um arquivo aberto em cada projeto e manter a comutação entre os projetos. Daí por que usar uma página da guia de ter aberto apenas um arquivo é estranho.

Recolha de janelas

O :help window refere-se a páginas de guia desta forma. Além de inúmeras outras respostas usar o mesmo conceito. No entanto até chegar a sua cabeça em torno do que uma janela vim é, então isso não é muito uso, como a construção de um castelo na areia.

Como referido acima, uma janela vim é o mesmo que uma janela de visualização e tranquilo excelentemente explicado nesta linux.com artigo :

Um recurso muito útil no Vim é a capacidade de dividir a área visível entre um ou mais arquivos, ou apenas para dividir a janela para ver dois bits do mesmo arquivo com mais facilidade. A documentação Vim refere-se a isso como uma janela ou janela, alternadamente.

Você pode já estar familiarizado com esse recurso se você já usou o recurso de ajuda do Vim usando: ajudatópico ou pressionando a tecla F1. Quando você entra ajuda, Vim divide a janela e abrir a documentação de ajuda no topo viewport, deixando o documento aberto na janela inferior.

Acho estranho que uma página da guia é referido como uma coleção de janelas em vez de um conjunto de buffers. Mas eu acho que você pode ter duas páginas de guia separados abrir cada um com várias janelas todos apontando para o mesmo tampão, pelo menos é o que eu entendo até agora.

Olhando : abas ajuda ele não se parece com vim quer trabalhar a maneira de fazer ...

Os amortecedores são compartilhados entre guias, por isso não parece possível bloquear um determinado buffer para aparecer somente em uma determinada guia.

É uma boa idéia, no entanto.

Você provavelmente poderia obter o efeito desejado usando um terminal que suporta abas, como casos VIM-multi-gnome terminal, em seguida, executando em cada aba terminal. Não é perfeito, embora ...

  • Você pode mapear comandos que normalmente manipulam buffers para manipular guias, como eu fiz com gf no meu .vimrc:

    map gf :tabe <cfile><CR>
    

    Eu tenho certeza que você pode fazer o mesmo com [^

  • Eu não acho suportes vim isso por abas (até o momento). Eu uso gt e gT a mover-se para os próximos e abas anteriores, respectivamente. Você também pode usar NGT, onde N é o número guia. Um peeve que tenho é que, por padrão, o número guia não é exibido na linha de guia. Para corrigir isso, eu coloquei algumas funções no final do meu .vimrc arquivo (eu não colar aqui porque é longa e não formatar corretamente).

I usar tampões como separadores, utilizando o BufExplorer plug-in e alguns macros:

" CTRL+b opens the buffer list
map <C-b> <esc>:BufExplorer<cr>

" gz in command mode closes the current buffer
map gz :bdelete<cr>

" g[bB] in command mode switch to the next/prev. buffer
map gb :bnext<cr>
map gB :bprev<cr>

Com BufExplorer você não tem uma barra de abas no topo, mas por outro lado ele economiza espaço na tela, e você pode ter um número infinito de arquivos / buffers abrir ea lista tampão é pesquisável ...

Se você quiser buffers a trabalhar como guias, consulte a tabline plug-in .

que utiliza uma única janela, e adiciona uma linha na parte superior para simular as guias (apenas mostrando a lista de buffers). Este saiu um longo tempo atrás, quando as guias só foram suportados em GVim mas não no vim linha de comando. Uma vez que só está operando com buffers, tudo se integra bem com o resto do vim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top