我喜欢组成具有语义含义的命令的简单性。例如,cib
读起来就像句子change in brackets
- 很精彩。
但为什么vim需要将旧内容复制到剪贴板中?在那个命令中我没有提出我想要复制它并且问题更加深入。
dw
diw
等都会复制到我的剪贴板/注册表中。为什么?这似乎放弃了这些命令的语义价值,我认为这是意外行为。
我使用这些命令是错误的,还是有某种方法可以完全禁用此功能?目前我做了一些像这样的重映射:
nnoremap dd "_dd
nnoremap cc "_cc
但我不想为非显式复制的每一种可能组合做到这一点。
答案 0 :(得分:6)
默认情况下,您正在谈论的大多数命令都使用未命名的寄存器Died on test #1 at Module.callback (http://localhost:4200/assets/tests.js:250:19)
at Module.exports (http://localhost:4200/assets/vendor.js:131:32)
at requireModule (http://localhost:4200/assets/vendor.js:30:18)
at TestLoader.require (http://localhost:4200/assets/test-support.js:7104:7)
at TestLoader.loadModules (http://localhost:4200/assets/test-support.js:7096:14)
at Function.TestLoader.load (http://localhost:4200/assets/test-support.js:7126:22)
at http://localhost:4200/assets/test-support.js:7009:18: Cannot instantiate a component without a renderer. Please ensure that you are creating <(subclass of Ember.Component):ember210> with a proper container/registry.@ 9 ms
Source:
Error: Cannot instantiate a component without a renderer. Please ensure that you are creating <(subclass of Ember.Component):ember210> with a proper container/registry.
at Class.init (http://localhost:4200/assets/vendor.js:51954:15)
at Class.superWrapper [as init] (http://localhost:4200/assets/vendor.js:50175:22)
at Class.init (http://localhost:4200/assets/vendor.js:50443:19)
at Class.superWrapper (http://localhost:4200/assets/vendor.js:50175:22)
at Class.init (http://localhost:4200/assets/vendor.js:50493:19)
at Class.superWrapper (http://localhost:4200/assets/vendor.js:50175:22)
at Class.exports.default._emberMetal.Mixin.create._Mixin$create.init (http://localhost:4200/assets/vendor.js:51000:17)
at Class.superWrapper (http://localhost:4200/assets/vendor.js:50175:22)
at Class.init (http://localhost:4200/assets/vendor.js:17472:19)
at Class.superWrapper [as init] (http://localhost:4200/assets/vendor.js:50175:22)
。听起来你正在处理剪贴板被覆盖所有这些事情,这可能是将clipboard
设置为"
或unnamed
的症状。
要返回标准版,如果unnamed_plus
的输出是这两个选项之一,则可以执行set clipboard=
。
set clipboard?
答案 1 :(得分:1)
我会提出不同意见,并建议您可能非惯用地使用Vim。这绝不是出乎意料的行为。您是否正在使用cib
作为粘贴准备,以便cib
将其搞砸?请改为vibp
。
dw
diw
等都会复制到我的剪贴板/注册表中。为什么?这似乎放弃了这些命令的语义价值,我认为这是意外行为。
d
然后p
是剪切和粘贴(即移动文本)的正常Vim习语。这是我每天都要做的一项操作,每天多次,如果d
没有猛拉,那真的很烦人。您似乎认为d
在其他文本编辑器上等同于Del
;它相当于ctrl-x
(切割)。要取消此操作,您可以按照说明"_d
进行操作;我发现我几乎不需要它。
作为一个高级示例,c
和可视模式p
的默认语义使得交换两个对象变得微不足道;例如:
我喝了所有的食物,吃了他们所有的威士忌。
转到“喝酒”,diw
(删除单词然后猛拉它),转到“ate”,viwp
(选择一个单词并粘贴到其上,然后放弃以前的内容),{ {1}}返回“喝”的地方和ctrl-o
(在光标前粘贴):
我吃了所有的食物,喝了他们所有的威士忌。
(我还有一个插件,它将“函数参数”定义为文本对象,所以如果我混淆或重构参数顺序,我在编码中使用相同的习惯用法。)
我唯一想要更常防止的是在视觉模式下粘贴(因此我可以多次粘贴相同的内容);为此,我使用
P
(来自here)。这仅在可视模式下重新映射xnoremap <expr> P '"_d"'.v:register.'P'
(否则在可视模式下与P
相同)。视觉模式之外的p
和p
都没有,所以这不是问题。