VIM: Как я могу сделать сопоставление из Autocmd

Вы можете использовать sed :

sed -n 's/.*st\(.*\)et.*/\1/p'
0
15.08.2018, 08:03
1 ответ

Таким образом, основная проблема с вашей командой заключается в том, что, используя |, вы на самом деле разбиваете ее на несколько команд, первая из которых — nnoremap, а начиная со второй — последовательность команд silent!с замены, которые выполняются во время получения вашего .vimrc, а не становятся частью команды.

Использование \|или <bar>должно решить эту проблему.

Вторая проблема заключается в том, что nnoremapожидает команду в обычном режиме, поэтому он берет ваш silent!и запускает командуs(замены ), которая затем заменяет символ под курсором на ilent!..., это не то, что вам нужно... Вам нужен дополнительный :перед первым silent!, чтобы он знал, что нужно перейти в командный режим.

И в-третьих, ваша последняя команда %s/;$<CR>не очень хорошо сформирована, вам нужны две дополнительные /для ее завершения. Я предполагаю, что вы намерены удалить все ;в конце строк,так что %s/;$//это то, что я предполагаю, что вы хотите здесь. (Я также заметил, что вы пропустили здесь silent!, может быть, по недосмотру? Добавляю сюда, на всякий случай.)

Собираем все воедино:

nnoremap ;; :silent! :%s/\s\+$//e \| silent! :%s/\(\n\n\)\n\+/\1/ \| silent! :%s#\($\n\s*\)\+\%$## \| silent! :%s/;$//<CR>
1
28.01.2020, 02:42

Теги

Похожие вопросы