Navegando em vários arquivos

11

Se eu vim aberto com vários arquivos na linha de comando, por exemplo vim debug.log*, que as cargas debug.log, debug.log.1e debug.log.2, posso navegar entre elas, atribuí-los a várias janelas ( :split/ :vsplit) ou tal?

O único atalho que conheço para esse modo de operação é o :nque carrega o próximo arquivo na lista. O que mais posso fazer neste modo de operação com vários arquivos? (ou qual assunto da ajuda cobre isso?)

SF.
fonte
3
:previous(ou :prev) é o inverso de :ne retorna um arquivo.
Rich

Respostas:

13

O tópico da ajuda mais relevante é :lstambém conhecido como :filesou :buffers.

No seu vim debug.log*exemplo, se você desse o :lscomando, veria:

:ls
  1 %a   "debug.log"                    line 1
  2      "debug.log.1"                  line 0
  3      "debug.log.2"                  line 0
Press ENTER or type command to continue

… Indicando que o primeiro é o buffer ativo.

Para abrir debug.log.2na janela atual, dê o comando :b 3ou :b debug.log.2para mostrar o buffer 3.

Para dividir a janela e abrir o buffer 2 nela, dê o :sb 2comando A versão com divisão vertical disso é :vert sb 2.

Existem muitas variantes do :bcomando; procure os tópicos de ajuda citados aqui para ter uma idéia deles.


Além disso, você pode chamar vim -o debug.log*para abrir todos os arquivos, cada um em sua própria divisão, ou vim -O debug.log*para abri-los cada um em uma divisão vertical.

200_success
fonte
6

Além da funcionalidade bruta do vim mencionada pelo 200_success, o ecossistema do Vim está cheio de plugins para fornecer funcionalidade extra, como:

No entanto, antes de começar a usar plug-ins, é melhor entender completamente os buffers e janelas no vim.

Cody Poll
fonte
1
Leia nossa política sobre respostas para recomendações de plugins e adicione alguns detalhes sobre como exatamente esses plugins podem beneficiar o usuário.
200_success
5

Você também pode abrir o vim com parâmetros diferentes.

Abre arquivos em guias:

vim -p debug.log*

Abre arquivos em divisões verticais:

vim -o debug.log*

Existe um plugin legal e bastante poderoso chamado CtrlSpace:

https://github.com/szw/vim-ctrlspace

É muito útil se você precisar trabalhar com muitos arquivos. Simplesmente você pode imaginar o ctrl-space como a própria lista de buffers para cada guia. Ele fornece uma maneira muito fácil de navegar entre os arquivos, como o autor declara:

Vim-CtrlSpace é um plugin do Vim para controlar e organizar seu espaço de trabalho no Vim. Incluindo o gerenciamento de buffers, arquivos, guias, sessões e, finalmente, projetos. Sua abordagem é um pouco única, mas certamente você se sentirá em casa, especialmente se você já usa janelas, guias, buffers, etc.

Martin Höger
fonte
Bem-vindo ao Vi / Vim! Leia nossa política sobre respostas para recomendações de plugins e adicione alguns detalhes sobre como exatamente o plug-in aborda a questão.
200_success
4

Se você deseja abrir um arquivo específico sem precisar passar :ls, pode usar um dos seguintes:

  • :vs filename abre o arquivo em uma divisão vertical
  • :sp filename faz o mesmo, mas em uma divisão horizontal
  • :tabe filename abre em uma nova guia

Também vale a pena saber que, se você não especificar um nome de arquivo, abrirá uma nova divisão / guia do arquivo atual, o que pode ser útil para arquivos longos.

Tom
fonte
2
:té o comando de cópia. Para :tabeditvocê precisar pelo menos :tabe.
Tommcdo
Oh caramba, você está totalmente certo. Obrigado, eu vou editar!
Tom
0

Existem alguns atalhos úteis para navegar em vários arquivos:

  • CTRL-^(onde Nestá o número do buffer) para ir para o arquivo editado anteriormente.
  • N CTRL-^(onde Nestá o número do buffer) para ir para o buffer específico.

    Por exemplo:

    • 1Control+^ - vá para o 1º buffer
    • 2Control+^ - vá para o 2º buffer
    • etc.

    Isso é equivalente a :buffer N.

  • Use :Ex/ :Sex/ :Vexpara navegar no diretório atual.

  • Use :tabs( vim -p) com alguns atalhos personalizados .vimrc, como:

    " TABS
    " To create a new tab (Control-T)
    nnoremap <C-t> :tabnew<CR>
    inoremap <C-t> <Esc>:tabnew<CR>
    " Tab Navigation (Control+Left <-> Control-Right, Shift+H <-> Shift+L).
    nnoremap <S-h> gT
    nnoremap <S-l> gt
    nnoremap <A-Left> gT
    nnoremap <A-Right> gt
    nnoremap <C-S-Tab> gT
    nnoremap <C-Tab> gt
    " Tab Close (Control-W)
    nnoremap <C-BS> :tabclose<CR>
    inoremap <C-BS> <Esc>:tabclose<CR>
    " Close All (Control-Q)
    nnoremap <C-q> :qa<CR>
    inoremap <C-q> <Esc>:qa<CR>
    
  • Use :ba/ :vert bapara dividir, pule para o buffer selecionado via Control+w, w/ We faça a janela atual ( :on).

kenorb
fonte