![acceso directo de vim para abrir un archivo debajo del cursor en una ventana ya abierta](https://rvso.com/image/31647/acceso%20directo%20de%20vim%20para%20abrir%20un%20archivo%20debajo%20del%20cursor%20en%20una%20ventana%20ya%20abierta.png)
En vim puedes abrir un archivo debajo del cursorusando el gf
comando.
También se puede abrir fácilmente ese archivo en una nueva ventana dividida presionando <c-w> f
. Esta es una característica realmente interesante y que ahorra tiempo.
Sin embargo, no puedo entender cómo abrir el archivo en una ventana dividida ya abierta (sin crear una nueva).
Respuesta1
Reuní todas las piezas para hacer el truco. La mejor manera es crear una asignación personalizada para todos los comandos:
map <F8> :let mycurf=expand("<cfile>")<cr><c-w> w :execute("e ".mycurf)<cr><c-w>p
Explicación:
map <F8>
asigna en "F8" los comandos que siguenlet mycurf=expand("<cfile>")
obtiene el nombre del archivo debajo del cursor y lo guarda enmycurf
<c-w>w
cambia el foco a la siguiente ventana dividida abiertaexecute("e ".mycurf)
abre el archivo guardado enmycurf
- finalmente
<c-w>p
cambia el foco a la ventana anterior (de donde realmente venimos)
Respuesta2
Busqué la misma función de VIm y descubrí esta solución que funciona de maravilla:
map <F8> :vertical wincmd f<CR>
Respuesta3
Esto funcionó para mí:
function! OpenFileInPrevWindow()
let cfile = expand("<cfile>")
wincmd p
execute "edit " . cfile
endfunction
nmap ,f :call OpenFileInPrevWindow()<CR>
Respuesta4
Me molestaron bastante las respuestas anteriores de 2013, noabandonartrabajando de manera confiable en las situaciones que me importaban y escribí funciones un poco más sólidas para manejarlas. Específicamente gF
(es decir, incluyendo la funcionalidad "ir a número de línea"), como ejemplo:
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
El uso es algo como:
nmap <silent> <Leader>gF \
:<C-u>call gfriend#goto_cWORD(winwidth(0) >=# 180 ? 'vsp' : 'sp')<CR>
He publicado la cosa (pequeña)a GitHub, desde donde puedes instalarlo como complemento si lo deseas:
Plug 'ELLIOTTCABLE/vim-gfriend'