关于那些需要的人的独家动议的背景:
在操作员之后,我一直对Vim中的动作如何工作感到恼火.最近我听说这是因为它们通常是"排他性的":它们省略了最右边的字符,而不是"包容性"操作,它会拾取起点和终点之间光标下的所有内容.由于某种原因,操作员暂挂模式中的几乎所有动作似乎都是这样工作的,例如按下"dl"将只删除光标下的字符(将最右边的第二个字符排除),一行末尾的d0将离开最后一个线上的字符不受影响.像"d $"或"de"这样的动作再次打破了这种模式,并且还包括最右边的角色.更多在Motion.txt.
我发现排他性的概念是不必要和混乱的.我可以理解,当你"搜索"下一个单词,标记或搜索结果时,你通常会想要在操作时不选择运动的实际目标.独家议案实现了这一点.但排他性概念的不一致是奇怪的.主要问题是当你向后移动某个地方时:操作将使最右边的角色,起始角色不受影响,并且无论你做什么,仍然会在你的移动目标上运行,而不是向前搜索.例如,你希望"edb"完全删除一个单词,但事实并非如此.同时"bde"确实如此."dl"只删除光标下的字符(而不是也包括右边的字符),"dh"只删除左边的一个字符.这种不一致是令人讨厌的,并且看起来像Vim一样秘密地将光标实际保持在光标块左侧的字母之间.
幸运的是,在操作符切换到字符操作的排他性之后使用"v",所以我已经能够使用onoremap vb修复一些运动,例如b和h.但这只是部分解决方案; 许多"搜索"移动命令可以向后或向前移动,因此当向后移动时使它们包括最右边的字符是不可能的,而不会使向前运动不期望地影响运动目标的第一个字符.
简而言之我的问题:当相对于光标位置向后移动而不影响前向运动时,是否有任何简单的方法可以使所有操作包含在内(包括光标起点下的字符)?
(甚至更好的是完全忘记整个排他性事物并且"v"切换是否包括运动的目标(因此"dn"将从光标删除直到搜索结果的开始,"dvn"将从光标删除到结果的结尾),但这可能意味着编辑源.)
对不起,很长的帖子,很难解释,我很生气.