Как я могу заставить vim помнить прошлые yanks? (Или настройте YankRing меньше).

Когда я удаляю что-то в vim, он добавляется в нумерованные регистры. Последний элемент, который я дернул, находится в регистре 0. Как я могу заставить vim автоматически запомнить последние 10 янков?


Я пробовал YankRing, но он слишком сильно меняет поведение vim. Альтернативная формулировка этого вопроса: как я могу настроить YankRing, чтобы он только добавлял поведение Ctrl-n/Ctrl-p после вставки (для циклического перехода через предыдущие янки)?

Я часто дергаю слово, визуально выбираю другое слово, вставляю, визуально выбираю другое слово, вставляю. Без YankRing последняя паста ставит первое выбранное слово. С YankRing он снова вставляет одно и то же слово. (Это всего лишь один пример.)

Вот некоторые из настроек yankring. Как вы можете видеть, я просмотрел документы YankRing, чтобы отключить как можно больше параметров, чтобы вернуться к нормальному поведению vim.

" Some settings to try to get yank ring to not mess with default vim
" functionality so much.
let g:yankring_manage_numbered_reg = 0
let g:yankring_clipboard_monitor = 0
let g:yankring_paste_check_default_buffer = 0

" Don't let yankring use f, t, /. It doesn't record them properly in macros
" and that my most common use. Yankring also blocks macros of macros (it
" prompts for the macro register), but removing @ doesn't fix that :(
let g:yankring_zap_keys = ''

" Disable yankring for regular p/P. This preserves vim normal behavior, but
" I can still use C-p/C-n to cycle through yankring.
let g:yankring_paste_n_bkey = ''
let g:yankring_paste_n_akey = ''
let g:yankring_paste_v_key = ''

Ответ 2

Вы можете использовать команду ", чтобы указать регистр для yanking. От :help quote:

                                                        *quote*
"{a-zA-Z0-9.%#:-"}      Use register {a-zA-Z0-9.%#:-"} for next delete, yank
                        or put (use uppercase character to append with
                        delete and yank) ({.%#:} only work with put).

Ответ 3

Оказывается, есть недокументированные параметры (я нашел, набрав :echo g:yankring_paste_<Tab>).

let g:yankring_paste_v_bkey = ''
let g:yankring_paste_v_akey = ''

Теперь моя yank, визуальная вставка, визуальная паста работает как и ожидалось. (Мы увидим, есть ли другие биты, которые меняют поведение vim по умолчанию.)

Ответ 4

Вы можете просто сделать d<movement>P в нормальном режиме, и он удалит, а затем вставьте то, что вы только что удалили, а нумерованные регистры смещаются, если вы перемещаете строку или больше.