2

Я хочу иметь возможность напечатать что-то вроде 'Ncom' в обычном режиме, который закомментирует текущую, а затем следующие N-1 строки. Назначение клавиш, которое я сделал для этого :nmap com ^i#<ESC>j . Это фактически закомментирует текущую строку, но не работает для N строк аналогично встроенным командам vim. Что мне нужно знать о vim, который объяснит разрыв между тем, что я хочу, и тем, что происходит? Кроме того, как я могу правильно реализовать то, что я хочу?

2 ответа2

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:command Vim автоматически добавляет диапазон, начиная с текущей строки и заканчивая строкой count-1 ниже. Если вы делаете 6:normal! I# , команда становится:

    :.,.+5normal! I#
    

    что означает «вставьте # перед первым печатным символом этой строки и 5 строк ниже».

  • Когда Vim встречает команду Ex в отображении с : он всегда добавляет соответствующий диапазон. Вот почему лучше всего использовать :normal в отображениях, которые предназначены для использования в нескольких строках или с count .

Смотрите :help range и :help :normal .

0

Я думаю, что этот плагин делает свою работу: https://github.com/tpope/vim-repeat

пример:

silent! call repeat#set("\<Plug>MyWonderfulMap", v:count)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .