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).

psibar
fonte
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)
psibar
fonte
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
Ingo Karkat
fonte
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 .

Waldauf
fonte
0

Isso funcionou para mim:

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

nmap ,f :call OpenFileInPrevWindow()<CR>
sirex
fonte