No vim você pode abra um arquivo sob o cursorusando o gf
comando.
Também é possível abrir facilmente esse arquivo em uma nova janela dividida pressionando <c-w> f
. Este é um recurso muito bom e que economiza tempo.
No entanto, não consigo descobrir como abrir o arquivo em uma janela dividida já aberta (sem criar uma nova).
Responder1
Juntei 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 que seguemlet mycurf=expand("<cfile>")
obtém o nome do arquivo sob o cursor e salva-o emmycurf
<c-w>w
muda o foco para a próxima janela dividida abertaexecute("e ".mycurf)
abre o arquivo salvo emmycurf
- finalmente
<c-w>p
muda o foco para a janela anterior (de onde realmente viemos)
Responder2
Procurei a mesma função do VIm e descobri esta solução que funciona perfeitamente:
map <F8> :vertical wincmd f<CR>
Responder3
Isso funcionou para mim:
function! OpenFileInPrevWindow()
let cfile = expand("<cfile>")
wincmd p
execute "edit " . cfile
endfunction
nmap ,f :call OpenFileInPrevWindow()<CR>
Responder4
Fiquei bastante irritado com as respostas acima de 2013, nãodesistirtrabalhando de forma confiável nas situações que me interessavam e escrevi funções um pouco mais robustas para lidar com elas. Especificamente gF
(ou seja, incluindo a funcionalidade "goto linenumber"), como exemplo:
function! gfriend#goto_cWORD(winmotion)
let cword = expand("<cWORD>")
let st = match(cword, '\v\f+:\d+')
let end = matchend(cword, '\v\f+:\d+')
if end !=# -1
let cword = cword[st:end - 1]
endif
let bits = split(cword, ':')
let starting_window = nvim_win_get_number(0)
" If there's no previous window, create a new one
wincmd p
if nvim_win_get_number(0) ==# starting_window
execute(a:winmotion." ".bits[0])
else
execute("e ".bits[0])
endif
if bits[1]
execute(bits[1])
endif
endfunction
O uso é algo como:
nmap <silent> <Leader>gF \
:<C-u>call gfriend#goto_cWORD(winwidth(0) >=# 180 ? 'vsp' : 'sp')<CR>
Eu postei a (pequena) coisapara GitHub, de onde você pode instalá-lo como um plugin, se desejar:
Plug 'ELLIOTTCABLE/vim-gfriend'