Pregunta ¿Cómo uso los registros vim?


Solo sé de una instancia que usa registros es vía CtrlR* por lo que pego texto desde un portapapeles.

¿Cuáles son otros usos de los registros? Cómo usarlos?

Todo lo que sabe sobre el VI se registra (centrémonos en vi 7.2) - comparta con nosotros.


824
2017-09-30 13:12


origen


Respuestas:


Los registros en Vim le permiten ejecutar acciones o comandos en el texto almacenado en ellos. Para acceder a un registro, escriba "a antes de un comando, donde a es el nombre de un registro. Si quieres copiar la línea actual en el registro k, puedes escribir

"kyy

O tu puedes adjuntar a un registro mediante el uso de una letra mayúscula

"Kyy

A continuación, puede desplazarse por el documento y pegarlo en otro lugar utilizando

"kp

Para pegar desde el portapapeles del sistema en Linux

"+ p

Para pegar desde el portapapeles del sistema en Windows (o desde el portapapeles "resaltado del mouse" en Linux)

"*pag

Para acceder a todos los registros actualmente definidos, escriba

: reg


1035
2017-09-30 13:17



Estaba contento cuando descubrí el 0 registro. Si retiró el texto sin asignarlo a un registro en particular, se lo asignará al 0 registrarse, así como ser guardado en el predeterminado " registro. La diferencia entre el 0 y " registros es que 0 solo se rellena con texto extraído, mientras que el registro predeterminado también se rellena con texto eliminado usando d/D/x/X/c/C/s/S comandos.

Lo encuentro útil cuando quiero copiar texto, eliminar algo y reemplazarlo por el texto copiado. Los siguientes pasos ilustran un ejemplo:

  • Marque el texto que desea copiar con y[motion] - este texto se guarda en " y 0 registros
  • Elimine el texto que desea reemplazar con d[motion] - este texto se guarda en " registro
  • Pega el texto arrancado con "0p

dónde " es el comando para usar un registro para el próximo comando.

En el paso final, si tuviera que pegar desde el registro predeterminado (con p), usaría el texto que acababas de borrar (probablemente no lo que pretendías).

Tenga en cuenta que p o P pega desde el registro predeterminado. El equivalente a mano larga sería ""p (o ""P) y "0 sostiene el último tirón, "1contiene la última eliminación o cambio.

Para más información, ver :help registers.


702



¡Una de mis partes favoritas sobre los registros es usarlos como macros!

Supongamos que se trata de un archivo de valores delimitado por tabuladores como tal:

ID  Df  %Dev    Lambda
1   0   0.000000    0.313682
2   1   0.023113    0.304332
3   1   0.044869    0.295261
4   1   0.065347    0.286460
5   1   0.084623    0.277922
6   1   0.102767    0.269638
7   1   0.119845    0.261601

Ahora decide que necesita agregar un signo de porcentaje al final del campo% Dev (comenzando desde la segunda línea). Vamos a hacer una macro simple en el (seleccionado arbitrariamente) m registrarse de la siguiente manera:

  1. Prensa: qm: Para comenzar a grabar macro bajo m registro.

  2. EE: Ir al final de la tercera columna.

  3. a: Insertar modo para anexar al final de esta columna.

  4. %: Escriba el signo de porcentaje que queremos agregar.

  5. <ESC>: Regrese al modo de comando.

  6. j0: Ir al comienzo de la siguiente línea.

  7. q: Deja de grabar macro

Ahora podemos simplemente escribir @m para ejecutar esta macro en la línea actual. Además, podemos escribir @@ repetir, o 100@m para hacer esto 100 veces! La vida se ve bastante bien.

En este punto deberías estar diciendo "PERO ESPERE, LO QUE TIENE QUE HACER ESTO CON LOS REGISTROS? "

Excelente punto Investiguemos lo que está en el contenido de la m registrarse escribiendo "mp. Luego obtenemos lo siguiente:

EEa%<ESC>j0

Al principio parece que abriste accidentalmente un archivo binario en el bloc de notas, pero con un segundo vistazo, ¡es la secuencia exacta de personajes en nuestra macro!

Usted es una persona curiosa, entonces hagamos algo interesante y edite esta línea de texto para insertar un ! en lugar de aburrir viejo %.

EEa!<ESC>j0

Entonces jalemos esto al n registrarse escribiendo B"nyE. Entonces, solo por diversión, corramos el n macro en una línea de nuestros datos usando @n....

Dios mío, AÑADIÓ A !

Básicamente, ejecutar una macro es como presionar la secuencia exacta de claves en el registro de esa macro. Si ese no es un buen truco de registro, me comeré mi sombrero.


301



Otros registros útiles:

"* o "+ - el contenido del portapapeles del sistema

"/ - último comando de búsqueda

": - último comando.

Tenga en cuenta que con las macros de vim, puede editarlas, ya que son solo una lista de las teclas utilizadas al grabar la macro. Para que pueda escribir en un archivo de texto la macro (utilizando "ap para escribir macro un) y editarlos, y cargarlos en un registro con "ay$. Buena forma de almacenar macros útiles.


94



los registro de agujero negro  _ es el /dev/null de registros.

Lo uso en mi vimrc para permitir borrar caracteres individuales sin actualizar el registro predeterminado:

noremap x "_x

y pegar en modo visual sin actualizar el registro predeterminado:

vnoremap p "_dP

65



Si alguna vez desea pegar los contenidos del registro en un comando ex-mode, presione <C-r><registerletter>.

¿Por qué usarías esto? Quería hacer una búsqueda y reemplazar por una cadena larga, así que la seleccioné en modo visual, comencé a escribir la expresión de búsqueda / reemplazo :%s/[PASTE YANKED PHRASE]//g y continuó mi día.

Si solo quieres pegar una sola palabra en el modo ex, puedes asegurarte de que el cursor está en ella antes de ingresar al modo ex y luego presionar <C-r><C-w> cuando está en modo ex para pegar la palabra.


45



Creo que el registro secreto de guru es la expresión = registro. Se puede usar para mapeos creativos.

:inoremap  \d The current date <c-r>=system("date")<cr>

Puede usarlo junto con su sistema como se indica anteriormente u obtener respuestas de funciones personalizadas de VimL, ​​etc.

o solo cosas ad hoc como

<c-r>=35+7<cr>

41



Un truco genial es usar "1p pegar la última eliminación / cambio (, y luego usar . pegar repetidamente las eliminaciones subsiguientes. En otras palabras, "1p... es básicamente equivalente a "1p"2p"3p"4p.

Puede usar esto para ordenar de forma inversa un puñado de líneas: dddddddddd"1p....


31