2012-09-08 8 views
7

Digamos que hay un bloque de texto que quiero buscar en el archivo. ¿Hay alguna manera de hacer una selección de bloque visual de ese texto y luego convertirlo en el término de búsqueda actual? De esa manera podría hacer s // replacementText/g sin escribir todo en el lado izquierdo del comando sustituto.¿Puedo hacer un bloqueo visual del término de búsqueda actual?

Respuesta

3

Tendrás que perdonarme, no recuerdo dónde encontré esto, pero funciona de maravilla. Solo agregue a su .vimrc. Utilice su típica * y # después de seleccionar visualmente:

" Search for selected text, forwards or backwards. 
vnoremap <silent> * :<C-U> 
    \let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR> 
    \gvy/<C-R><C-R>=substitute(
    \escape(@", '/\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR><CR> 
    \gV:call setreg('"', old_reg, old_regtype)<CR> 
vnoremap <silent> # :<C-U> 
    \let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR> 
    \gvy?<C-R><C-R>=substitute(
    \escape(@", '?\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR><CR> 
    \gV:call setreg('"', old_reg, old_regtype)<CR> 

La ventaja real aquí es que este se escapa ningún caracteres especiales, frente a sólo pegar en comando de búsqueda. También tiene menos teclas, lo que maximiza la vimness de su tarea.

4

Realice un bloqueo visual y gírelo al registro sin nombre "": con un bloque visual seleccionado, escriba y para tirar. Comience la búsqueda con / - o :s/ y escriba Ctrl-r luego " para insertar el contenido del registro sin nombre como el término de búsqueda.

Esto no hará que el bloque sea la búsqueda actual, pero es casi tan fácil.

Ctrl-r se puede utilizar en cualquier lugar de la línea de comandos, por lo que también puede usar esto p. Ej. para completar el texto de sustitución o reemplazo, o en el modo de inserción.

+0

Un método excelente y confiable, especialmente si se encuentra en una máquina o entorno remoto que no puede cargar fácilmente un .vimrc personalizado. – kenny

Cuestiones relacionadas