регулярное выражение не работает в конфигурационном файле vim - PullRequest
3 голосов
/ 13 ноября 2011

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

inoremap <CR> <Esc>:s/\s*\([=+!-]\?=\)\s*/ \1 /ge<CR>:noh<CR>o

Это работает на =, ==,! =, + =, - =.Пока что эта часть работает безупречно.Проблема возникает, когда я изменяю это регулярное выражение следующим образом, чтобы разделить операторы сравнения:

inoremap <CR> <Esc>:s/\s*\([=+!-]\?=\|[><]=\?\)\s*/ \1 /ge<CR>:noh<CR>o

После этого изменения ни операторы присваивания, ни операторы сравнения больше не сопоставляются (без ошибок, просто ничего не происходит).Тем не менее, поиск этого нового шаблона в vim напрямую выделяет их все.Я не уверен, что проблема связана с тем, что <и> являются специальными символами в файлах .vim (используется для и т. Д.), Я пытался экранировать их с помощью \, но это не помогло.Кроме того, когда я помещаю их в тот же блок, что и остальные операторы, они работают нормально:

inoremap <CR> <Esc>:s/\s*\([=+!-><]\?=\)\s*/ \1 /ge<CR>:noh<CR>o

Однако единственная проблема в этом случае заключается в том, что если я наберу что-то вроде x

1 Ответ

1 голос
/ 13 ноября 2011

Попробуйте указать сумму magic специально для вашего регулярного выражения:

inoremap <CR> <CR>a<Esc>mz:-1s/\v\s*([=+!-<>]?\=\|[<>])\s*/ \1 /ge<CR>:nohls<CR>`zcl

Обратите внимание, что я использовал C-o для выдачи замены из режима вставки

Разбивка

  • <CR>a выполнить Введите как обычно, вставить фиктивный символ ('a')
  • <Esc> Выйти из режима вставки
  • mz сохранить позицию курсора в регистре z
  • :-1s/\v.../.../g в предыдущей строке (-1) выполнить глобальную замену с very-magic для
  • :nohls<CR> скрыть подсветку поиска
  • `z восстановить сохраненную позицию курсора
  • cl войти в режим вставки, переписав предыдущий фиктивный символ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...