vim editando / alternando entre vários arquivos eficientemente em grandes estruturas de diretório

11

Eu não sou um usuário avançado do vim, estou apenas começando a entender os movimentos e comandos avançados com o vim. Mas há uma desvantagem que eu não consigo entender.

Eu cresci com programas gráficos para escrever código, mas recentemente comecei a usar o vim over ssh & screen para trabalhar em projetos bastante grandes com muitas pastas.

Estou curioso para saber o que os mestres do vim fazem para trabalhar com vários arquivos de maneira rápida e fácil. Considere um aplicativo de trilhos como um exemplo. Digamos que você queira editar um controlador para executar.

vim app/controllers/controller.rb

Mas então você quer rapidamente mudar para editar uma visualização ou uma migração de banco de dados, meu primeiro instinto é :wqretornar ao bash para navegar até esse diretório e iniciar o vim novamente em um buffer novo.

Obviamente, isso é totalmente errado.

Eu aprendi sobre várias coisas como:

  • O clientserver (mas eu não quero usar o X sobre ssh e esta parece ser a única maneira)
  • :epara abrir outro arquivo navegando, mas não consigo fazê-lo muito rapidamente. Guia completo realmente me excita.
  • Abrindo um diretório inteiro e pesquisando nos buffers.
  • O NERDTree é promissor, mas eu realmente quero ficar longe de qualquer representação gráfica para continuar me forçando a dominar a navegação na linha de comando

Peço desculpas por ser ingênuo, mas realmente quero aprender a maneira correta de fazer isso, mesmo que seja muito subjetivo.

Quais são seus métodos e o que você recomendaria?

fevereiro
fonte
Para o Ruby on Rails, em particular, o plug - in rails.vim de Tim Pope possui alguns comandos interessantes (com conclusão; extensíveis a novas hierarquias) para abrir arquivos para modelos / visualizações / controladores / migrações / testes /… (consulte rails-type-navigationa documentação ou :help rails-type-navigationquando você instalá-lo).
Chris Johnsen

Respostas:

7

É possível configurar o vim para editar vários arquivos sem precisar sair. Você usa vários buffers e alterna entre eles. Como você está usando o vim dentro da tela Você pode colocar o seguinte em seu ~ / .vimrc para habilitá-lo.

   set hidden
   syntax enable
   source $VIMRUNTIME/menu.vim
   set wildmenu
   set cpo-=<
   set wcm=<C-Z>
   map <F4> :emenu <C-Z>
   nmap <Esc>[5D :bp<CR>
   nmap <Esc>Od  :bp<CR>
   nmap <Esc>OD  :bp<CR>
   nmap <Esc>[5C :bn<CR>
   nmap <Esc>Oc  :bn<CR>
   nmap <Esc>OC  :bn<CR>
   nmap <Esc>[3~ :bd<CR>
   nmap ZZ :bd<CR>

Esses mapeamentos de teclas são mapeados para as teclas de seta Ctrl-Esquerda e Direita para alternar entre buffers. A tecla F4 chama o mesmo menu que a GUI mostraria. A guia Pressionar agora também exibe um pequeno menu para selecionar a conclusão quando a guia Pressionar.

Keith
fonte
Dica muito boa, essas três respostas realmente me ajudaram a me sentir mais confortável. Um bom gerenciamento de buffer sem plug-ins é uma ótima habilidade. Adorar o wildmenu!
FEBS
5

Hah! Eu costumava ser exatamente como você, então eu sei exatamente de onde você vem. Mesmo agora que sei o que estou fazendo até certo ponto (não sou um deus do vim, mas espero chegar lá), ainda faço ocasionalmente a: wq e volto ao meu shell.

Verifique isso - isso pode ajudá-lo. (Isso também me ajudará, já que eu nunca soube disso. Isso é impressionante nos sites de stackexchange - você aprende ajudando os outros a aprender!)

Aqui estão algumas coisas que eu faço.

  1. O :ecomando De dentro do vim, ao editar um arquivo, você pode fazer algo parecido :e dir/subdir/otherfilee ele será aberto em um novo buffer, o que significa que você terá dois arquivos abertos ao mesmo tempo.

  2. Ctrl-Shift-6(Não conheça os valores reais de ASCII). Se você tiver dois buffers abertos, poderá alternar entre eles em um flash com essa alternância.

  3. bd- exclusão de buffer. Permite limpar um buffer.

  4. Este é realmente muito útil - :sh. Se você precisar voltar ao shell por qualquer motivo (por exemplo, para procurar um diretório e chmod um arquivo), poderá invocar o comando shell do vim para fazer exatamente isso. Sair do shell o leva de volta para onde você estava no vim.

  5. Na mesma categoria que a digitação acima :!e um comando unix posteriormente, esse comando será executado. Tente isso com ls. (Eu acho que também funciona com os shell embutidos, mas não tenho certeza.)

Esses são os que eu uso o tempo todo. Há também o arquivo :nseguinte e o :parquivo anterior, já que você pode ter mais de dois buffers abertos no vim de uma só vez (embora eu não costumo fazer isso).

lunchmeat317
fonte
Incrível, obrigado por essas dicas. Também encontrei o seguinte: wincent.com/products/command-t . Estou ansioso para começar a usá-lo. A única desvantagem é que você precisa de ruby ​​(não tão amigável com coisas ssh), mas é exatamente o que eu estava procurando. Isso combinado com :sh, :ee gerenciamento de buffer adequada, e as coisas ficam sexy
FEBS
Na maioria dos shells (isto é, shells com controle de trabalho) Ctrl+Zdevem suspender o processo (a fgpartir do shell para exibi-lo novamente) - o que é uma alternativa :sh.
maxschlepzig
Outra ótima dica! Excelente! Vou ter que compilar isso em um post do blog ou algo assim.
FEBS
2

É aí que você começa a usar plugins . Para gerenciamento de arquivos (ou buffer), a árvore NERD e o MiniBufExplorer são escolhas comuns. No seu caso, eu pesquisaria no Google " vim ruby ​​ide " e seguiria um dos muitos tutoriais que encontrar. Eu uso o Python e os 3 comandos deste tutorial configuram tudo o que preciso no Vim.

phunehehe
fonte
2

Eu também recomendaria o uso de janelas divididas para visualizar vários arquivos de uma vez. Adicione algumas habilidades com o gerenciamento de buffer e janela no VIM, e você será um ninja do VIM rapidamente.

Para a documentação real, encaminhá-lo-ei para a documentação do Windows VIM , mas tentarei ajudá-lo aqui.

Inicie o VIM com 2 (ou mais) janelas divididas horizontalmente, a janela superior possui o arquivo1, a próxima janela abaixo possui o arquivo2, etc.

vim -o <file1> <file2> (file3 file4 ...)

Inicie o VIM com 2 (ou mais) janelas divididas verticalmente, a janela mais à esquerda possui arquivo1, a próxima janela sobre tem arquivo2, etc.

vim -O <file1> <file2> (file3 file4 ...)

Mova o cursor para uma janela diferente:

CTRL-W <vim direction key> (h=left, j=up, k=down, l=right)

Já está editando um arquivo, mas deseja dividir a janela e editar um arquivo diferente também:

:split <file2>
:vsplit <file2>

Para divisão horizontal e vertical, respectivamente.

Também existem comandos para mover janelas, redimensioná-las etc.

5mi11er
fonte
1

Use o comando vi: split para abrir uma segunda janela de edição. A divisão pode fazer divisões horizontais e verticais e mais de duas por vez. Eu tive até 10 arquivos abertos na mesma sessão do vi.

wesmat
fonte