用evil的朋友们,你们有没有发现,vw和yw,dw在选中区域上不一致呢?vw会在最后多选一个字符,这个是个bug吧
w的意思是到下一个词首,到当前词尾可以用e,ve ye de等
的确是这样的,感谢解答。不过还是困惑,按你说的这个意思,那dw,vw,yw 操作的区域也应该一样才行,不是么
这是vim的特性,关键词exclusive/inclusive
这种的区别建议搜索vim相关的特性,类似的还有 diw vs daw
经过我的验证,你说的diw vs daw 是vim的特性,但是vw和yw在选中区域上的不同,我看不出来是什么特性,包括cw在内,那现在w在之后的选中区域有三种情况:
1, yw,dw 操作的区域是当前位置到(不包含)下一个词的词头
2, vw 操作的区域是当前位置到(包含)下一个词的词头
3, cw 操作的区域是当前位置到这个单词的词尾
从这个现象来判断,这个区别不像是什么特性,更像是一开始就设定的一个默认行为。
去看vim的文档吧。cw是hard coded的特殊行为,和vw dw之类的不一样。
w就是移动到下一个单词的开头,这个是一个motion。motion前面接一个operator,这都是很自然的概念。
但是cw是特殊行为,等价于ce。
我 ce cw 都没用过,一般都是 ciw
这就是人为制造混乱了。既然 ce 可以完成,就不需要改变 cw 应有的行为来迁就,还强行解释 change-word
。所以我更常用 b/e。
在 evil 中把 v 绑到 er/expand-region 上,比 vw 好用。
(evil-define-key 'visual 'evil-visual-state-map
"v" 'er/expand-region)
vim 在使用命令作用于某个对象上,明显有两种分类:
第一种是通过当前光标和目的地之间选中的范围
第二种是通过yiw,yio直接告诉你是在哪个范围
如果按这个设计原则的话,很明显cw的表现就是一个明显的bug
yiw yio 是干啥的?