2010-11-19 24 views
19

Estoy intentando copiar el texto de mi término de búsqueda de vim. Paso bastante tiempo construyendo expresiones regulares para sed search & replace. Como mi expresión regular suele ser bastante complicada, me gusta crearla en una búsqueda antes de ejecutar:% s/regex/texto nuevo/gCopia del término de búsqueda de vim

En un terminal vim, puedo copiar mi nueva expresión regular de la línea de búsqueda utilizando ratón. Me gustaría usar gvim tanto como sea posible, pero no deja que el mouse haga clic para que lo copie.

¿Alguna idea de cómo poner el término de búsqueda en un búfer?

Gracias,

Andrew

Respuesta

32

En modo comando (donde se encuentra cuando pulsa: en modo normal), puede hacer ctrl-R /, que se ampliará a su último término de búsqueda (otros ctrl-R favoritos son "para su buffer yank, o% para el ruta completa de la ventana actual)

Sin embargo, no necesita hacer eso. Si omite el término de búsqueda para: s, supondrá que desea utilizar lo último que buscó, para que pueda/searchregex, y luego acto seguido:% s // replaceregex/y usará searchgegex para hacer el reemplazo.

15

Uso q: para abrir una ventana editable que contiene el historial de comandos. Desde allí, puede usar todo su conjunto de herramientas Vim habitual para copiar/pegar/etc.

Para la función equivalente con respecto al historial de búsqueda, escriba q/.

0

Puede copiar texto entre registros usando :let, por ejemplo copiar el último término de búsqueda en el registro b:

:let @[email protected]/ 

A continuación, utilice ctrl-R b para insertarlo como en respuesta a Matt Briggs. Por supuesto que no es necesario cuando se puede insertar directamente utilizando ctrl-R / (en modo inserción o ex) o "/p (en modo normal), pero con este mapeo:

nnoremap <silent> y/ :let @"[email protected]/<CR> 

puede escribir y/ copiar la última término de búsqueda al registro sin nombre para pegar fácilmente. Se podría utilizar el registro * en lugar de copiar al portapapeles del sistema y tienen el texto disponible para otras aplicaciones:

nnoremap <silent> y/ :let @*[email protected]/<CR> 

Ver

:help 'clipboard' 
:help registers 

para obtener más información sobre los registros de Vim y utilizando el portapapeles del sistema.

+1

mapeos en modo normal no requieren '' después de ':'. '{x, s, v} map' do. – Benoit

1

q/ muestra el historial de búsqueda. Para la acción inversa de copiar una cadena de su búfer normal al búfer de comando o búfer de búsqueda, que no permite el uso normal de p, use Ctrl-R 1 para pegar.

Cuestiones relacionadas