¿Cómo regresas de 'gf' en Vim?

187

Estoy usando Vim para Windows instalado en modo Unix. Gracias a este sitio ahora uso el gfcomando para ir a un archivo debajo del cursor.

Estoy buscando un comando para:

  1. volver al archivo anterior (similar a Ctrl+ Tpara ctags), o
  2. reasignar gf para iniciar automáticamente el nuevo archivo en una nueva ventana.
JayG
fuente

Respuestas:

294

Utilización Me Ctrl-O

jop
fuente
43
CTRL-O para ir a una posición anterior en la lista de salto, <Tab> o CTRL-I para ir a una posición más nueva.
Sébastien RoccaSerra
44
@ g33kz0r la mnemónica sería O = OUT, I = IN => Ctrl - O te saca, Ctrl te trae. Si cada salto es como pasar por una puerta, eso es.
kronn
CTRL-O saltará a la última posición visitada, esto es molesto cuando se ha buscado el nuevo archivo. Prefiero Shift-Ctrl-6 (en mi caso Ctrl-6 no funciona)
Adriano
71

Con frecuencia uso Ctrl- 6para esto.

Es útil porque me permite saltar rápidamente de un lado a otro entre los dos archivos.

Dominic Dos Santos
fuente
47

Es posible que desee utilizar CTRL-W gfpara abrir el archivo en una nueva pestaña.

Puede cerrar el archivo recién abierto como siempre con :bd, o usar CTRL-6y otras formas habituales de cambiar los búferes.

Roman Odaisky
fuente
77
La pestaña es más conveniente que el búfer para mí, y usar nnoremap gf <C-W>gfpara abrir en una nueva pestaña puede ser mejor.
Searene
14

Use gf para descender a un archivo y use: bf para volver

RAM
fuente
1
Tenía dos ventanas abiertas en una pestaña y esto acaba de abrir la segunda ventana en la primera en lugar de saltar al búfer anterior.
Kenny Evitt
12

Simplemente use :e#seguido de Enter- que básicamente dice editar el último archivo (el más reciente).

paxdiablo
fuente
9

Ctrl-Shift-6 es uno.

:e#↲ es otro.

tzot
fuente
8
El cambio no es necesario. Deja de abusar de tus dedos.
Zathrus
66
Um. Soy una especie de viejo temporizador. Ctrl-6 no funcionaría con vi en la terminal Wyse que solía tener en el trabajo hace años. Mira, algunas cosas quedan grabadas. Y no usar Shift en este combo difícilmente marcaría la diferencia en mi abuso total de dedos. Oye, al menos lo hiciste lo mejor que pudiste. HTH MANO.
Tzot
Esto cambia a lo que se llama el archivo alternativo .
jpaugh
5

Tengo CTRL-W f para trabajar.
Es bastante deprimente que haya pasado tanto tiempo perfeccionando mapas para estos comandos solo para descubrir que hay versiones integradas.


fuente
5

No sé la respuesta a la parte 2 de tu pregunta, pero puedo ayudarte con la parte 1. Usa

:e#

Vim mantiene una lista de archivos (buffers) que está editando. Si escribes

:buffers

enumerará todos los archivos que está editando actualmente. El archivo en esa lista con un% al lado es el archivo actual. El que tiene el # al lado es el archivo alternativo. : e # cambiará entre el archivo actual y el alternativo. En lugar de escribir tanto, asigno F2 a: e # para poder cambiar fácilmente entre los archivos actuales y alternativos. Asigno el comando a F2 agregando esto a .vimrc

nmap `<F2> :e#<CR>`
codebunny
fuente
2
No creo que quieras usar: e # porque eso podría volver a cargar el archivo. : b # hace el equivalente sin este problema.
lambacck
Buen punto. Eso cambia al otro búfer sin recargarlo.
codebunny
2

Cuando abre un archivo nuevo (con gf o : no con otro comando), el archivo antiguo permanece en una lista de búfer. Puede enumerar archivos abiertos con : ls

Si desea navegar fácilmente entre buffers en vim, puede crear una asignación como esta:

nmap <M-LEFT> :bN<cr>
nmap <M-RIGHT> :bn<cr>

Ahora puede cambiar entre buffers con Alt + flecha izquierda o Alt + flecha derecha.

La documentación completa sobre las asignaciones está aquí:

:help map.txt
Oli
fuente
0

No he visto tu comando gf pero imagino que usa el comando : e o : find .
Suponiendo que esto sea correcto, simplemente reemplace : e o : find con : new (o : vnew para una división vertical) y el archivo se abrirá en una nueva ventana en lugar de la misma.

p.ej

"Cambiar entre encabezado y cpp
nmap, s: find%: t: ​​r.cpp <CR>
nmap, S: nuevo%: t: ​​r.cpp <CR>
nmap, h: find%: t: ​​rh <CR>
nmap, H: nuevo%: t: ​​rh <CR>
nmap, F: nuevo = expandir ("<cfile>: t") <CR> <CR>
nmap, d: new = expand ("<cfile>") <CR> <CR> 


fuente
2
gfEstá incorporado. Nos pertenece a todos. :-)
jpaugh