Таким образом, основная проблема с вашей командой заключается в том, что, используя |
, вы на самом деле разбиваете ее на несколько команд, первая из которых — 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>