Я хочу иметь возможность напечатать что-то вроде 'Ncom' в обычном режиме, который закомментирует текущую, а затем следующие N-1 строки. Назначение клавиш, которое я сделал для этого :nmap com ^i#<ESC>j . Это фактически закомментирует текущую строку, но не работает для N строк аналогично встроенным командам vim. Что мне нужно знать о vim, который объяснит разрыв между тем, что я хочу, и тем, что происходит? Кроме того, как я могу правильно реализовать то, что я хочу?
2 ответа
:nnoremap com :normal! I#<CR>
Объяснение ...
Iтакой же, как^iно лучше. Обычно вместо^i#<Esc>вы должны сделать следующее:I#<Esc>Кстати, за
$a.:normal- это команда Ex, которая позволяет вам запускать команду нормального режима из командной строки. Используется так, за которым следует<CR>::normal! I#Когда команде нормального режима предшествует
count:6w, команда выполняется 6 раз. Однакоcountне распространяется на последующие команды:6wifooне добавляетfooперед каждым из 6 следующих слов. В зависимости от команды, правила могут различаться: обратитесь к документации, если вы не уверены.Когда к команде Ex добавляется команда
count:6:commandVim автоматически добавляет диапазон, начиная с текущей строки и заканчивая строкойcount-1ниже. Если вы делаете6:normal! I#, команда становится::.,.+5normal! I#что означает «вставьте
#перед первым печатным символом этой строки и 5 строк ниже».Когда Vim встречает команду Ex в отображении с
:он всегда добавляет соответствующий диапазон. Вот почему лучше всего использовать:normalв отображениях, которые предназначены для использования в нескольких строках или сcount.
Смотрите :help range и :help :normal .
Я думаю, что этот плагин делает свою работу: https://github.com/tpope/vim-repeat
пример:
silent! call repeat#set("\<Plug>MyWonderfulMap", v:count)
