如何让vim记住之前的复制内容?(或者配置YankRing减少操作步骤)

11
当我在vim中删除某些内容时,它会被添加到编号寄存器中。我最后复制的内容在寄存器0中。如何让vim自动记住最近的10个复制内容呢?
我尝试过YankRing,但它改变了太多vim的行为。这个问题的另一种表述是:如何配置YankRing,使其在粘贴后(循环查看以前的yank)仅添加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's 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's 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 = ''

我也停止使用yankring,因为我觉得它会干扰我喜欢的一些vim默认设置。只使用ctrl-n/ctrl-p会很好,但现在我也开始使用ctrlp插件,所以这可能会与yankring冲突。 - skeept
@skeept:为什么不改变CtrlP映射?我这样做了,我同时使用yankstack和CtrlP。 - idbrii
4个回答

14

虽然我多年来一直使用和喜欢 yankstack(感谢推荐!),但现在我更喜欢 unite.vim 历史/复制源(neoyank.vim),它轮询您的寄存器而不是重新映射键。 - idbrii
很好知道,我也停止使用yankstack了。我会检查unite.vim - 实际上它的github,可能更好使用Denite.nvim。 - mMontu

4
您可以使用"命令指定要yank的寄存器。来自: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).

虽然在我提到的那个情况下这样做是有效的,但vim的默认行为并没有恢复。此外,我必须在每个yank命令之前键入“。 - idbrii
好的。我对YankRing一无所知,所以我只是回答了你问题的第一部分。 - Greg Hewgill
啊,好的。澄清问题:我希望它是自动的,并且能记住很多复制操作。 - idbrii

1
原来有一些未记录的选项(我通过输入:echo g:yankring_paste_<Tab>发现了它们)。
let g:yankring_paste_v_bkey = ''
let g:yankring_paste_v_akey = ''

现在我的yank、visual paste和visual paste都按预期工作了。(我们将看到是否有其他部分改变了默认的vim行为。)


如果你还感兴趣的话,它还会以一种干扰repeat.vim工作的方式搞乱'.'命令。此外,如果我没记错的话,它还重新映射了<C-R>键。除此之外我没有深入探索过。第一个问题足以让我转而使用yankstack。 - kshenoy

1

在正常模式下,您只需执行d<movement>P,它将删除然后粘贴您刚刚删除的内容,此外,如果您移动一行或更多行,则编号的寄存器也会被移动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接