Cómo pegar texto tirado en la línea de comandos de Vim?


Me gustaría pegar texto tirado en la línea de comandos de Vim. Es posible?

Author: kenorb, 2010-10-22

9 answers

Sí. Pulsa Ctrl-R entonces ". Si usted tiene literal de caracteres de control en lo que tiene tirón, utilice Ctrl-R, Ctrl-O, ".

Aquí hay una explicación de lo que puede 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 ha muchos registros que funcionan de diferentes maneras:

  • 0 (yank register: cuando se usa y en modo normal, sin especificar un registro, el texto yanqui va allí y también al registro predeterminado),
  • 1 a 9 (cambiando los registros de borrado, cuando se usan 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 el " viene en Ctrl-R, "),
  • a a z para su propio uso (A en mayúsculas a Z son para anexar a los registros correspondientes).
  • _ (actúa como /dev/null (Unix) o NUL (Windows), puedes escribir en él pero se descarta y cuando lees de él, siempre está vacío),
  • - (pequeño registro de borrado),
  • / (registro de patrones de búsqueda, actualizado cuando se 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 escrito por VimL a través de Q o :, solo leído),
  • + y * (registros del portapapeles del sistema, puede escribirles para configurar el portapapeles y leer el contenido del portapapeles de ellos)

Véase :help registers para la referencia completa.

Puede, en cualquier momento, utilizar :registers para mostrar el contenido de todos registrar. Los sinónimos y abreviaturas de este comando son :display, :reg y :di.

En modo Insertar o Línea de comandos, 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. Ver :help i_CTRL-R y párrafos siguientes para más información referencia.

