在 vim 中重新映射“Y”
Posted
技术标签:
【中文标题】在 vim 中重新映射“Y”【英文标题】:Remapping "Y" in vim 【发布时间】:2014-12-30 14:34:05 【问题描述】:vim 中的复制粘贴功能对我来说似乎有点不一致。命令yy
、dd
和cc
拉出/删除整行。命令D
和C
从光标删除到行尾,但Y
将整行拉出。我希望Y
与D
和C
一样工作。所以我在我的.vimrc
中加入了以下行:
nmap Y y$
但它似乎不起作用。我的第一个想法是这是因为一些插件干扰。我试图将命令放在.vimrc
的开头和结尾,但没有任何帮助。但是,如果我手动输入命令(不是来自.vimrc
),它就可以工作。为什么是这样?我该如何完成这项工作?
【问题讨论】:
在 vimrc 末尾的那一行,:verbose map Y
的输出是什么?顺便说一句,考虑使用nnoremap Y y$
【参考方案1】:
你的 vimrc 是在插件加载之前加载的,所以这并不排除插件覆盖了它。将 .vim 文件放入 .vim/after/
将在插件之后加载,因此如果您想避免逐个删除插件的路线,您可以通过这种方式测试该理论。
正如 Kent 所说,您真的应该考虑使用 nnoremap
而不是 nmap
。
【讨论】:
其实这个key被YankRing插件覆盖了。从.vim/after
映射它有效,但我真的需要nmap
而不是nnoremap
,因为当我在命令中使用y
时,我希望YankRing 实际捕获它。
YankRing 文档提到您可以添加函数:函数! YRRunAfterMaps() nnoremap Y :nmap
、nnoremap
之间的差异以及更多内容在this answer 中进行了介绍。您也可以:h nnoremap
了解更多。【参考方案2】:
将新答案粘贴为代码未在上述答案的注释中格式化。
如果冲突是 YankRing,您可以使用:
function! YRRunAfterMaps()
nnoremap Y :<C-U>YRYankCount 'y$'<CR>
endfunction
nnoremap Y y$
来源::help yankring-custom-maps
【讨论】:
以上是关于在 vim 中重新映射“Y”的主要内容,如果未能解决你的问题,请参考以下文章