Почему оператор чередования в Vim работает как команда, но не как отображение?

Я хочу сделать простое сопоставление следующей команды:

:'<,'>s/{\|}//gc

Он удалит все фигурные скобки в выбранном тексте, спрашивая меня перед каждым изменением. Он работает отлично.

Если я напишу это в свой .vimrc как отображение следующим образом:

vmap rc :s/{\|}//gc

он неожиданно говорит мне, что он не может соответствовать шаблону {|}, тем самым избегая | похоже, не работает.

Почему и как я могу правильно создать это сопоставление?

0
nl ja de
@Kampfzwerg_Jana Просто оставьте , и он будет использовать выбранную область.
добавлено автор glts, источник
Почему в начале?
добавлено автор Anton Kovalenko, источник
Он ест ваш s . И да, вам нужно дополнительное экранирование: две обратные косые черты , чтобы получить одну обратную косую черту в сопоставлении.
добавлено автор Anton Kovalenko, источник
@Kampfzwerg_Jana вам нужно two обратная косая черта, а не three .
добавлено автор Anton Kovalenko, источник
Так что он работает с выбранным текстом.
добавлено автор Kampfzwerg_Jana, источник
Хорошо, я удалил и избежал обратной косой черты и трубы, поэтому теперь он выглядит следующим образом: vmap rcb: s/{\\\ |}//gc Но это все еще не работает.
добавлено автор Kampfzwerg_Jana, источник
Хорошо спасибо. Я только что видел ваш комментарий. Теперь его работа.
добавлено автор Kampfzwerg_Jana, источник

2 ответы

Используйте следующее:

:vmap rc :s/{\\|}//gc

It does operate on the selected text: for : in visual mode, you get '<,'> in front of the command.

A useful way to debug this kind of mappings is to leave out the final , so you see the command exactly as it would be executed. That's how I noticed that ate your s (because it expects register name as the next character) and that one layer of escaping is gone.

5
добавлено

I think you need to remove after the colon, this currently says, after the colon paste the s register then your pattern.

Маловероятно, что в этом регистре есть что-то вроде командной строки:

:/{\|}//gc

На самом деле это спецификатор диапазона, а не заменитель. Нам нужно только удалить это

vnoremap rc :s/{\|}//gc
0
добавлено