atalho vim para abrir um arquivo sob o cursor em uma janela já aberta


12

No vim, você pode abrir um arquivo sob o cursor usando o gfcomando

Também é possível abrir facilmente esse arquivo em uma nova janela dividida pressionando <c-w> f. Este é um recurso realmente agradável e que economiza tempo.

No entanto, não consigo descobrir como abrir o arquivo em uma janela dividida já aberta (sem criar uma nova).


1
Você pode dar uma olhada no previewrecurso (consulte :h preview).
Stéphane Chazelas

Certo, eu uso a visualização também. No entanto, eu não queria abrir o arquivo na janela de visualização, mas explicitamente em outra.
psibar

Respostas:


10

Reuni todas as peças para fazer o truque. A melhor maneira é criar um mapeamento personalizado para todos os comandos:

 map <F8> :let mycurf=expand("<cfile>")<cr><c-w> w :execute("e ".mycurf)<cr><c-w>p

Explicação:

  • map <F8> mapeia em "F8" os comandos a seguir
  • let mycurf=expand("<cfile>") coloca o nome do arquivo sob o cursor e o salva em mycurf
  • <c-w>w altera o foco para a próxima janela dividida aberta
  • execute("e ".mycurf) abre o arquivo salvo em mycurf
  • finalmente <c-w>pmuda o foco para a janela anterior (de onde realmente viemos)

1

Isso não pode ser feito facilmente. A [count]antes <C-w>fespecifica qual arquivo correspondente 'path'é aberto, ele não seleciona uma janela existente. Somente para o <C-w>wcomando, [count]significa "ir para o número da janela existente".

Para obter essa funcionalidade, você precisa escrever um mapeamento personalizado que

  • pega o arquivo, vai para a [count]janela e emula o gfcomando ou
  • clona o buffer atual na [count]janela e executa gf

Sim, a única maneira de fazer isso é escrever um mapeamento personalizado. Eu estava tendo problemas para pegar o arquivo sob o cursor. Mas eu acho que eu não percebi isso agora
psibar

1

Procurei a mesma função do VIm e descobri esta solução que funciona como charme:

map <F8> :vertical wincmd f<CR>

Página de origem .


0

Isso funcionou para mim:

function! OpenFileInPrevWindow()
    let cfile = expand("<cfile>")
    wincmd p
    execute "edit " . cfile
endfunction

nmap ,f :call OpenFileInPrevWindow()<CR>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.