在运算符之后,我一直对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.但这只是部分解决方案;许多“搜索”移动命令可以向后或向前移动,因此当向后移动时使它们包括最右边的字符是不可能的,而不会使向前运动不期望地影响运动目标的第一个字符.
简而言之我的问题:当相对于光标位置向后移动而不影响前向运动时,是否有任何简单的方法可以使所有操作包含在内(包括光标起点下的字符)?
(甚至更好的是完全忘记整个排他性事物并且“v”切换是否包括运动的目标(因此“dn”将从光标删除直到搜索结果的开始,“dvn”将从光标删除到结果的结尾),但这可能意味着编辑源.)
对不起,很长的帖子,很难解释,我很生气.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。