"Encontrar siguiente" en Vim


536

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"?


33
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.

Rob Wells consejos acerca *y #también es muy pertinente.


1
vea también el plugin de búsqueda de índice vim.org/scripts/script.php?script_id=1682
SergioAraujo

¿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.

Es realmente un ahorro de tiempo.


66
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()"
PUK

84

Cuando comenzaba, necesitaba ver una demostración .

Cómo buscar en Vim

  1. tipo /
  2. escriba el término de búsqueda, por ejemplo, "var"
  3. prensa enter
  4. para la próxima instancia, presione n(para la anterior N )

2
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.
Rob Wells



13

Como se discutió, hay varias formas de buscar:

/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.


2
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.


1
"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.
Chuck bajo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.