Рассмотрим следующие строки примера:

$some ==thing();
$some == thing();

$some ==$thing;
$some == $thing;

Я пишу макрос для улучшения этих строк. Поместив курсор на пробел после $some , я бы хотел добавить пробел после последнего знака =, если там уже нет пробела. Команда e переводит курсор в конец символов = и $ . То есть для строк = , == и === e переводит курсор на последний символ = . Однако для строк =$thing , ==$thing и ===$thing e переводит курсор на символ $ . Таким образом, я не могу полагаться ни на i ни на a чтобы правильно вставить пробел после символов = .

Как я могу переместить курсор на последний соответствующий символ = надежно? Обратите внимание, что позже в строке могут быть другие символы = .

2 ответа2

2

Вместо использования команды e motion вы можете искать конец строки символов = :

/=\+/e

(Если вы предпочитаете экранировать литерал = вместо мета + , вы можете использовать /\v\=+/e .)

2

Вы описываете поведение , потому что оба = и $ не настроены как символы ключевых слов, поэтому e движение перемещается над экземплярами обоих. Чтобы получить желаемый эффект, измените определение ключевого слова (временно?) с помощью

:setlocal iskeyword+=$

Обратите внимание, что я предпочел бы решить эту проблему не с помощью явных перемещений и макросов, а с помощью команды :substitute , поскольку вы можете лучше выразить места желаемых модификаций с помощью регулярных выражений.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .