vim - salir - seleccionar todo en vi
¿Cómo pegar el texto yanked en la línea de comandos Vim? (9)
"[az]y
copiar el texto al registro [az];uso
:!
ir a editar comando;CTRL+R
sigue la identidad del registro para pegar lo que copia.
Solía centOS7.
Me gustaría pegar el texto tirado en la línea de comandos Vim. ¿Es posible?
"Me gustaría pegar el texto tirado en la línea de comandos Vim".
Si bien la respuesta más votada es muy completa, prefiero editar el historial de comandos.
En el modo normal, escriba: q:
Esto le dará una lista de comandos recientes, editables y con capacidad de búsqueda con los comandos vim normales. Comenzarás en una línea de comando en blanco en la parte inferior.
Exactamente lo que pide el artículo, pegar una línea tirada (o tirar cualquier cosa) en una línea de comando, tirar su texto y luego: q:p
(entrar en el modo de edición del historial de comandos, y luego (p) utilizar su texto tirado) una nueva línea de comando. Edite a voluntad, ingrese para ejecutar.
Para salir del modo de historial de comandos, es lo contrario. En el modo normal en el historial de comandos, escriba :q
+ enter
Esta pregunta es bastante antigua, pero como se ha visto tantas veces, parece ser muy popular. Pondré esto aquí para la posteridad. Para el contexto, esta información proviene de la configuración original, sin complementos, sin comportamiento .vimrc vim 7.4 en Linux con las opciones predeterminadas.
siempre puede seleccionar texto con el mouse (o usando V o v y colocando la selección en el "* registro") y pegarlo en la línea de comando con SHIFT-CTL-v.
si escribe CTL-r en la línea de comando, aparecerá un mensaje para solicitar un nombre de registro. de modo que al escribir: CTL-r * colocará el registro de contenido * en la línea de comandos. pegará cualquier registro, no solo "*. ver: ayuda c_CTRL-R.
además, el botón central del ratón se pegará en la línea de comando. vea: help-> quote-plus para una descripción de cómo x11 trata la selección. incluso en un vim simple, 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 puede pegarse 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 x11, incluso las de interfaz gráfica de usuario (por ejemplo, Firefox, Thunderbird) y el pegado de texto en la línea de comandos también es posible cuando el texto se seleccionó desde otras aplicaciones.
ver: ayuda-> x11-selection para información adicional.
tl; dr
Pruebe primero el método: CTL-r, luego use SHIFT-CTL-v o el botón central del ratón si necesita algo más.
Se admite que puede ser confuso.
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 muestran el uso de literales de cadena. Lo siguiente se interrumpirá si intenta seleccionar texto que contenga comillas dobles:
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
Para solucionar esto, simplemente haga referencia al contenido de la macro utilizando @
:
vnoremap y:call VimuxRunCommand(@")<cr>
Pasa el contenido del registro sin nombre y funciona con mis comillas de doble comillas y multilínea.
Para pegar algo del portapapeles del sistema en la línea de comando vim ("modo de comando"), use Ctrl + R seguido de + . Para mí, al menos en Ubuntu, Shift + Ins no está funcionando.
PD: No estoy seguro de por qué Ctrl + R seguido de * , que en teoría es lo mismo que Ctrl + R seguido de + no parece funcionar siempre. Busqué y descubrí la versión + y parece funcionar siempre, al menos en mi caja.
Para pegar algo que es el portapapeles del sistema, solo puede usar SHIFT - INS .
Funciona en Windows, pero supongo que también funciona bien en Linux.
Sí. Presione Ctrl - R luego " . Si tiene caracteres de control literales en lo que ha tirado, use Ctrl - R , Ctrl - O , " .
Aquí hay una explicación de lo que puedes hacer con los registros. Lo que puedes hacer con los registros es extraordinario, y una vez que sabes cómo usarlos no puedes 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 yank: cuando usay
en modo normal, sin especificar un registro, el texto de yanked va allí y también al registro predeterminado), -
1
a9
(desplazar los registros de eliminación, cuando usa comandos comoc
od
, 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 " viene en Ctrl - R " ), -
a
az
para su propio uso (mayúsculas aZ
son para adjuntar a los registros correspondientes). -
_
(actúa como/dev/null
(Unix) oNUL
(Windows), puedes escribir en él pero se descarta y cuando lo lees, siempre está vacío), -
-
(pequeño registro de borrado), -
/
(registro de patrones de búsqueda, actualizado cuando busca texto con/
,?
,*
o#
por ejemplo; también puede escribir en él para cambiar dinámicamente el patrón de búsqueda), -
:
(almacena el último comando VimL escrito a través deQ
o:
solo lectura), -
+
y*
(registros del portapapeles del sistema, puede escribir en ellos para configurar el portapapeles y leer el contenido del mismo)
Ver :help registers
para la referencia completa.
Puede, en cualquier momento, utilizar :registers
para visualizar el contenido de todos los registros. Los sinónimos y las abreviaturas de este comando son :display
:reg
y :di
.
En el modo Insert o línea de comando, Ctrl - R más 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
a retroceso, etc.), puede usar Ctrl - R , Ctrl - O , nombre de registro. Consulte :help i_CTRL-R
y los párrafos siguientes para obtener más información.
Pero también puedes hacer lo siguiente (y probablemente olvidé muchos usos para los registros).
En el modo normal, presione " : p . El último comando que utilizó en vim se pega en su búfer.
Vamos a descomponer:"
es un comando en modo Normal que le permite seleccionar qué registro se utilizará durante la próxima operación de tirón, eliminación o pegado. Entonces " : selecciona el registro de dos puntos (almacenamiento del último comando). Entonces p es un comando que ya conoces, pega el contenido del registro.cf.
:help "
,:help quote_:
Está editando un archivo VimL (por ejemplo, su
.vimrc
) y le gustaría ejecutar un par de líneas consecutivas en este momento: y j : @ " Intro .
Aquí, yj coloca 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"
es cómo se refiere al registro sin nombre. También vea la parte superior de esta respuesta, que está relacionada.No confunda
"
usado aquí (que es un nombre de registro) con"
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 el 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 pero agregue una alternativa:
/
Ctrl - R , //|alternative
.Ha seleccionado dos palabras en el medio de una línea en modo visual, las ha jalado con
y
, están en el registro sin nombre. Ahora desea abrir una nueva línea justo debajo de donde se encuentra, con esas dos palabras:pu
. Esto es una abreviatura de:put "
. El comando:put
, como muchos comandos Ex, solo funciona en línea.cf.
:help :put
También podría haber hecho:
:call setreg(''"'', @", ''V'')
luegop
. La funciónsetreg
establece el registro cuyo nombre se da como primer argumento (como una cadena), lo inicializa con el contenido del segundo argumento (y puede usar registros como variables con el nombre@x
dondex
es el nombre del registro en VimL), y lo convierte en el modo especificado en el tercer argumento,V
para línea, nada para carácter y literal^V
para bloque.cf.
:help setreg()
. Las funciones inversas songetreg()
ygetregtype()
.Si ha grabado una macro con
qa
...q
, entonces:echo @a
le dirá lo que ha escrito y@a
reproducirá la macro (probablemente la conocía, muy útil para evitar tareas repetitivas)cf.
:help q
,help @
Corolario del ejemplo anterior: si tiene
8go
en el portapapeles, entonces@+
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 fuedd
en modo Insertar, entonces@.
(porque el registro contiene la última cadena insertada) eliminará una línea. (La documentación de Vim es incorrecta a este respecto, ya que indica que los registros#
,%
:
y.
Solo funcionarán conp
,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).Excepción notable es
@:
El registro de comando no contiene los dos puntos iniciales ni contiene el retorno de carro final. Sin embargo, en el modo Normal,@:
hará lo que espera, interpretando el registro como un comando Ex, sin intentar reproducirlo en el modo Normal. Entonces, si su último comando fue:e
, el registro contienee
pero@:
volverá a cargar el archivo, no irá al final de la palabra.cf.
:help @:
Muestra lo que harás en modo Normal antes de ejecutarlo:
@=''dd''
Enter . Tan pronto como presiona la tecla=
, Vim cambia a la evaluación de expresiones: al ingresar una expresión y presionar Intro , Vim la calcula y el resultado actúa como un contenido de registro. Por supuesto, el registro=
es de solo lectura y one-shot. Cada vez que comiences a usarlo, deberás 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 comandos alguna línea de su búfer actual: ¡no presione Esc ! Utilice 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 línea 58.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, necesitas duplicar todas las comillas simples, por supuesto.Copie todas las líneas que comiencen con
foo
, y luego todas las líneas que contenganbar
al portapapeles,qaq
estos comandos:qaq
(restablece el registro que almacena una macro vacía)qaq
:g/^foo/y A
qaq
:g/bar/y A
,:let @+ = @a
.El uso de un nombre de registro de mayúsculas hace que el registro funcione en modo agregado
Mejor, si
Q
no ha sido reasignado pormswin.vim
, inicie el modo Ex conQ
,mswin.vim
esos "comandos de dos puntos" que en realidad son mejor llamados "comandos Ex", y vuelva al modo Normal escribiendovisual
.cf.
:help :g
:help :y
:help Q
Doble espacio en su archivo
:g/^/put _
. Esto coloca el contenido del registro de agujeros negros (vacío cuando se lee, pero se puede escribir, se comporta como/dev/null
) en línea, después de cada línea (¡porque cada línea tiene un principio!).Agregue una línea que contenga
foo
antes de cada línea:::g/^/-put =''foo''
. Este es un uso inteligente del registro de expresiones. Aquí,-
es un sinónimo de..-1
(cf:help :range
). Dado que:put
coloca el texto después de la línea, debes indicarle explícitamente que actúe sobre la anterior.Copie todo el búfer en el portapapeles del sistema
:%y+
.cf.
:help :range
(para la parte%
) y:help :y
.Si ha grabado mal una macro, puede escribir
:let @a=''
Ctrl - R=replace(@a,"''","''''",''g'')
Ingrese''
y edítelo. Esto modificará el contenido de la macro almacenada en el registroa
, y se muestra aquí cómo puede usar la expresión registro para hacerlo.Si hiciste
dddd
, podrías haceruu
para deshacer. Conp
podrías obtener la última línea eliminada. Pero en realidad, también puede recuperar hasta 9 eliminaciones con los registros@1
a@9
.Aún mejor, si haces
"1P
, entonces, en el modo Normal se reproducirá"2P
, y así sucesivamente.cf.
:help .
y:help quote_number
Si desea insertar la fecha actual en el modo Insertar: Ctrl - R
=strftime(''%y%m%d'')
Entre .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 modo normal comando que interpreta el contenido de un registro como pulsaciones en modo normal (excepto cuando usa:
registro, que contiene el último comando reproducido sin los dos puntos iniciales: en este caso, se repite el comando como si también hubiera vuelto a escribir el comando dos puntos y la tecla de retorno final)."
en el comando de modo normal 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 un argumento para comandos que esperan nombres de registros
También vale la pena señalar que los registros de tirón son los mismos que los de los búferes de macros. En otras palabras, puede simplemente escribir todo su comando en su documento (incluido su fragmento de código pegado), luego "by
arrastrarlo al registro b
, y luego ejecutarlo con @b
.
OSX
Si está usando vim en MAC OSX, desafortunadamente viene con la versión más antigua y no cumple con las opciones del portapapeles. Por suerte, Homebrew puede resolver fácilmente este problema.
instalar vim:
brew install vim --with-lua --with-override-system-vi
instalar gui verion de vim:
brew install macvim --with-lua --with-override-system-vi
reinicia el terminal para que surta efecto.
añada 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.