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

vim 中的复制粘贴功能对我来说似乎有点不一致。命令yyddcc 拉出/删除整行。命令DC 从光标删除到行尾,但Y 将整行拉出。我希望YDC 一样工作。所以我在我的.vimrc 中加入了以下行:

nmap Y y$

但它似乎不起作用。我的第一个想法是这是因为一些插件干扰。我试图将命令放在.vimrc 的开头和结尾,但没有任何帮助。但是,如果我手动输入命令(不是来自.vimrc),它就可以工作。为什么是这样?我该如何完成这项工作?

【问题讨论】:

  • 在 vimrc 末尾的那一行,:verbose map Y 的输出是什么?顺便说一句,考虑使用nnoremap Y y$

标签: vim key-bindings


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多