Vim使用术语"yank"和"pull",来指代我们所熟悉的复制和粘贴 (Copy & Paste)。在Vim中,任何被复制和删除的文本,都会被保存在寄存器(Regists)中。例如,使用yy
命令复制当前行或使用dd
命令删除当前行,都会同时将当前行放入默认寄存器中。当然,你也可以在命令中指定寄存器。比如使用"ayy
命令,将复制的文本放到寄存器a中;然后使用:pu a
命令,就可以粘贴寄存器a中的内容。
使用:register
命令,可以查看完整的寄存器列表:
面对大量的历史纪录,我们很难仅凭记忆来找到并粘贴之前复制的文本。而YankRing插件,则可以更加方便地查找和粘贴文本。
推荐使用vim-plug或Vundle等插件管理器,来安装Vim.org上的YankRing插件。
可以在vimrc文件中,自定义插件的选项。例如以下命令指定条目的最小长度为2个字符,以避免删除的单个字符也被记录到YankRing中:
let yankring_min_element_length = 2
以下表格列示了主要选项的默认设置:
选项 | 默认值 | 描述 |
---|---|---|
yankring_max_history | 100 | 保存历史纪录的最大数目 |
yankring_history_dir | $HOME | 保存历史纪录的文件位置 |
yankring_min_element_length | 1 | 如果复制的文本长度小于此值,则不会被记录 |
yankring_max_element_length | 1MB | 如果复制的文本长度大于此值,则会被截断 |
yankring_enabled | 1 | 自动启用YankRing |
yankring_ignore_duplicate | 1 | 忽略重复的纪录 |
yankring_window_auto_close | 1 | 当选择某条纪录之后自动关闭YankRing窗口 |
使用以下命令打开YankRing窗口,以显示复制和删除文本的历史记录:
:YRShow
YankRing窗口顶端的状态行,显示以下向导信息,以帮助你操作列表中的历史记录:
选项 | AutoClose=1 | 自动关闭窗口 |
ClipboardMonitor=1 | 监控剪贴板 | |
Inserts=0 | 不记录最近输入的文本 | |
命令 | <enter> | 粘贴文本到光标之后 |
p | ||
P | 粘贴文本到光标之前 | |
1-9 | 粘贴第n个条目 | |
d | 删除当前条目 | |
r | 在YankRing窗口中的可视化模式下 选中的多行按倒叙粘贴到光标之后 | |
s | 查找/过滤条目(支持正则表达式) | |
a | 开/关AutoClose选项 | |
u | 刷新YankRing窗口 | |
q | 关闭YankRing窗口 | |
帮助 | ? | 显示命令的帮助信息 |
点击?键,将显示各个命令的说明:
您可以使用上下键、鼠标滚轮或移动命令,来浏览所有条目;当使用回车键、鼠标双击或命令,选择某条纪录之后,将完成粘贴操作并关闭YankRing窗口。
使用以下命令,可以将指定范围内的文本加入YankRing:
:5,10YRYankRange
在可视化模式下,使用YRYankRange
命令,则会将所有选中的文本加入到YankRing中。
使用以下命令,将在屏幕底部提示你输入关键字(支持正则表达式)以进行查找,并将在YankRing窗口中显示匹配结果:
:YRSearch
使用:h yankring
命令,可以查看YankRing插件的帮助文件。
使用:h yankring-tutorial
命令,则可以参照实例以快速了解插件功能。
YankRing无疑大大增强了Vim复制粘贴的功能,但同时也引入了更多的快捷键和命令;通过新建YankRing窗口,来完成查找和粘贴历史条目的操作,对我个人来说也看不到效率的提升。
更重要的是,例如Ditto等操作系统层面的剪贴板工具,覆盖了更多的应用,而且操作也更直观。那么YankRing是不是一个多余的存在了呢?