tutorial sheet commands cheat vim command-line

sheet - vim save



¿Cómo especifico "la palabra debajo del cursor" en la línea de comando de VIM? (8)

Quiero escribir un comando que especifique "la palabra debajo del cursor" en VIM. Por ejemplo, digamos que tengo el cursor sobre una palabra y la hago aparecer dos veces. Por ejemplo, si la palabra es "abc" y quiero "abcabc", entonces podría escribir:

:s//(abc/)//1/1/

Pero me gustaría poder mover el cursor a "def" y usar el mismo comando para cambiarlo a "defdef":

:s//(def/)//1/1/

¿Cómo puedo escribir el comando en la línea de comando para que lo haga?

:s//(*whatever is under the commandline*/)//1/1


@ tiene la manera más directa de duplicar la palabra debajo del cursor:

yiwP

jale la palabra interna (mueve el cursor al comienzo de la palabra), pegue (antes del cursor).

p.ej. straight [t] forward ----> straightforwar [d] sencillo

[] es cursor

Elaborar...

Es probable que desee que el cursor siga su palabra duplicada:

yiwPea

straight [t] forward ----> straightforwardstraightforward []

NOTA:

yiw

es tirar palabra interna (sin espacios en blanco)

yaw

es cortar todas las palabras (incluyendo espacios en blanco al final).

yawPea

es, por lo tanto, una palabra duplicada que incluye el espacio en blanco y el cursor de posición.

straight [t] forward ----> sencillo directo []


Mientras está en el modo de línea de comando, CTRL + R CTRL + W insertará la palabra debajo del cursor.

Consulte la ayuda de c_CTRL-R para obtener una lista de todos los demás registros especiales:

:help c_CTRL-R


Necesitas escapar de las barras invertidas dentro del mapeo. También puede incluir la cadena de sustitución dentro de la asignación.

:nmap <leader>w :s///(<c-r>=expand("<cword>")<cr>//)///1//1<cr>


Otra manera fácil de hacerlo es usar el comando * .

En modo regular, cuando se usa una palabra, escriba

*:s///0/0<Enter>

* hace que el patrón de búsqueda sea la palabra actual (por ejemplo, / <abc />).

:s// hace una sustitución utilizando el patrón de búsqueda actual, y /0 en la sección de reemplazo es la cadena coincidente.

Luego puede repetir este comportamiento, digamos sobre la palabra "def", escribiendo el mismo de nuevo o escribiendo

*@:

@: simplemente repite el último comando ex, sin necesidad de un <Enter>, en este caso la sustitución.

También puede grabar una macro rápida para hacer esto usando el comando q

qd*:s///0/0<Enter>q

Luego repítelo al contenido de su corazón escribiendo

@d

cuando sobre una palabra quieres duplicar. Como este es solo un carácter menos que la solución anterior, puede que no le valga la pena, a menos que haga otros comandos ex entre la duplicación de palabras, lo que cambiaría el comportamiento de @:


<cword> es la palabra debajo del cursor (: help <cword> ).

Lo siento, debería haber sido más completo en esta respuesta.

Puede nmap un comando para él, o esta serie de teclas para el perezoso funcionará:

b #go to beginning of current word yw #yank to register

Luego, cuando está escribiendo su patrón, puede presionar <control-r>0<enter> que pegará en su comando los contenidos del registro 0-ésimo.

También puede hacer un comando para esto como:

:nmap <leader>w :s//(<c-r>=expand("<cword>")<cr>/)/

Que mapeará al tocar ''/' y ''w'' al mismo tiempo para reemplazar su línea de comando con

:s//(<currentword>/)/


" count word (case sensitive) nmap <F4> :%s//(<c-r>=expand("<cword>")<cr>/)//gn<cr>


yiwP

yiw : palabra interna de Yank (la palabra debajo del cursor). Este comando también mueve el cursor al comienzo de la palabra.

P : pegar antes del cursor.

Puede asignar el p. Ej .: < ALT > - D a este comando:

:nmap < ALT >-D yiwP


ywPx

hará lo que describes

ywPxw

también avanzará el cursor a la siguiente palabra.