#vim
#vim
Вопрос:
Возможно ли это сопоставить {some_variable_name}=
с {some_variable_name} =
in vim
? где {some_variable_name}
это [A-Za-z0-9]
?
Из некоторых других подсказок я пытался:
:inoremap ?P<name>([A-Za-z0-9-_])= ${name} =
Отредактируйте так, чтобы, если я наберу «a =», оно будет преобразовано в «a = «, а если я наберу «blah =», оно будет преобразовано в «blah =»
который не работает.
Пожалуйста, помогите.
РЕДАКТИРОВАТЬ: Возможно, более простой способ определения проблемы: динамически замените «=» на » = «, после чего следует [A-z0-9] .
Я пытаюсь, но пока не удалось. Пожалуйста, помогите
Комментарии:
1. приведите пример, объясните, чего вы хотите. Я не могу понять ваше требование.
2. @Kent: добавлен пример / намерение
3. итак, вы хотите что-то вроде
%s/v(S)=/1 =/g|%s/v=(S)/= 1/g
?4. @Kent: да, кажется, так. Но не уверен, как это сопоставить
5. %s / v( S)=/ 1 = /gc также выполняется, но не в map
Ответ №1:
Это отображение режима вставки делает то, что, я думаю, вы хотите, но ваш вопрос — настоящий беспорядок, так что … хорошо:
:inoremap <expr> = getline(".")[col(".") - 2] !~# "[a-zA-Z]" ? "= " : " = "
Но ввод <Space>=
текста — гораздо лучшее решение, IMO.
Редактировать:
Из-за некоторой «странности» в том, как Vim обрабатывает положение курсора в режиме вставки, getline(".")[col(".") - 2] !~# "[a-zA-Z]"
неинтуитивно сравнивает символ непосредственно перед курсором с регулярным выражением [a-zA-Z]
. Используется getline(".")[col(".") - 1]
для символа, который идет после курсора.
Комментарии:
1. хотя ваше решение (как всегда) работает отлично (как я уже отметил как принятое), мне еще предстоит понять, что произошло. в частности,
[col(".") - 2] !~#
как я понимаю, вы возвращаетесь на 2 столбца назад от текущего столбца текущей строки …. затем… невежественный. Не могли бы вы любезно объяснить?