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
\%Vindicació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\%>23cque coincide después de la columna 23.\%>'mque coincide después de la posición de una marcaVer
:h /\%#,:h /\%>cy: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 \vy: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