Buscar selección en vim

107

Utilizo complementos vim y vim para Visual Studio cuando escribo C ++. A menudo, me encuentro queriendo buscar una cadena dentro de una función, por ejemplo, cada llamada a object->public_member.memberfunc().

Sé que vim ofrece una manera conveniente de buscar una sola palabra, presionando *y #, y también puede buscar cadenas escritas usando el /comando de barra oblicua . Al intentar buscar todas las instancias de una cadena más larga como la anterior, se tarda un poco en volver a escribir después /.

¿Hay alguna forma de buscar la selección? Por ejemplo, resalte con v, luego copie con y, ¿hay alguna forma de pegar después /? ¿Existe un atajo más fácil?

Marcin
fuente
Posible duplicado de ¿Cómo busco el texto seleccionado?
acm

Respuestas:

154

Consulte este consejo de Vim: busque texto seleccionado visualmente

O simplemente puede tirar del texto seleccionado con y e ir al modo de búsqueda / , luego puede pegar el último texto tirado con Ctrl + R 0

CMS
fuente
4
@CMS. Gracias. ¡Buen consejo! Usar: reg para ver qué hay en sus registros y luego usar cntl-R N para obtener lo que está en el registro N es excelente.
Rob Wells
85

Responder

  1. Tira del texto que quieres buscar.
  2. q/p
  3. Enter

Explicación

q/funciona de manera similar a la búsqueda de vainilla, /excepto que está en modo de comando, por lo que en prealidad "pega" en lugar de escribir el carácter p. Entonces, lo anterior copiará el texto que está buscando y lo pegará en una búsqueda.

Para más detalles escriba :help q/

Cory Klein
fuente
4
Me gusta este, porque me parece muy poco conveniente escribir <ctrl-r>.
enero
¡Excelente! Usar emacs en evil-mode, esto realmente funciona, mientras que la respuesta aceptada se rompe miserablemente (probablemente debido al uso de la Ctrlclave).
Eestrada
2
Excelente para cadenas simples, pero no escapa a los caracteres especiales de expresiones regulares, como se indica en el comentario de esta otra respuesta .
Bluu
1
Y ni siquiera necesitas tirarlo. Selecciónelo en visual, q/gvpdonde gvrepresenta la última selección visual ...
1
@nwildner, q/gvpno me funciona. ¿Podría aclarar su sugerencia?
bam
38

Utilice q / en lugar de solo / . (Lo mismo con q : ). ¡Ahora puede editar VIM a través de su historial de comandos y búsqueda! (Pruebe Ctrl-N y Ctrl-P en algún momento).


fuente
10

Me acabo de enterar (a través del excelente libro Practical Vim ) que hay un complemento para eso. Puede encontrar el complemento en GitHub .

El complemento le permite buscar una selección visual con *y #.

linda maquina
fuente
5
Tenga en cuenta que las otras respuestas no escapan. Usando esos métodos, los metacaracteres seleccionados no se buscarán literalmente, dependiendo de la magicconfiguración actual . Esto incluso podría hacer que la búsqueda fallara en metacaracteres que requieran balance. El complemento mencionado aquí se escapará antes de buscar el texto seleccionado.
Kurt Hutchinson
1
funciona, pero desafortunadamente, no se puede usar npara ir al siguiente elemento encontrado, mientras que los enfoques de Cory y CMS sí permiten ..
Ayrat
2

De hecho, puede seleccionar texto visualmente y presionar * y # para buscar la siguiente aparición ... Funcionará de la misma manera, la única advertencia es que:

Los espacios en blanco en la selección coinciden con cualquier espacio en blanco, al buscar (si busca "hola mundo" también encontrará "hola" al final de una línea, con "mundo" al comienzo de la siguiente línea).

http://vim.wikia.com/wiki/Search_for_visually_selected_text

AhHatem
fuente
2
para mí, seleccionar texto visualmente y luego presionar * solo amplía mi selección visual.
martin jakubik
No puede por defecto a menos que ponga en vimrc el mapeo de la página ..
Ayrat