Para buscar hacia adelante en Vim cake, escribiría /cake, pero el cursor salta a la primera coincidencia cuando presiono Intro. ¿Hay un comando Vim análogo a "buscar siguiente"?
Acostúmbrate a usar :help. :help /muestra ayuda sobre la búsqueda, y la respuesta a su pregunta aparece un poco más abajo en la página.
Chris Morgan
Respuestas:
878
Es npara el siguiente y Npara el anterior.
Y si usa la búsqueda inversa con ?(por ejemplo, ?cake) en lugar de /, es al revés.
Si está instalado en su sistema, debe intentar ejecutar el vimtutorcomando desde su terminal, que comenzará un tutorial de los comandos básicos de Vim.
¿Hay alguna forma de saltar al próximo partido (no en la línea actual)?
user13107
@ user13107: ny N funcionan en todo el búfer / archivo. No está limitado a la línea actual.
Xavier T.
@XavierT. alguna idea, cómo puedo saltar un número fijo de resultados en la búsqueda. Quiero decir, por ejemplo, saltar a la décima línea coincidente
GP cyborg
@GPcyborg: ncomo la mayoría de los operadores vim, puede tener como prefijo un número para repetir el comando. Si escribe 10n, se moverá al décimo resultado (después del inicial). También funciona para todos los operadores de movimiento como 3jpara bajar 3 líneas.
Xavier T.
212
El atajo más útil en Vim, en mi humilde opinión, es la *clave.
Coloque el cursor sobre una palabra, presione la *tecla y saltará a la siguiente instancia de esa palabra.
La #clave hace lo mismo, pero salta a la instancia anterior de la palabra.
Y en caso de que no fuera obvio, ny Nllevarlo hacia adelante y hacia atrás a través de los *partidos una vez que haya presionado *. (O puede simplemente seguir presionando *para avanzar o #para retroceder, pero el uso de estas teclas modificada es generalmente inferior al óptimo.)
Herbert de asiento
3
@Herbert, en realidad ny N no te llevan "hacia adelante" y "hacia atrás" resp. Como @Xavier señaló anteriormente, n es el siguiente y N es el anterior . El control de la búsqueda hacia adelante y hacia atrás se realiza indicando la búsqueda con la tecla '/' y la '?' o con la tecla '*' y la tecla '#'.
Rob Wells
No creo que * sea tan útil ... la mayoría de las veces busco un fragmento de una palabra (por ejemplo, una parte del nombre de una función). No quiero /Func, que me lleve SomeFuncy luego presione '*' para ir a la próxima instancia de SomeFunccuando Funcesté en la siguiente instancia SomeOtherFunc.
weberc2
Lo que es peor, con C ++ lo encuentro no va de invocación de métodos de implementación del método, porque /\<foo\>no coincide"className::foo()"
Escribir *es incorrecto. Es decir, un archivo aa aaa. Búsqueda /aa, tienes que coincidir. En la primera coincidencia, presionar *cambia el término de búsqueda.
Bernhard
1
n no es 'siguiente' sino "repite la última búsqueda". Entonces, al ingresar? Var comenzará a buscar hacia arriba desde su posición actual para 'var'. Y 'N' es en realidad "repetir la última búsqueda en dirección opuesta", por lo que para este ejemplo buscaría 'var' hacia abajo desde la posición actual.
/pattern
?pattern
* (and g*, which I sometimes use in macros)
# (and g#)
plus, navegando anterior / siguiente con Ny n.
También puede editar / recuperar su historial de búsqueda al abrir el indicador de búsqueda con /y luego alternar con C-p/ C-n. Aún más útil es q/, que te lleva a una ventana donde puedes navegar por el historial de búsqueda.
También para consideración es el más importante 'hlsearch'(tipo :hlspara habilitar). Esto hace que sea mucho más fácil encontrar múltiples instancias de su patrón. Es posible que incluso desee que sus partidos sean más brillantes con algo como:
hi Search ctermfg=yellow ctermbg=red guifg=...
Pero luego puede volverse loco con constantes coincidencias amarillas en toda su pantalla. Así que a menudo te encontrarás usando :noh. Esto es tan común que un mapeo está en orden:
nmap <leader>z :noh<CR>
Recuerdo fácilmente esto zya que solía escribir constantemente /zz<CR>(que es una ocurrencia poco frecuente de tipo rápido) para borrar mi resaltado. Pero el :nohmapeo es mucho mejor.
Si te sientes inspirado q/, también deberías jugar con él q:. ¡Ambos son realmente útiles! (Sin embargo, no está realmente relacionado con esta pregunta).
Micah Elliott
Gracias Micah Ya sabía sobre 'q:', aunque no lo uso tanto. Pero 'q /' se perdió por completo en mi educación vim, y creo que tendrá mucho uso.
Stabledog
2
Si presiona Ctrl+ Enterdespués de presionar algo como "/ wordforsearch", puede encontrar la palabra "wordforsearch" en la línea actual. Luego presione npara el próximo partido; presione Npara el partido anterior.
"Cuando ejecutamos una búsqueda, Vim escanea hacia adelante desde la posición actual del cursor, deteniéndose en la primera coincidencia que encuentra", señala Vim.
:help
.:help /
muestra ayuda sobre la búsqueda, y la respuesta a su pregunta aparece un poco más abajo en la página.Respuestas:
Es npara el siguiente y Npara el anterior.
Y si usa la búsqueda inversa con
?
(por ejemplo,?cake
) en lugar de/
, es al revés.Si está instalado en su sistema, debe intentar ejecutar el
vimtutor
comando desde su terminal, que comenzará un tutorial de los comandos básicos de Vim.Rob Wells consejos acerca *y #también es muy pertinente.
fuente
n
como la mayoría de los operadores vim, puede tener como prefijo un número para repetir el comando. Si escribe10n
, se moverá al décimo resultado (después del inicial). También funciona para todos los operadores de movimiento como3j
para bajar 3 líneas.El atajo más útil en Vim, en mi humilde opinión, es la *clave.
Coloque el cursor sobre una palabra, presione la *tecla y saltará a la siguiente instancia de esa palabra.
La #clave hace lo mismo, pero salta a la instancia anterior de la palabra.
Es realmente un ahorro de tiempo.
fuente
n
yN
llevarlo hacia adelante y hacia atrás a través de los*
partidos una vez que haya presionado*
. (O puede simplemente seguir presionando*
para avanzar o#
para retroceder, pero el uso de estas teclas modificada es generalmente inferior al óptimo.)/Func
, que me lleveSomeFunc
y luego presione '*' para ir a la próxima instancia deSomeFunc
cuandoFunc
esté en la siguiente instanciaSomeOtherFunc
./\<foo\>
no coincide"className::foo()"
Cuando comenzaba, necesitaba ver una demostración .
Cómo buscar en Vim
/
fuente
*
es incorrecto. Es decir, un archivoaa aaa
. Búsqueda/aa
, tienes que coincidir. En la primera coincidencia, presionar*
cambia el término de búsqueda.Quizás estés buscando la nllave.
fuente
Escribir nirá al próximo partido.
fuente
Como se discutió, hay varias formas de buscar:
plus, navegando anterior / siguiente con Ny n.
También puede editar / recuperar su historial de búsqueda al abrir el indicador de búsqueda con
/
y luego alternar conC-p
/C-n
. Aún más útil esq/
, que te lleva a una ventana donde puedes navegar por el historial de búsqueda.También para consideración es el más importante
'hlsearch'
(tipo:hls
para habilitar). Esto hace que sea mucho más fácil encontrar múltiples instancias de su patrón. Es posible que incluso desee que sus partidos sean más brillantes con algo como:Pero luego puede volverse loco con constantes coincidencias amarillas en toda su pantalla. Así que a menudo te encontrarás usando
:noh
. Esto es tan común que un mapeo está en orden:Recuerdo fácilmente esto
z
ya que solía escribir constantemente/zz<CR>
(que es una ocurrencia poco frecuente de tipo rápido) para borrar mi resaltado. Pero el:noh
mapeo es mucho mejor.fuente
q/
, también deberías jugar con élq:
. ¡Ambos son realmente útiles! (Sin embargo, no está realmente relacionado con esta pregunta).Si presiona Ctrl+ Enterdespués de presionar algo como "/ wordforsearch", puede encontrar la palabra "wordforsearch" en la línea actual. Luego presione npara el próximo partido; presione Npara el partido anterior.
fuente