比如evil 模式下 (define-key '光标位置evil-lisp)当我dW的时候 仅删除evil-lisp 而不是evil-lisp)
你用小写的 w 就可以了吧?
如果你仔细研究过 Vim,会发现 Vim 的 W 也是这种行为,没必要刻意去 hack,用小写的 w 就 ok 了。
谢谢回复。 小写w 是可以实现
(add-hook 'emacs-lisp-mode-hook #'(lambda ()
(modify-syntax-entry ?- "w")
(modify-syntax-entry ?_ "w")))
但是会存在这样的问题:
比如我现在('emacs-*光标在此处*lisp-mode-hook)
当我仅仅想把lisp
替换的时候 按下cw
这时候会将lisp-mode-hook
都给删掉
最好就是能实现 )也对W分词有效 这样完美了,但是不知道怎么实现,也没有思路
vi/evil
的行为就是这样,最简单的就是改用 dt)
来删除:
dt)
v----------------|
(((((delete-whole-world)))))
^----| dw |
^---------------------|
dW
或者可以研究一下 emacs
的 superword-mode
。
主要是因为在输入dt) 太麻烦了,才想这么改的
我观点刚好相反,dW
一共 3 个键在同一侧,按起来吃力,小拇指很受伤。dtX
不方便的地方是结尾那个字符不固定。
W
对应的函数是 evil-forward-WORD-end
,改变它的默认行为就改变了 dW
。
默认dw
只删掉foo-bar
中的foo
,我喜欢让他删掉整个symbol,所以(defalias #'forward-evil-word #'forward-evil-symbol)
了,这样和楼主(modify-syntax-entry ?- "w")
的作用类似,但是对各种major-mode都有用。
这技巧太棒了!!!
副作用就是:有时候 邮箱仅仅删掉foo 结果又把整个句子都删掉了。 所以 我想改的小写w 保持原样,大写W #'forward-evil-symbol 起这个作用 ,要是能这样就完美了
我试了一下 大写W行为没法
(define-key evil-normal-state-map (kbd "W") 'evil-forward-word-begin)
是代码问题么?
只用一句(defalias #'forward-evil-WORD #'forward-evil-symbol)
试试呢
稍稍还有点问题,好像还不行 W 和w 一个功能了
是不是把forward-evil-word
也alias了,重启一下?
(defalias #'forward-evil-WORD #'forward-evil-symbol)
;; (defalias #'forward-evil-word #'forward-evil-symbol)
这句话确实起作用了 但是效果变成了和小写w一样了。 下边这句作用就对 汗
是我的问题;; (define-key evil-normal-state-map (kbd "W") 'evil-forward-word-begin)
我把W 重新给映射了 。
现在好了。
大神,你太厉害了!
我也是从stackexchange抄的,链接编辑到上面的回复里了。
我只会一点点lisp,碰到什么讨论语法的帖子我都是在角落瑟瑟发抖的
https://github.com/jixiuf/vmacs/blob/master/conf/conf-evil-symbol.el 针对symbol的 命令
;; WORD是中间没有空格的一串字符 ;; 与emacs中的symbol类似但是不同
;; 下面实现向前向后移动一个symbol, ;; |e|向前移动一个symbol,光标停在下个symbol的开始处| ;; |r|向前移动一个symbol,光标停在下个symbol的结束处|
;; |v|向后移动一个symbol,光标停在下个symbol的开始处| ;; |R|向后移动一个symbol,光标停在下个symbol的结束处|
;; |de|删除一个symbol,不包含空格,==die| ;; |dae|删除一个symbol,含空格| ;; |die|删除一个symbol,不含空格| ;; ;; ;; 这里占用了vim 原有的绑定,包括 e r R v ;; 其中原来的e我觉得用下不大 ;; emacs更倾向于在word 或symbol的开头后进行操作, ;; 所以基本上移动到word或symbol的开后进行操作就足够了 ;; 而我很少用vim的 r R进行替换操作,所以这两个键被占用了对我没有太大的影响
;; 而影响较大的是v键被占用了,v的功能是开始选中一片区域 ;; 之所以占用这个功能是,是我觉得向后移动到symbol的操作是个很常用的操作 ;; 我如果持续向后移动,只需要一直按住v就可以了 ;; 而所有的选中区域的功能我绑定到了别的键上即sv, ;; 我把s键扩展成了一系列功能键