texto - vim pdf
¿Cómo uso los registros vim? (16)
Solo conozco una instancia que utiliza registros a través de Ctrl R * mediante la cual pego texto desde un portapapeles.
¿Cuáles son otros usos de los registros? ¿Cómo usarlos?
Todo lo que sabe acerca de los registros de VI (concentrémonos en vi 7.2) - comparta con nosotros.
¡Una de mis partes favoritas de los registros es usarlos como macros!
Digamos que está tratando con un archivo de valores delimitado por tabulaciones 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 (a partir de la segunda línea). Haremos una macro simple en el registro (seleccionado arbitrariamente) de la siguiente manera:
Pulse:
qm
: para iniciar la grabación de macro enm
registro.EE
: Ir al final de la 3ra columna.a
: Inserte el modo para adjuntar al final de esta columna.%
: Escriba el signo de porcentaje que queremos agregar.<ESC>
: Vuelve al modo de comando.j0
: Ir al principio de la siguiente línea.q
: dejar de grabar macro
Ahora podemos simplemente escribir @m
para ejecutar esta macro en la línea actual. Además, podemos escribir @@
para repetir, o 100@m
para hacer esto 100 veces. La vida se ve bastante bien.
En este punto, debería estar diciendo: " PERO ESPERE, ¿QUÉ HECK TIENE QUE HACER CON LOS REGISTROS ?"
Excelente punto. Investiguemos qué hay en el contenido del registro m
escribiendo "mp
. Luego obtenemos lo siguiente:
EEa%<ESC>j0
Al principio, parece que accidentalmente abrió un archivo binario en el bloc de notas, pero a segunda vista, ¡ es la secuencia exacta de caracteres en nuestra macro!
Eres una persona curiosa, así que hagamos algo interesante y editemos esta línea de texto para insertar un !
En lugar de aburrido viejo %
.
EEa!<ESC>j0
Luego, coloquemos esto en el registro n
escribiendo B"nyE
. Luego, solo por B"nyE
, B"nyE
la macro n
en una línea de nuestros datos usando @n
...
OMG, AÑADIDO A !
Esencialmente, ejecutar una macro es como presionar la secuencia exacta de teclas en el registro de esa macro. Si eso no es un buen truco de registro, me comeré mi sombrero.
Creo que el registro secreto del gurú es la expresión = registro. Puede ser utilizado para mapeos creativos.
:inoremap /d The current date <c-r>=system("date")<cr>
Puede usarlo junto con su sistema como se indica anteriormente o puede obtener respuestas de funciones VimL personalizadas, etc.
o simplemente cosas ad hoc como
<c-r>=35+7<cr>
Desde la página de ayuda de vim:
CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
Insert the contents of a numbered or named register. Between
typing CTRL-R and the second character ''"'' will be displayed
<...snip...>
Special registers:
''"'' the unnamed register, containing the text of
the last delete or yank
''%'' the current file name
''#'' the alternate file name
''*'' the clipboard contents (X11: primary selection)
''+'' the clipboard contents
''/'' the last search pattern
'':'' the last command-line
''-'' the last small (less than a line) delete
''.'' the last inserted text
*c_CTRL-R_=*
''='' the expression register: you are prompted to
enter an expression (see |expression|)
(doesn''t work at the expression prompt; some
things such as changing the buffer or current
window are not allowed to avoid side effects)
When the result is a |List| the items are used
as lines. They can have line breaks inside
too.
When the result is a Float it''s automatically
converted to a String.
See |registers| about registers. {not in Vi}
<...snip...>
El registro de agujero negro _
es el /dev/null
de los registros.
Lo uso en mi vimrc para permitir la eliminación de caracteres individuales sin actualizar el registro predeterminado:
noremap x "_x
y para pegar en modo visual sin actualizar el registro predeterminado:
vnoremap p "_dP
Me alegré cuando descubrí el registro 0
. Si tira texto sin asignarlo a un registro particular, entonces se asignará al registro 0
, así como se guardará en el registro predeterminado "
. La diferencia entre los registros 0
y "
es que 0
solo se rellena con texto yanking , mientras que el registro predeterminado también se rellena con texto eliminado usando los comandos d
/ D
/ x
/ X
/ c
/ C
/ s
/ S
Encuentro esto útil cuando quiero copiar un texto, borrar algo y reemplazarlo con el texto copiado. Los siguientes pasos ilustran un ejemplo:
- Arranque el texto que desea copiar con
y[motion]
: este texto se guarda en"
y0
registros - Elimine el texto que desea reemplazar con
d[motion]
: este texto se guarda en"
registrarse"
- Pegue el texto tirado con
"0p
donde "
es el comando para usar un registro para el siguiente comando.
En el paso final, si tuviera que pegar desde el registro predeterminado (con p
), usaría el texto que acababa de eliminar (probablemente no lo que quería).
Tenga en cuenta que p
o P
pega desde el registro predeterminado. El equivalente a largo plazo sería ""p
(o ""P
) y "0
mantiene el último tirón "1
, "1
mantiene la última eliminación o cambio.
Para más información ver :help registers
.
Mi amigo Brian escribió un artículo completo sobre esto. Creo que es una excelente introducción a cómo usar los temas. https://www.brianstorti.com/vim-registers/
Mi registro favorito es el registro '':''
. Ejecutar @:
en modo Normal me permite repetir el comando ex ejecutado anteriormente.
Otros registros útiles:
"*
o "+
- el contenido del portapapeles del sistema
"/
- último comando de búsqueda
":
- último comando.
Tenga en cuenta que con las macros vim, puede editarlas, ya que son solo una lista de las pulsaciones utilizadas al grabar la macro. Así que puede escribir en un archivo de texto la macro (usando "ap
para escribir la macro a ) y editarlas, y cargarlas en un registro con "ay$
. Buena forma de almacenar macros útiles.
Si alguna vez desea pegar el contenido del registro en un comando en modo ex, presione <Cr><registerletter>
.
¿Por qué usarías esto? Quería hacer una búsqueda y reemplazar 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 :%s/[PASTE YANKED PHRASE]//g
mi día.
Si solo desea pegar una sola palabra en modo ex, puede asegurarse de que el cursor esté sobre ella antes de ingresar en modo ex, y luego presione <Cr><Cw>
cuando esté en modo ex para pegar la palabra.
Un buen truco es usar "1p
para pegar la última eliminación / cambio (y luego usar .
Para pegar repetidamente las eliminaciones subsiguientes. En otras palabras, "1p...
es básicamente equivalente a "1p"2p"3p"4p
.
Puede usar esto para revertir un orden de dddddddddd"1p....
líneas: dddddddddd"1p....
Un registro pasado por alto es el ''.'' registro de puntos que contiene el último texto insertado sin importar cómo se insertó, por ejemplo, ct] (cambiar hasta)]. Entonces se da cuenta de que necesita insertarlo en otro lugar pero no puede usar el método de repetición de puntos.
:reg .
:%s/fred/<C-R>./
Una gran fuente de confusión es el registro predeterminado "
. Es importante saber cómo funciona. Es mucho mejor si el registro predeterminado se evita la mayoría de las veces. La explicación de la documentación de Vim:
Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g. "xdd). This is like the unnamed register is pointing
to the last used register.
Por lo tanto, el registro predeterminado es en realidad un puntero al último registro utilizado. Cuando elimine, o elimine algo, este registro apuntará a otros registros. Puedes probar eso revisando los registros. Siempre hay otro registro que es exactamente el mismo que el registro predeterminado: el registro de tirón ( "0
), el primer registro de borrado ( "1
), el registro de borrado pequeño ( "-
) o cualquier otro registro que se usó para borrar o tirar .
La única excepción es el registro de agujeros negros. Vim doc dice:
An exception is the ''_'' register: "_dd does not store the deleted text in any
register.
Por lo general, está mucho mejor si usa directamente: "0
"-
y "1-"9
registros predeterminados o registros con nombre.
Utilizo el registro predeterminado para grep para el texto en mi ventana vim sin tener que alcanzar el mouse.
- tirar texto
-
:!grep "<CTRL-R>0"<CR>
Usar registros en comandos con @
. P.ej:
echo @a
echo @0
echo @+
Ponlos al mando:
let @a = ''abc''
Ahora "ap
pegará abc
.
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 desea copiar la línea actual en el registro k
, puede escribir
"kyy
O puede adjuntar a un registro utilizando una letra mayúscula
"Kyy
Luego puedes moverte por el documento y pegarlo en otro lugar usando
"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 tipos de registros actualmente definidos.
: reg
- Q5 registra las ediciones en el registro 5 (el siguiente q detiene la grabación)
- : reg mostrar todos los registros y cualquier contenido en ellos
- @ 5 ejecuta el registro 5 macro (ediciones grabadas)