在 vim 中重新映射“Y”

Posted

技术标签:

【中文标题】在 vim 中重新映射“Y”【英文标题】:Remapping "Y" in vim 【发布时间】:2014-12-30 14:34:05 【问题描述】:

vim 中的复制粘贴功能对我来说似乎有点不一致。命令yyddcc 拉出/删除整行。命令DC 从光标删除到行尾,但Y 将整行拉出。我希望YDC 一样工作。所以我在我的.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 :YRYankCount 'y$' endfunction 以避免 YankRing 优先于映射。 关于@Kent 的评论/建议:nmapnnoremap 之间的差异以及更多内容在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”的主要内容,如果未能解决你的问题,请参考以下文章

vim - 重新映射 >> << (缩进命令)

为啥在 Vim 中将 Esc 重新映射到 CAPS LOCK 如此复杂?

Vim:重新映射键以切换行号

Vim 简单映射

如何在鱼壳中将转义插入模式重新映射为'jk'?

从零开始配置 vim——键盘映射的一些技巧