Respuestas:
Si. Hit Ctrl- Rentonces ". Si tiene caracteres de control literal en lo que has arrancado, el uso Ctrl- R, Ctrl- O, ".
Aquí hay una explicación de lo que puede hacer con los registros. Lo que puede hacer con los registros es extraordinario, y una vez que sabe cómo usarlos, no puede vivir sin ellos.
Los registros son básicamente ubicaciones de almacenamiento para cadenas. Vim tiene muchos registros que funcionan de diferentes maneras:
0
(registro de extracción: cuando se usa y
en modo normal, sin especificar un registro, el texto extraído va allí y también al registro predeterminado),1
a 9
(desplazamiento de registros de eliminación, cuando utiliza comandos como c
o d
, lo que se ha eliminado va al registro 1, lo que estaba en el registro 1 va al registro 2, etc. ),"
(registro predeterminado, también conocido como registro sin nombre. Aquí es donde "entra elCtrl - R, "),a
que z
para su propio uso (en mayúsculasA
a Z
son para anexar a los registros correspondientes)._
(actúa como /dev/null
(Unix) o NUL
(Windows), puedes escribirle pero se descarta y cuando lees, siempre está vacío),-
(pequeño registro de eliminación),/
(registro de patrón de búsqueda, actualizada cuando se mira para el texto con /
, ?
, *
o#
, por ejemplo, también se puede escribir en él para cambiar dinámicamente el patrón de búsqueda),:
(almacena el último comando escrito VimL a través de Q
o:
, solo lectura),+
y *
(registros del portapapeles del sistema, puede escribirles para configurar el portapapeles y leer el contenido del portapapeles)Ver :help registers
para la referencia completa.
Puede, en cualquier momento, usar :registers
para mostrar el contenido de todos los registros. Los sinónimos y las abreviaturas para este comando son :display
, :reg
y :di
.
En Insertar o el modo de línea de comandos, Ctrl- Rademás de un nombre de registro, inserta el contenido de este registro. Si desea insertarlos literalmente (sin sangría automática, sin conversión de caracteres de control como 0x08
retroceso, etc.), puede usar Ctrl- R, Ctrl- O, nombre de registro. Ver :help i_CTRL-R
y los siguientes párrafos para más referencia.
Pero también puede hacer lo siguiente (y probablemente olvidé muchos usos para los registros).
En modo normal, golpea ":p. El último comando que usó en vim se pega en su búfer.
Descompongamos: "
es un comando de modo Normal que le permite seleccionar qué registro se utilizará durante la siguiente operación de extracción, borrado o pegado. Entonces ":selecciona el registro de dos puntos (almacenando el último comando). Entonces pes un comando que ya conoce, pega el contenido del registro.
cf. :help "
,:help quote_:
Que está editando un archivo VIML (por ejemplo, su .vimrc
) y desea ejecutar un par de líneas consecutivas en este momento: yj:@"Enter.
Aquí, yjcoloca la línea actual y la siguiente (esto se debe a que j es un movimiento lineal pero está fuera del alcance de esta respuesta) en el registro predeterminado (también conocido como el registro sin nombre). Luego, el :@
comando Ex reproduce los comandos Ex almacenados en el registro dado como argumento, y así "
es como se refiere al registro sin nombre. También vea la parte superior de esta respuesta, que está relacionada.
No confunda el "
usado aquí (que es un nombre de registro) con el "
del ejemplo anterior, que era un comando en modo Normal.
cf. :help :@
y:help quote_quote
Inserte el último patrón de búsqueda en su archivo en modo Insertar, o en la línea de comando, con Ctrl- R,/ .
cf. :help quote_/
,help i_CTRL-R
Corolario: Mantenga su patrón de búsqueda además de añadir una alternativa: /
Ctrl- R, / \|alternative
.
Seleccionó dos palabras en el medio de una línea en modo visual, las jaló con y
, están en el registro sin nombre. Ahora que desea abrir una nueva línea justo debajo de donde se encuentre, con esas dos palabras: :pu
. Esta es la abreviatura de :put "
. El :put
comando, como muchos comandos Ex, funciona solo en línea.
cf. :help :put
También podrías haberlo hecho: :call setreg('"', @", 'V')
entonces p
. La setreg
función establece el registro del cual se da el nombre como primer argumento (como una cadena), lo inicializa con el contenido del segundo argumento (y puede usar registros como variables con el nombre @x
donde x
está el nombre del registro en VimL), y lo convierte en el modo especificado en el tercer argumento, V
para linewise, nada para characterwise y literal ^V
para blockwise.
cf. :help setreg()
. Las funciones inversas son getreg()
y getregtype()
.
Si ha grabado una macro con qa
... q
, :echo @a
le dirá lo que ha escrito y @a
volverá a reproducir la macro (probablemente lo haya sabido, muy útil para evitar tareas repetitivas)
cf. :help q
,help @
Corolario del ejemplo anterior: si tiene 8go
en el portapapeles, @+
reproducirá el contenido del portapapeles como una macro y, por lo tanto, irá al octavo byte de su archivo. En realidad, esto funcionará con casi todos los registros. Si su última cadena insertada estaba dd
en modo Insertar, entonces @.
(porque el .
registro contiene la última cadena insertada) eliminará una línea. (Documentación de Vim está mal en este sentido, ya que establece que los registros #
, %
, :
y .
sólo funciona con p
, P
, :put
y Ctrl- R).
cf. :help @
No confunda :@
(comando que reproduce comandos Vim desde un registro) y @
(comando en modo normal que reproduce comandos en modo normal desde un registro).
Notable excepción es @:
. El registro de comando no contiene los dos puntos iniciales ni el retorno de carro final. Sin embargo, en modo Normal, @:
hará lo que espera, interpretando el registro como un comando Ex, no tratando de reproducirlo en modo Normal. Entonces, si su último comando fue :e
, el registro contiene e
pero @:
volverá a cargar el archivo, no irá al final de la palabra.
cf. :help @:
Mostrar lo que va a hacer en el modo Normal antes de ejecutarlo: @='dd'
Enter. Tan pronto como presiona la =
tecla, Vim cambia a la evaluación de expresiones: cuando ingresa una expresión y presiona Enter, Vim la calcula y el resultado actúa como un contenido de registro. Por supuesto, el registro =
es de solo lectura y de una sola vez. Cada vez que empiece a usarlo, deberá ingresar una nueva expresión.
cf. :help quote_=
Corolario: si está editando un comando y se da cuenta de que debe insertar en su línea de comando alguna línea de su búfer actual: ¡no presione Esc! Uso Ctrl- R =getline(58)
Enter. Después de eso, volverá a la edición de la línea de comandos, pero ha insertado el contenido de la 58a línea.
Defina un patrón de búsqueda manualmente: :let @/ = 'foo'
cf. :help :let
Tenga en cuenta que al hacer eso, no necesita escapar /
en el patrón. Sin embargo, debe duplicar todas las comillas simples, por supuesto.
Copiar todas las líneas que comienzan con foo
, y después todas las líneas que contienen bar
al portapapeles, la cadena de estos comandos: qaq
(restablece el un registro que almacena un macro vacío en su interior), :g/^foo/y A
, :g/bar/y A
,:let @+ = @a
.
El uso de un nombre de registro de capital hace que el registro funcione en modo agregar
Mejor, si Q
no ha sido reasignado por mswin.vim
, inicie el modo Ex con Q
, encadene esos "comandos de dos puntos" que en realidad se denominan mejor "comandos Ex", y vuelva al modo Normal escribiendo visual
.
cf. :help :g
` :help :y
`:help Q
-Espacio el doble de su archivo: :g/^/put _
. Esto coloca el contenido del registro del agujero negro (vacío al leer, pero escribible, comportándose como /dev/null
) linealmente, después de cada línea (¡porque cada línea tiene un comienzo!).
Añadir una línea que contiene foo
antes de cada línea: :g/^/-put ='foo'
. Este es un uso inteligente del registro de expresión. Aquí, -
es sinónimo de .-1
(cf. :help :range
). Como :put
coloca el texto después de la línea, debe decirle explícitamente que actúe sobre el anterior.
Copie todo el búfer en el portapapeles del sistema: :%y+
.
cf. :help :range
(para la %
parte) y :help :y
.
Si ha errores en el registro de una macro, puede escribir :let @a='
Ctrl- R =replace(@a,"'","''",'g')
Enter '
y editarlo. Esto modificará el contenido de la macro almacenada en el registro a
, y se muestra aquí cómo puede usar el registro de expresión para hacer eso.
Si lo hiciste dddd
, podrías hacerlo uu
para deshacer. Con p
usted podría obtener la última línea eliminada. Pero en realidad también puede recuperar hasta 9 eliminaciones con los registros a @1
través de@9
.
Aún mejor, si lo haces "1P
, entonces .
en modo Normal jugará"2P
, y así sucesivamente.
cf. :help .
y:help quote_number
Si desea insertar la fecha actual en modo Insertar: Ctrl-R=strftime('%y%m%d')
Enter .
cf. :help strftime()
Una vez más, lo que puede ser confuso:
:@
es un comando de línea de comandos que interpreta el contenido de un registro como vimscript y lo origina@
en el comando de modo normal que interpreta el contenido de un registro como pulsaciones de teclas en modo normal (excepto cuando usa el :
registro, que contiene el último comando reproducido sin los dos puntos iniciales: en este caso, vuelve a escribir el comando como si también volviera a escribir los dos puntos y La clave de retorno final).
"
en el modo normal comando que le ayuda a seleccionar un registro para tirar, pegar, eliminar, corregir, etc.
"
también es un nombre de registro válido (el registro predeterminado o sin nombre) y, por lo tanto, se puede pasar como argumento para los comandos que esperan nombres de registroPara pegar algo que es el portapapeles del sistema, puede usar SHIFT- INS.
Funciona en Windows, pero supongo que también funciona bien en Linux.
:!rm -rf /<cr>
, lo ejecutará. ¡Utilice registros en su lugar!
shift-ins
sea más fácil que ctrl-R+*
? Esto es, por supuesto, si estás en gvim. Si está en el terminal conectado a otra máquina y desea pegar algo de su portapapeles, ¿sabe algo mejor que shift-ins
? porque los registros no funcionan en esa situación. Por favor, piense antes de comentar y hacer otras cosas (como downvoting).
"Me gustaría pegar el texto arrancado en la línea de comando de Vim".
Si bien la respuesta más votada es muy completa, prefiero editar el historial de comandos.
En el modo normal, Tipo: q:
. Esto le dará una lista de comandos recientes, editables y de búsqueda con comandos vim normales. Comenzará en una línea de comando en blanco en la parte inferior.
Para lo que el artículo pregunta exactamente, pegando una línea arrancada (o cualquier cosa) en una línea de comando, tira el texto y luego: q:p
(entrar en el modo de edición del historial de comandos, y luego (p) usar el texto tirado en un nuevo comando línea. Editar a voluntad, enterpara ejecutar.
Para salir del modo de historial de comandos, es todo lo contrario. En modo normal en el historial de comandos, escriba: :q
+enter
Para pegar algo del portapapeles del sistema en la línea de comando de Vim ("modo de comando"), use Ctrl+ Rseguido de +. Para mí, al menos en Ubuntu, Shift+ Insno funciona.
PD: No estoy seguro de por qué Ctrl+ Rseguido por *, que en teoría es lo mismo que Ctrl+ Rseguido por +no parece funcionar siempre. Busqué y descubrí la +versión y parece funcionar siempre, al menos en mi caja.
Estaba teniendo un problema similar Quería que el texto seleccionado terminara en un comando, pero no confiara en pegarlo. Aquí está el comando para el que estaba tratando de escribir una asignación:
:call VimuxRunCommand("python")
Los documentos para este complemento solo se muestran usando literales de cadena. Lo siguiente se interrumpirá si intenta seleccionar texto que contiene comillas dobles:
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
Para evitar esto, solo debe hacer referencia al contenido de la macro usando @
:
vnoremap y:call VimuxRunCommand(@")<cr>
Pasa el contenido del registro sin nombre y funciona con mi comilla doble y las cajas de borde multilínea.
@
personaje al comando vimux. piense @
en escapar de la siguiente cita doble y se trate como un registro en lugar de como un personaje normal. Lo que vnoremap
he definido está activo en modo visual, por lo que tira del texto seleccionado y luego lo pega en el comando vimux, enviándolo a un intérprete en ejecución en un panel adyacente. realmente genial para trabajar en un script y probar pequeñas porciones de él con un par de teclas.
OS X
Si está utilizando Vim en Mac OS X, desafortunadamente viene con una versión anterior y no cumple con las opciones del portapapeles. Afortunadamente, Homebrew puede resolver fácilmente este problema.
Instalar Vim:
brew install vim --with-lua --with-override-system-vi
Instale la versión GUI de Vim:
brew install macvim --with-lua --with-override-system-vi
Reinicie el terminal para que surta efecto.
Agregue la siguiente línea a ~/.vimrc
set clipboard=unnamed
Ahora puede copiar la línea en Vim con yy
y pegarla en todo el sistema.
Para el contexto, esta información viene de fábrica, sin complementos, sin comportamiento .vimrc Vim 7.4 en Linux Mint con las opciones predeterminadas.
Siempre puede seleccionar texto con el mouse (o usando Vo vy colocando la selección en el registro "*), y pegarlo en la línea de comando con Shift+ Ctrl+v .
Si escribe Ctrl+ ren la línea de comando, se solicitará un nombre de registro. así que al escribir :CTRL-r*colocará el registro de contenido * en la línea de comando. Pegará cualquier registro, no solo "*. Ver:help c_CTRL-R
.
Además, el botón central del mouse se pegará en la línea de comando.
Ver :help->quote-plus
para una descripción de cómo X Window trata con la selección. Incluso en un Vim simple y listo para usar (de nuevo, en Vim 7.4 en Linux Mint, de todos modos), cualquier selección realizada con el botón izquierdo del mouse se puede pegar en la línea de comando con el botón central del mouse.
Además, el botón central del mouse también pegará el texto seleccionado en Vim en muchas otras aplicaciones de X Window, incluso las GUI (por ejemplo, Firefox y Thunderbird ) y también es posible pegar texto en la línea de comando donde el texto se seleccionó de otras aplicaciones .
Consulte: ayuda-> selección x11 para obtener información adicional.
tl; dr
Pruebe primero el enfoque: CTRL-r, y luego use Shift+ Ctrl+ vo el botón central del mouse si necesita algo más.
Se admite que puede ser confuso.
"[a-z]y
: Copie el texto en el registro [az]
Use :!
para ir al comando de edición
Ctrl+ R: Sigue la identidad del registro para pegar lo que copias.
Solía CentOS 7.
Si tiene dos valores agrupados en dos registros diferentes (por ejemplo, registrarse a
y registrarse b
), simplemente puede establecer una variable c
y realizar la operación en ella.
Por ejemplo, :set c = str2float(@a) + str2float(@b)
y luego puede pegar el contenido de c
cualquier lugar.
Por ejemplo, mientras está en el modo INSERTAR, CTRL + R
escriba =
para ingresar en el registro de expresiones y simplemente escriba c
después del signo igual y presione ENTER. Hecho, ahora deberías tener el total de a
yb
registros.
¡Todo esto se puede grabar en una macro y repetir!
La str2float
función se utiliza si está trabajando con flotantes, si no lo hace, obtendrá enteros en su lugar.
No estoy seguro de si esto es idiomático, pero funcionó para mi caso donde necesitaba agregar 2 números seguidos y repetirlo para 500 líneas más.