Создайте команду нормального режима, которая принимает число в качестве аргумента в Vim - PullRequest
0 голосов
/ 06 апреля 2011

Как создать команду нормального режима, которая принимает число как его часть? Примеры включают 6>> (отступ 6 строк текста), 2dw (удаление 2 слов) и 23yy (копирование 23 строк в буфер копирования). Есть ли способ сделать это, используя nmap или его аналог?

В частности, я хотел бы создать отображение, так что если я введу

<leader>4bu

в обычном режиме, Vim сделает

:4buf<CR>

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

Вам необходимо определить свой собственный оператор, см .:

:help :map-operator
1 голос
/ 07 апреля 2011
  1. Используйте nnoremap, а не nmap.
  2. Номер, предоставленный последней команде нормального режима, доступен через переменную v:count, поэтому, например, следующее отображение добавит введенный номер в текстовый номер буфера раз:

    nnoremap ,a a<C-r>=v:count<CR><Esc>
    

    Причина, по которой 20,a добавляет 20 20 раз, заключается в том, что 20,a переписывается как 20a<C-r>.... Чтобы избежать этого, вы можете использовать

    nnoremap ,a :<C-u>call feedkeys("a".v:count."\e", "n")<CR>
    

    . <C-u> сбросит счетчик для команды ex, но он все еще доступен из переменной v:count.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...