Tengo una línea como esta:
function my_function(argument, another argument, but there are spaces)
Quiero sustituir los caracteres de espacio (dentro de los nombres de los argumentos) con guiones bajos. Por lo tanto, me gustaría usar:
:s/\ /_/g
pero, ¿cómo puedo elegir no aplicarlo a toda la línea, sino a partir de, por ejemplo, la posición del cursor? (O la tercera palabra)?
\%#
. Por lo tanto, se puede utilizar::s/\v(%#.*)@<= /_/g
. Que podría describirse como un espacio precedido por (@<=
) caracteres después de la posición del cursor.\%#
truco, aceptaré su respuesta si no escribes una ... ¿Pero alguno de ustedes podría explicar la expresión regular con un poco más explícitamente?Respuestas:
Puede usar la siguiente solución:
Primero use v$para seleccionar el texto desde el cursor hasta el final de la línea. Luego use el siguiente comando:
La
\%V
indicación para cambiar el texto en el área previamente seleccionada visualmente, ver:h /\%V
.Si tomo tu ejemplo:
Si mi cursor está en la columna 40 y utilizo el comando que acabo de escribir, obtengo:
En respuesta a tu comentario también puedes usar
\%#
que coincide desde la posición del cursor\%>23c
que coincide después de la columna 23.\%>'m
que coincide después de la posición de una marcaVer
:h /\%#
,:h /\%>c
y:h /\%>'m
.@ User9433424 dio una manera de usar
\%#
en su comentario. Para el patrón con la marca, puede configurarlo con ingenio may luego usar:Una explicación del patrón dado por @ User9433424 es la siguiente:
Querrás ver
:h \v
y:h /\@<=
fuente
Puede usar mirar detrás (
:h \@<=
) para asegurarse de que haya un '(' anterior y un límite de fin de palabra (:h \>
) para asegurarse de que la sustitución se realice donde lo desee.Entonces, con el texto:
ejecutando el comando:
Producirá:
Esto podría ser más fácil que tener que colocar el cursor cada vez, siempre que la sustitución siempre tenga un punto de partida conocido.
fuente