Abra o nome do arquivo no cursor como gf, mas em uma nova guia (ou divisão)?

43

O comando no modo normal gfvai para um arquivo com o caminho no qual o cursor está atualmente.

Mas o faz na janela atual, substituindo o texto atual. Isso significa que você precisa voltar explicitamente para voltar mais tarde e escrever potencialmente as alterações no buffer atual.

Tenho certeza de que é possível abrir o arquivo sob o cursor em uma nova tabview?

Volker Siegel
fonte
3
Ativar a 'hidden'opção ( set hidden) permite navegar para longe de buffers não salvos. Para mim, esse foi um enorme aumento de produtividade e foi vital para parar de depender tanto de divisões e separadores.
Tommcdo # 22/15

Respostas:

56

EDIT: sugira mapeamentos bem simétricos para a caixa dividida vertical, pois o Vim, por padrão, possui dois mapeamentos para a caixa dividida horizontal.

Existem várias maneiras de editar o "arquivo sob o cursor" e, embora você certamente possa remapear gfpara editar em uma nova tabpage como menciona @ alexander-myshov, isso significa que você tem duas maneiras de editá-lo em uma nova tabpage, mas não há como edite-o na janela atual, o que você também pode querer fazer às vezes. Não é difícil usar os mapeamentos padrão, mas se você deseja remapear um deles gf, sugiro alternar os mapeamentos para que você não perca um deles.

Algumas das maneiras de editar um nome de arquivo sob o cursor são

  • gf - Edite o arquivo existente sob o cursor na mesma janela
  • C-Wf - Edite o arquivo existente sob o cursor na janela dividida
  • C-WC-F - Edite o arquivo existente sob o cursor na janela dividida
  • C-Wgf - Edite o arquivo existente sob o cursor na nova tabpage

Não há mapeamento padrão para editar o arquivo existente sob o cursor em uma divisão vertical, mas você pode obtê-lo primeiro dividindo a janela verticalmente e depois editando o arquivo sob o cursor na janela atual.

  • C-Wv+ gf- Editar arquivo existente sob o cursor na janela dividida verticalmente

Como você pode ver acima, existem dois mapeamentos padrão para editar o arquivo sob o cursor em uma divisão horizontal. Portanto, você pode remapear um deles para a sequência de teclas acima, estendendo o grupo de mapas para também cobrir a caixa dividida vertical. Você pode vincular qualquer coisa, é claro, mas isso parece para completar a simetria bem: nnoremap <C-W><C-F> <C-W>vgf. Agora você tem

  • gf - Edite o arquivo existente sob o cursor na mesma janela
  • C-Wf - Edite o arquivo existente sob o cursor na janela dividida
  • C-WC-F - Edite o arquivo existente sob o cursor na janela dividida verticalmente
  • C-Wgf - Edite o arquivo existente sob o cursor na nova tabpage

Você também pode ir para uma linha específica no arquivo, se o nome do arquivo sob o cursor for seguido por um número de linha. Se você tem

filename:10

você pode editar o arquivo e mover o cursor para a linha 10 com gF. O equivalente é verdadeiro para C-WFuma divisão e C-WgFuma tabulação. A conclusão da simetria para uma divisão vertical não é tão simples aqui, mas eu sugeriria que o C-WC-S-Fmapa obtido com nnoremap <C-W><C-S-F> <C-W>vgF, imitando o Fou Shift+ fdos mapas padrão como candidato.

Este :é um exemplo, você pode usar qualquer caractere que não seja um nome de arquivo (consulte :h 'isfname').


Todos esses comandos vêm com molho de maçã, como

  • expandir caracteres curinga
  • procure em mais lugares que o diretório atual, de acordo com sua 'path'opção
  • adicionando uma extensão de arquivo ao nome do arquivo, de acordo com sua 'suffixesadd'opção
  • caso contrário, modifique o nome do arquivo fornecido para encontrar uma correspondência, de acordo com sua 'includeexpr'opção

Leia mais em :help gfe os tópicos de ajuda para essas várias opções.


Se o nome do arquivo sob o cursor nomear um arquivo que não existe, é melhor usar os comandos de edição padrão com <cfile>, como

:edit <cfile> // edit non-existent file under cursor in current window
:split <cfile> // edit non-existent file under cursor in split window
:vsplit <cfile> // edit non-existent file under cursor in vertical split window
:tabe <cfile> // edit non-existent file under cursor in new tabpage

e com isso, é claro, você pode usar coisas como :spl+10 filenamemover o cursor para uma linha específica ou :tabe+/cologne filenamemover o cursor para a primeira ocorrência de um padrão.

jjaderberg
fonte
+1 Melhor comentário com uma explicação clara, muito melhor do que a documentação dividida em vários tópicos.
Loves Probability
8

Basta usar ligações para isso:

abrir em uma nova janela (dividir):

nnoremap gf <C-W>f
vnoremap gf <C-W>f

abrindo em uma nova guia:

nnoremap gf <C-W>gf
vnoremap gf <C-W>gf

verifique também isso: :help CTRL-W_gf

Alexander Myshov
fonte
Isso definitivamente funciona para você? Vim parece não querer que eu remapeie gfpara outra coisa. Mesmo nnoremap gf :echo "hello"<CR> assim, abre o arquivo sob o cursor em um novo buffer (e sim, forneci o vimrc).
22416 Tandrewnichols #
Ah, deixa pra lá - eu tenho um plugin interferindo.
Tandrewnichols