Pero también puedes hacer lo siguiente (y probablemente olvidé muchos usos para registros).

  • En modo normal, golpe ":p. El último comando que usó en vim se pega en su búfer.
    Let's decompose: " es un comando de modo normal que le permite seleccionar qué registro se utilizará durante la siguiente operación de tirar, eliminar o pegar. Así ": selecciona el colon registro (almacenamiento de última comando). Entonces p es un comando que ya conoces, pega el contenido del registro.

    Cf. :help ", :help quote_:

  • Estás editando un VimL archivo (por ejemplo, su .vimrc) y desea ejecutar un par de líneas consecutivas ahora: yj:@"Introduzca.
    Aquí, yj yanks línea actual y siguiente (esto es porque j es un movimiento lineal pero esto está fuera del alcance de esta respuesta) en el registro predeterminado (también conocido como el registro sin nombre). Entonces el comando :@ Ex reproduce comandos Ex almacenados en el registro dado como argumento, y " es como 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 el " del ejemplo anterior, que era un comando de modo normal.

    Cf. :help :@ y :help quote_quote

  • Insertar el último patrón de búsqueda en el archivo en modo de Inserción, o en la línea de comandos, con Ctrl-R, /.

    Cf. :help quote_/, help i_CTRL-R

    Corolario: Mantener su patrón de búsqueda, pero agregar una alternativa: / Ctrl-R, / \|alternative.

  • Ha seleccionado dos palabras en medio de una línea en modo visual, tiró de ellas con y, están en el registro sin nombre. Ahora quieres abrir una nueva línea justo debajo de donde estás, con esas dos palabras: :pu. Esta es la abreviatura de :put ". El comando :put, como muchos comandos Ex, solo funciona en línea.

    Cf. :help :put

    También podrías haber hecho: :call setreg('"', @", 'V') luego p. La función setreg establece el registro del que 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 es el nombre del registro en VimL), y lo convierte en el modo especificado en el tercer argumento, V para linewise, nothing 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, luego :echo @a te dirá lo que has escrito, y @a volverá a reproducir la macro (probablemente la conocías, muy útil para evitar repeticiones tareas)

    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 fue dd en modo de inserción, entonces @. (porque el registro . contiene la última cadena insertada) eliminará una línea. (La documentación de Vim es errónea en este sentido, ya que afirma que los registros #, %, : y . sólo funcionará con p, P, :put y Ctrl-R).

    Cf. :help @

    No confunda :@ (comando que reproduce comandos Vim desde un registro) y @ (comando de modo normal que reproduce comandos de modo normal desde un registro).

    La excepción notable es @:. El comando register no contiene los dos puntos iniciales ni el retorno de carro final. Sin Embargo, en Condiciones Normales mode, @: hará lo que usted espera, interpretando el registro como un comando Ex, no tratando de reproducirlo en modo normal. Así que si su último comando fue :e, el registro contiene e pero @: recargará el archivo, no irá al final de word.

    Cf. :help @:

  • Muestra lo que harás en modo normal antes de ejecutarlo: @='dd' Introduzca . Tan pronto como pulse la tecla =, Vim cambia a expression evaluation: al introducir una expresión y pulsar Ingrese, Vim lo 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, tendrá que introducir 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 desde su búfer actual: no presione Esc! El Uso De Ctrl-R =getline(58) Introduzca. 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, es necesario duplicar todas las comillas simples, por supuesto.

  • Copie todas las líneas que comienzan con foo, y después todas las líneas que contienen bar al portapapeles, encadene estos comandos: qaq (restablece el registro a almacenando una macro vacía dentro de él), :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 anexar

    Mejor, si Q no ha sido reasignado por mswin.vim, inicie el modo Ex con Q, la cadena de los "colon comandos" que en realidad son mejor llamado "Ex comandos", y volver al modo Normal escribiendo visual.

    Cf. :help :g, :help :y, :help Q

  • Doble espacio para su archivo: :g/^/put _. Esto pone el contenido del registro del agujero negro (vacío al leer, pero escribible, comportándose como /dev/null) linewise, después de cada línea (porque cada línea tiene un principio!).

  • Añadir 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 sinónimo de .-1 (cf. :help :range). Dado que :put coloca el texto después de la línea, debe indicarle explícitamente que actúe sobre la línea anterior una.

  • Copie todo el búfer al portapapeles del sistema: :%y+.

    Cf. :help :range (para la parte %) y :help :y.

  • Si usted tiene misrecorded una macro, puede escribir :let @a=' Ctrl-R =replace(@a,"'","''",'g') Entrar ' y editarlo. Esto modificará el contenido de la macro almacenada en register a, y aquí se muestra cómo puede usar la expresión register para hacerlo.

  • Si did dddd, usted podría hacer uu con el fin de deshacer. Con p se puede obtener la última línea eliminada. Pero en realidad también puede recuperar hasta 9 eliminaciones con los registros @1 a través de @9.

    Aún mejor, si haces "1P, entonces . en modo normal se reproducirá "2P, y así sucesivamente.

    Cf. :help . y :help quote_number

  • Si desea insertar la fecha actual en modo de inserción: Ctrl-R=strftime('%y%m%d')Introduzca.

    Cf. :help strftime()

Una vez más, lo que puede ser confuso:{[159]]}

  • :@ es un comando de línea de comandos que interpreta el contenido de un registro como vimscript y fuentes
  • @ en modo normal comando que interpreta el contenido de un registro como pulsaciones de teclas en modo normal (excepto cuando se utiliza : registro, que contiene el último comando reproducido sin la inicial dos puntos: en este caso, repite el comando como si también volviera a escribir los dos puntos y la tecla de retorno final).

  • " en 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 argumentos para comandos que esperan nombres de registro
 1028
Author: Benoit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-02 06:57:11

Para pegar algo que es el portapapeles del sistema, puede usar SHIFT - INS .

Funciona en Windows, pero supongo que también funciona bien en Linux.

 42
Author: skeept,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-15 20:03:48

"Me gustaría pegar texto tirado en la línea de comandos de Vim."

Aunque la respuesta más votada es muy completa, prefiero editar el historial de comandos.

En modo normal, escriba: q:. Esto le dará una lista de comandos recientes, editables y buscables con comandos vim normales. Comenzarás en una línea de comandos en blanco en la parte inferior.

Para la cosa exacta que el artículo pide, pegando una línea tirada (o tiró cualquier cosa) en una línea de comandos, tire de su texto y luego: q:p (obtener en el modo de edición del historial de comandos, y luego (p)ut su texto arrancado en una nueva línea de comandos. Edite a voluntad, introduzca para ejecutar.

Para salir del modo historial de comandos, es lo contrario. En modo normal en el historial de comandos, escriba: :q + enter

 34
Author: Wandspiegel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-27 16:10:27

Vale la pena señalar también que los registros yank son los mismos que los búferes macro. En otras palabras, simplemente puede escribir todo su comando en su documento (incluido su fragmento pegado), luego "by para tirarlo al registro b y luego ejecutarlo con @b.

 13
Author: naught101,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-27 01:28:33

Para pegar algo del portapapeles del sistema en la línea de comandos de vim ("modo de comando"), use Ctrl+R seguido de +. Para mí, al menos en Ubuntu, Shift+Ins no funciona.

PS: No sé por qué Ctrl+R seguido por *, que teóricamente es el mismo que Ctrl+R seguido por + parece que no funciona siempre. Busqué y descubrí el + versión y parece que funciona siempre, al menos en mi caja.

 13
Author: Proto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-27 17:33:23

Estaba teniendo un problema similar. Quería que el texto seleccionado terminara en un comando, pero no depender de pegarlo. Este es el comando para el que estaba tratando de escribir un mapeo:

:call VimuxRunCommand("python")

Los documentos para este plugin solo se muestran usando literales de cadena. Lo siguiente se romperá si intenta seleccionar texto que contiene dobles quotes:

vnoremap y:call VimuxRunCommand("<c-r>"")<cr>

Para evitar esto, simplemente haga referencia al contenido de la macro usando @:

vnoremap y:call VimuxRunCommand(@")<cr>

Pasa el contenido del registro sin nombre en y funciona con mi doble cita y edgecases multilínea.

 1
Author: Conrad.Dean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-28 04:12:02

OSX

Si está utilizando vim en MAC OSX, 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

Instalar la versión gui de vim:

brew install macvim --with-lua --with-override-system-vi

Reinicie el terminal para que surta efecto.


añadir 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.

 1
Author: anonymous,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-02 12:24:14

Esta pregunta es bastante antigua, pero ya que se ha visto tantas veces, parece ser popular - voy a poner esto aquí para la posteridad. para el contexto, esta información viene de fuera de la caja, sin plugins, no .vimrc vim 7.4 comportamiento en linux mint con las opciones predeterminadas.

Siempre se puede seleccionar texto con el ratón (o usando V o v y colocando la selección en el "* register"), y pegarlo en la línea de comandos con SHIFT-CTL-v.

Escribir CTL-r en la línea de comandos causará una solicitar un nombre de registro. así que escribiendo: CTL-r * colocará el registro de contenido * en la línea de comandos. pegará cualquier registro, no solo "*. ver: help c_CTRL-R .

Además, el botón central del ratón se pegará en la línea de comandos. vea: ayuda- > cotización-plus para una descripción de cómo x11 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 hecha con el botón izquierdo del ratón se puede pegar en la línea de comandos con el botón central del ratón.

Además, el botón central del ratón también pegará el texto seleccionado en vim en muchas otras aplicaciones x11, incluso las gui (por ejemplo. firefox, thunderbird) y pegar texto en la línea de comandos también es posible cuando el texto fue seleccionado de otras aplicaciones.

Consulte :ayuda->x11-selection para obtener información de addl.

Tl; dr

Pruebe el enfoque :CTL-r primero, luego use SHIFT-CTL-v o el botón central del ratón si necesita algo más.

It se admite que puede ser confuso.

 1
Author: wmmso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-30 20:30:55
  1. "[a-z]y copiar texto al registro [a-z];

  2. Use :! vaya al comando editar;

  3. CTRL+R siga la identidad de registro para pegar lo que copia.

Solía ser CentOS7.

 0
Author: yang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-25 18:27:23