En la línea de comando, presione y <C-u>
luego escriba @*
e ingrese.
<C-u>
eliminará el rango visual '<,'>
que se ha insertado automáticamente si se selecciona visualmente algún texto.
:@*
ejecutará el contenido del *
registro que contiene todo lo que se selecciona visualmente en este momento.
Incluso si el texto seleccionado / resaltado está en su navegador web (firefox, chrome, ...), funcionará, el *
registro le permitirá acceder directamente a él en vim.
Si se selecciona el texto en un buffer de Vim, otra solución es copiarlo en un registro llamado, por ejemplo, el de un registro mediante la tipificación "ay
.
Luego, en la línea de comando, escriba: <C-r>a
e ingrese.
Ctrl+ rle dará una especie de mensaje representado por el personaje "
(para más información, lea :h c_Ctrl-r
).
En este nuevo mensaje, si le da el nombre de un registro, su contenido se insertará en la línea de comando, donde podrá editarlo antes de la ejecución.
Además, si copia algún texto sin especificar un registro, será accesible desde el registro sin nombre " .
Supongamos que tiene una línea de vimscript en un archivo y desea obtenerla rápidamente, puede copiarla Y
, luego buscarla en la línea de comando con: :<C-r>"
e ingresar.
Finalmente, si usa esta última solución, solo hay un problema que debe tener en cuenta.
Si ve un personaje extraño en la línea de comando como este ^M
, es la notación de intercalación del retorno de carro. Debería eliminarlo, de lo contrario probablemente obtendrá un error.
En resumen, usted:
- copia tu línea de vimscript con
Y
- cambiar al modo de comando con
:
- presione
<C-r>
para ingresar a la solicitud de registros
- escriba
"
para llamar al registro sin nombre
- presione la tecla de retroceso para eliminar el
^M
personaje
- y pulsa enter.
@*
antes, ¡gracias!: <C-r>a
en realidad también funcionó bien :) Supongo que vim leyó los^M
's como retorna la línea - y ejecutó cada uno como su propia línea / comando individual.De hecho, lo hago un poco diferente, solo hago las ediciones en mi vimrc y lo vuelvo a buscar cada vez que lo escribo. (Tengo un conjunto de archivos vimrc en cascada, así que esto me permite cambiar cualquiera de ellos).
fuente
Más directamente a la pregunta que a mi otra respuesta, podría definir un mapeo como este (
nnoremap
para ninguna selección, simplemente ejecute la línea actual;vnoremap
para cuando el modo visual está activo):En ambos casos, la "línea actual" es
:execute
d, por lo que en la versión visual estás:execute
pasando una línea tras otra a través de la selección visual.Como se indicó en otra respuesta,
<C-u>
elimina la especificación de rango que aparece en la línea de comando cuando :se escribe. Los|
caracteres deben escaparse porque, de lo contrario, se interpretan como el final delvnoremap
comando.Esto también podría convertirse en una función para deshacerse de algunas de las gimnasias de escape, pero no me parece una gran victoria en este momento. Básicamente sería el vnoremap expandido en múltiples líneas y
call
editado con un rango o no dependiendo del modo de mapeo [nv].fuente