2

Как я могу повторить не только последнюю использованную модификацию (.), Но и более ранние?

Идеальный вариант - выбрать их по Ctrl+N и Ctrl+P.

4 ответа4

4

Я бы не рекомендовал переназначать CN и CP, поскольку они являются отображениями автозаполнения, и часто их используют плагины. На самом деле, я бы не рекомендовал переназначать любое из отображений vim по умолчанию. Но в любом случае это зависит от вас.

Что касается повторения, точка (.) Будет повторять то, что вы делали в своем последнем ряду. Если у вас возникли проблемы с командой повтора с некоторыми плагинами, попробуйте плагин repeat.vim .

Если вы хотите, чтобы в вашем распоряжении были какие-то операции, которые вы часто используете, попробуйте записать их в регистр и затем воспроизвести («: запись справки»), или сделать из этого функцию, а затем вызвать функцию (если вы хотите, я думаю, вызов функции может быть сделан как CN или CP ...)

4

Чтобы расширить комментарий @ldigas о записи и макросах, приведем простую разбивку.

  1. Нажмите q, чтобы войти в режим записи.
  2. Нажмите клавишу, которую вы хотите "назвать" макросом, я обычно использую w для одноразовых макросов, но вы можете использовать любую букву, которую захотите.
  3. Выполните операции, которые вы хотите повторить.
  4. Нажмите q, чтобы остановить запись.

Когда у вас есть макрос, вы можете воспроизвести его с помощью @w (при условии, что вы использовали w), и он будет пролистывать записанные вами действия.

0

Снова расширим отображение ваших команд для повторения:
Когда вы знаете без визуальной обратной связи, что вы хотите повторить, это [ Ctrl -] Space mapping сохраняет еще несколько нажатий клавиш:

" map in Normal and Visual modes, but not Select mode (see :help mapmode-x
:command -nargs=*  Nxmap      nmap     <args>| xmap     <args>
     com -nargs=*  Nxnoremap  nnoremap <args>| xnoremap <args>
     com -nargs=*  Nxunmap    nunmap   <args>| xunmap   <args>

" map <Space> to currently often-used operations (similar to space.vim)
    " quickly create custom mappings
        " Usage: <C-Space>YOURMAPPING<Enter> and then just <Space> for each repetition
        " (When you know without visual feedback what you want to repeat, this saves another few keystrokes.)
    Nxmap <C-Space> :Nxmap <lt>Space> 

    " make these commands repeatable by <Space> (similar to space.vim)
    let space_repeats_nx = ['@@','@:']
        for cmd in space_repeats_nx
            exe 'Nxnoremap '.cmd.' :Nxnoremap <lt>Space> 'cmd.'<CR>'.cmd
        endfor
0

Я сделал плагин RepeatLast.vim для обеспечения этой функциональности с 5\.

Это работает, включив запись макросов все время. По этой причине я не очень рекомендую это! Но это был единственный способ сделать несколько повторений ретроспективно. Было бы замечательно, если бы Vim мог обеспечить доступ к последним нажатиям клавиш внутри.

Желание вспомнить q перед выполнением чего-либо, что вы захотите повторить, является предпочтительным.

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