У меня есть такая строка:
function my_function(argument, another argument, but there are spaces)
Я хочу заменить символы пробела (внутри имен аргумента) подчеркиванием. Таким образом, я хотел бы использовать:
:s/\ /_/g
но как я могу выбрать не применять его ко всей строке, а начинать, скажем, с позиции курсора? (Или третье слово)?
\%#
. Таким образом, вы можете использовать::s/\v(%#.*)@<= /_/g
. Который можно описать как пробел, которому предшествуют@<=
символы ( ) после позиции курсора.\%#
трюк, я приму его ответ, если вы не напишите один ... Но кто-нибудь из вас мог бы объяснить регулярное выражение немного более явно?Ответы:
Вы можете использовать следующее решение:
Сначала используйте v$для выделения текста от курсора до конца строки. Затем используйте следующую команду:
\%V
Указывают на изменение текста в ранее визуально выбранной области, см:h /\%V
.Если я возьму ваш пример:
Если мой курсор находится в 40-м столбце, и я использую команду, которую я только что написал, я получаю:
В ответ на ваш комментарий вы также можете использовать
\%#
который соответствует от позиции курсора\%>23c
который соответствует после 23-го столбца.\%>'m
который совпадает после позиции знакаВидите
:h /\%#
,:h /\%>c
и:h /\%>'m
.@ User9433424 дал способ использовать
\%#
в своем комментарии. Для шаблона с отметкой вы можете установить его с maпомощью:Ниже приведено объяснение шаблона, заданного @ User9433424:
Вы захотите увидеть
:h \v
и:h /\@<=
источник
Вы можете использовать look behind (
:h \@<=
), чтобы убедиться, что есть предшествующий символ '(') и граница конца слова (:h \>
), чтобы убедиться, что подстановка происходит там, где вы хотите.Итак, с текстом:
запустив команду:
будет производить:
Это может быть проще, чем необходимость позиционировать курсор каждый раз, если замена всегда имеет известную начальную точку.
источник