【问题标题】:Remap yank (y), Change (c) and Delete (d)重新映射 yank (y)、Change (c) 和 Delete (d)
【发布时间】:2012-04-19 22:42:15
【问题描述】:

我一直在尝试扩展这三个命令 (y,c,d) 的功能,因此我将在系统剪贴板(“+ 寄存器”)和普通寄存器中都有内容。

这是我目前想出的:

nnoremap Y y$v$"+y$
nnoremap yy 0y$0v$"+y$
vnoremap y ygv"+y
" ------
nnoremap C y$v$"+c
nnoremap cc 0y$0v$"+c
vnoremap c ygv"+c
" ------
nnoremap D y$v$"+d$
nnoremap dd 0y$0v$"+d$
vnoremap d ygv"+d
" ------

我对这个映射有一些问题:

  1. 出于某种奇怪的原因,我必须先获取我的 .vimrc 资源,然后才能真正使用这些新绑定。 尝试只使用 nmap、vmap 甚至 map 似乎根本不起作用。
  2. 当我尝试拉动(例如)多行(例如 2yy)时,它会按预期将文本拉入“常规”寄存器 ("0),但仅将第一行拉入系统剪贴板。
  3. 我找不到在正常模式下为 y、c 和 d 创建此行为的方法。

谁能帮助解决这些问题?

我想创建一个函数,也许,所以我可以多次调用它,但我的 vim script-fu 充其量是新手。

【问题讨论】:

  • 你不想只使用系统剪贴板作为所有东西的默认寄存器吗?
  • 实际上不知道。我还不太熟悉 vim 中寄存器的概念,但我知道如果我强制将其拉入 "+ 寄存器,它不会像原来那样在 1-9 寄存器中加起来。虽然它可以使用 YankRing 插件相对容易地解决,我只是不想限制原始行为。此外,要 yank 2 行我需要写“+2y,而不是 2”+y 我认为。对吗?
  • 不,您必须输入 "+2yy: "+ 用于寄存器,2yy 才能拉出整行。

标签: vim


【解决方案1】:

如果你能做到"+y,那么所有这些映射都是无用的。只需将set clipboard+=unnamedplus 添加到您的~/.vimrc

【讨论】:

  • 实际上我已经尝试过了,但似乎没有用。我将 linux 与命令行 vim 和 gvim 一起使用。也许命令行vim不允许未命名的与系统剪贴板相关?
  • unnamedplus 是最近添加到 Vim 的。我的版本(Linux 上的 7.3.035)没有它,而我最近工作的 MacVim(不知道什么版本)有它。要查看您是否可以使用它,请执行:h 'clipboard' 并查看它是否已列出。
  • 谢谢,我现在正在使用 unnamedplus,效果很好。与 YankRing 一起满足我的需求。
  • 对我不起作用,但设置clipboard=unnamedplus 起作用了,为此,我可以吻你。谢谢!
猜你喜欢
  • 2020-03-09
  • 1970-01-01
  • 2014-12-30
  • 2018-11-03
  • 2019-12-08
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多