关于那些需要的人的独家动议的背景:
我一直对Vim在运营商之后的运动方式感到恼火。最近我听说这是因为他们通常是"排他性的#:他们遗漏了最右边的角色而不是"包含"将在起点和终点之间的光标下拾取所有内容的操作。出于某种原因,操作员待定模式中的几乎所有动作似乎都以这种方式工作,例如按下" dl"只会删除光标下的字符(保留最右边的第二个字符),一行末尾的d0将使该行的最后一个字符不受影响。一些动作如" d $"或" de"然后再次打破这种模式,并包括最右边的角色。更多信息Motion.txt。
我发现排他性的概念是不必要和混乱的。我可以理解,当你在"搜索"对于下一个单词,标记或搜索结果的出现,您通常希望在操作时不选择运动的实际目标。独家议案实现了这一点。但排他性概念的不一致是奇怪的。主要问题是当你向后移动某个地方时:操作将使最右边的角色,起始角色不受影响,并且无论你做什么,仍然会在你的移动目标上运行,而不是向前搜索。例如,您期望" edb"完全删除一个单词,但它没有。同时" bde"确实。 " DL"只删除光标下的字符(而不是也包括右边的字符)和" dh"左边只有一个字符。 This inconsistency is annoying, and seemingly makes it look like Vim secretly is keeping the cursor actually between letters on the left side of the cursor block.
幸运的是,使用" v"在操作员为特征操作切换排他性之后,我已经能够使用onoremap vb修复一些动作,例如b和h。但它只是部分解决方案;许多"搜索"移动命令可以向后或向前移动,因此当向后移动时使它们包括最右边的字符是不可能的,而不会使向前运动不利地影响运动目标的第一个字符。
我的问题简而言之:当相对于光标位置向后移动时,是否存在任何简单的方法使所有操作包含(包括光标起点下的字符),而不会影响前进动作?
(更好的是完全忘记了整个排他性的事情并且让#34; v"切换是否包含动作的目标(所以" dn"将从光标删除直到开始搜索结果," dvn"将从光标删除到结果的末尾),但这可能意味着编辑源。)
很抱歉很长的帖子,很难解释,我很生气。
答案 0 :(得分:1)
在您描述的大多数场景中,vim 文本对象肯定是更好的候选者而不是动作。