отображение переменных в vim с помощью регулярного выражения

#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 столбца назад от текущего столбца текущей строки …. затем… невежественный. Не могли бы вы любезно объяснить?