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

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

No vim você pode abra um arquivo sob o cursorusando o gfcomando.

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 seguem
  • let mycurf=expand("<cfile>")obtém o nome do arquivo sob o cursor e salva-o emmycurf
  • <c-w>wmuda o foco para a próxima janela dividida aberta
  • execute("e ".mycurf)abre o arquivo salvo emmycurf
  • finalmente <c-w>pmuda 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>

Página de origem.

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'

informação relacionada