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

StackOverflow https://stackoverflow.com/questions/48642

  •  09-06-2019
  •  | 
  •  

Pregunta

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 luego 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 comandos para que haga esto?

:s/\(*whatever is under the commandline*\)/\1\1
¿Fue útil?

Solución

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

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

Puedes asignarle un comando, o esta serie de pulsaciones de teclas para los perezosos funcionará:

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

Luego, cuando estés escribiendo tu patrón, puedes presionar <control-r>0<enter> que pegará en su comando el contenido del registro 0.

También puedes hacer un comando para esto como:

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

Lo cual asignará presionar '\' y 'w' al mismo tiempo para reemplazar su línea de comando con

:s/\(<currentword>\)/

Otros consejos

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

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

:help c_CTRL-R
yiwP

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

P:Pegar antes del cursor.

Luego puede mapear, por ejemplo: < ALT > - D a este comando:

:nmap < ALT >-D yiwP

Otra manera fácil de hacer esto es usar el * dominio.

En modo normal, cuando esté sobre una palabra, escriba

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

* convierte el patrón de búsqueda en la palabra actual (p. ej.\<abc\>).

:s// realiza una sustitución utilizando el patrón de búsqueda actual, y \0 En la sección de reemplazo está la cadena coincidente.

Luego puede repetir este comportamiento, digamos sobre la palabra "def", escribiendo lo mismo nuevamente o escribiendo

*@:

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

También puedes grabar una macro rápida para hacer esto usando el q dominio

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

Luego repítelo a tu gusto escribiendo

@d

cuando sobre una palabra desea duplicar.Como esto es solo un carácter menos que la solución anterior, puede que no valga la pena para usted, a menos que esté ejecutando otros comandos ex entre la duplicación de palabras, lo que cambiaría el comportamiento de @:

Debes 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>
ywPx

Hará lo que usted describe.

ywPxw

También hará avanzar el cursor a la siguiente palabra.

@usuario11211 tiene la forma más sencilla para duplicar la palabra debajo del cursor:

yiwP

tirar de la palabra interna (mueve el cursor al inicio de la palabra), pegar (antes del cursor).

p.ej.directo[t]directo ----> directo[d]directo

[] es el cursor

Elaborar...

Probablemente quieras que el cursor siga tu palabra duplicada:

yiwPea

sencillo[t]adelante ----> sencillodirecto[]

NOTA:

yiw

es una palabra interna yank (sin espacios en blanco)

yaw

es tirar todas las palabras (incluidos los espacios en blanco finales).

yawPea

Por lo tanto, es una palabra duplicada que incluye espacios en blanco y posición del cursor.

sencillo[t]adelante ----> sencillo sencillo[]

" count word  (case sensitive)
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top