Saltar al contenido

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

Solución:

Si. Pegar controlR luego ". Si tiene caracteres de control literal en lo que ha tirado, use controlR, controlO, ".

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 sepa cómo usarlos, no podrá 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 usa y en modo normal, sin especificar un registro, el texto extraído va allí y también al registro predeterminado),
  • 1 para 9 (cambio de borrar registros, cuando usa comandos como c o d, lo que se ha borrado 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 controlR, "),
  • a para z para su propio uso (en mayúsculas A para Z son para agregar a los registros correspondientes).
  • _ (actúa como /dev/null (Unix) o NUL (Windows), puede escribir en él, pero está descartado y cuando lo lee, siempre está vacío),
  • - (registro de borrado pequeño),
  • / (registro de patrón 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 escrito por VimL a través de Q o :, solo lectura),
  • + y * (registros del portapapeles del sistema, puede escribir en ellos para configurar el portapapeles y leer el contenido del portapapeles de ellos)

Ver :help registers para la referencia completa.

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

En el modo Insertar o Línea de comandos, controlR 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 para retroceder, etc.), puede usar controlR, controlO, nombre de registro. Ver :help i_CTRL-R y los siguientes párrafos para obtener más referencias.

Pero también puede hacer lo siguiente (y probablemente olvidé muchos usos de los registros).

  • En modo normal, presione ":pag. 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, eliminación o pegado. Entonces ": selecciona el registro de dos puntos (almacenando el último comando). Luego pag es un comando que ya conoce, pega el contenido del registro.

    cf. :help ", :help quote_:

  • Está editando un archivo VimL (por ejemplo, su .vimrc) y me gustaría ejecutar un par de líneas consecutivas ahora mismo: yj:@"Ingresar.
    Aquí, yj tira la línea actual y la siguiente (esto se debe a que j es un movimiento en línea, pero esto está fuera del alcance de esta respuesta) en el registro predeterminado (también conocido como registro sin nombre). Entonces el :@ 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 confundir " utilizado 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 controlR, /.

    cf. :help quote_/, help i_CTRL-R

    Corolario: mantenga su patrón de búsqueda pero agregue una alternativa: /controlR, /|alternative.

  • Ha seleccionado dos palabras en el medio de una línea en modo visual, las jaló 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 ". los :put El comando, como muchos comandos Ex, solo funciona en línea.

    cf. :help :put

    También podrías haber hecho: :call setreg('"', @", 'V') luego p. los setreg La función establece el registro del cual se da el nombre como primer argumento (como string), lo inicializa con el contenido del segundo argumento (y puede usar registros como variables con el nombre @x dónde x es el nombre de registro en VimL), y lo convierte en el modo especificado en el tercer argumento, V para linewise, nada para characterwise y literal ^V para bloque.

    cf. :help setreg(). Las funciones inversas son getreg() y getregtype().

  • Si ha grabado un macro con qaq, luego :echo @a le dirá lo que ha escrito, y @a reproducirá el macro (probablemente lo conocías, muy útil para evitar tareas repetitivas)

    cf. :help q, help @

    Corolario del ejemplo anterior: si tiene 8go en el portapapeles, luego @+ reproducirá el contenido del portapapeles como un macro, y así ir al octavo byte de su archivo. En realidad, esto funcionará con casi todos los registros. Si su última insertada string era dd en modo Insertar, luego @. Will (porque el . registro contiene el último insertado string) eliminar una línea. (La documentación de Vim es incorrecta a este respecto, ya que establece que los registros #, %, : y . solo funcionará con p, P, :put y controlR).

    cf. :help @

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

    La excepción notable es @:. El registro de comando no contiene los dos puntos iniciales ni tampoco el retorno de carro final. Sin embargo, en modo Normal, @: hará lo que espera, interpretando el registro como un comando Ex, sin intentar reproducirlo en modo Normal. Entonces, si tu último comando fue :e, el registro contiene e pero @: recargará el archivo, no irá al final de la palabra.

    cf. :help @:

  • Muestre lo que hará en el modo Normal antes de ejecutarlo: @='dd'Ingresar. Tan pronto como golpees el = key, Vim cambia a evaluación de expresión: cuando ingresa una expresión y presiona Ingresar, 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 comience 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! Usar controlR=getline(58)Ingresar. 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, debe duplicar todas las comillas simples, por supuesto.

  • Copie todas las líneas que comiencen con foo, y luego todas las líneas que contienen bar al portapapeles, encadena estos comandos: qaq (restablece el a registrarse almacenando un vacío macro dentro de eso), :g/^foo/y A, :g/bar/y A, :let @+ = @a.

    El uso de un nombre de registro de mayúsculas hace que el registro funcione en modo de adición

    Mejor si Q no ha sido reasignado por mswin.vim, inicie el modo Ex con Q, encadena esos “comandos de dos puntos”, que en realidad se denominan mejor “comandos Ex”, y vuelve al modo Normal escribiendo visual.

    cf. :help :g, :help :y, :help Q

  • Haga doble espacio en su archivo: :g/^/put _. Esto pone el contenido del registro de agujero negro (vacío cuando se lee, pero se puede escribir, comportándose como /dev/null) linewise, después de cada línea (¡porque cada línea tiene un comienzo!).

  • 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 sinónimo de .-1 (cf. :help :range). Ya que :put pone el texto después de la línea, tienes que decirle explícitamente que actúe sobre la anterior.

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

    cf. :help :range (Para el % parte) y :help :y.

  • Si ha registrado incorrectamente un macro, puedes escribir :let @a='controlR=replace(@a,"'","''",'g')Ingresar' y editarlo. Esto modificará el contenido de la macro almacenado en el registro a, y aquí se muestra cómo puede usar el registro de expresión para hacer eso.

  • Si lo hiciste dddd, podrías hacer uu para deshacer. Con p podría obtener la última línea eliminada. Pero en realidad también puede recuperar hasta 9 eliminaciones con los registros @1 mediante @9.

    Incluso mejor, si lo haces "1P, luego . en modo normal se reproducirá "2P, etcétera.

    cf. :help . y :help quote_number

  • Si desea insertar la fecha actual en el modo Insertar: controlR=strftime('%y%m%d')Ingresar.

    cf. :help strftime()

Una vez más, lo que puede resultar confuso:

  • :@ es un comando de línea de comandos que interpreta el contenido de un registro como vimscript y lo genera
  • @ en modo normal comando que interpreta el contenido de un registro como pulsaciones de teclas en modo normal (excepto cuando usa : registro, que contiene el último comando reproducido sin los dos puntos iniciales: en este caso, reproduce el comando como si también hubiera vuelto a escribir los dos puntos y el retorno final key).

  • " en modo normal comando que le ayuda a seleccionar un registro para tirar, pegar, borrar, 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

Para pegar algo que es el portapapeles del sistema, puede usar CAMBIOEN S.

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

“Me gustaría pegar texto extraído en la línea de comandos de Vim”.

Si bien 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á con una línea de comando en blanco en la parte inferior.

Para exactamente lo que pide el artículo, pegar una línea tirada (o tirar cualquier cosa) en una línea de comando, tira tu texto y luego: q:p (ingrese al modo de edición del historial de comandos, y luego (p) ut su texto tirado en una nueva línea de comando. Edite a voluntad, ingresar ejecutar.

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

Comentarios y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *