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

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

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

<leader>4bu

в нормальном режиме Vim сделает

:4buf<CR>

vim
person gotgenes    schedule 06.04.2011    source источник


Ответы (2)


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

:help :map-operator
person Raimondi    schedule 06.04.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.

person ZyX    schedule 07.04.2011