Evil模式下使用xref-js2跳转定义报错,寻求可行解决方法
哈哈,这个问题我刚转Evil的时候也踩过坑!核心原因是M-.默认绑定的xref-find-definitions并没有被Evil标记为「可重复命令」,而Evil的M-.在某些场景下会关联到它的重复机制,所以就弹出了那个恼人的提示。下面几个实用的解决办法,你可以挑一个适合自己的:
方案一:给xref跳转命令加上Evil重复支持
自己写一个简单的包装函数,让Evil识别这个命令是可以重复的,然后重新绑定快捷键:
(defun my/xref-find-definitions-with-repeat () (interactive) (xref-find-definitions (xref-read-symbol "Find definition of: ")) (evil-set-repeat 'my/xref-find-definitions-with-repeat)) ;; 在js2-mode的Normal模式下绑定M-.到新函数 (evil-define-key 'normal js2-mode-map (kbd "M-.") 'my/xref-find-definitions-with-repeat)
这样之后,你不仅能用M-.正常跳转,还能按.重复之前的跳转操作(如果需要的话)。
方案二:临时切换到Emacs状态执行跳转
不想写新函数的话,可以直接让M-.在执行跳转时临时切到Emacs状态,执行完再切回Normal状态,绕开Evil的重复检查:
(evil-define-key 'normal js2-mode-map (kbd "M-.") (lambda () (interactive) (evil-emacs-state) (call-interactively 'xref-find-definitions) (evil-normal-state)))
这个方案更轻量,适合不想额外定义函数的场景。
方案三:使用evil-collection适配
如果你的配置里还没装evil-collection,强烈建议装上!它是一个专门为Evil适配各种Emacs原生和第三方模式的工具包,已经处理了xref、js2-mode这类常见扩展的快捷键兼容问题。装上之后,只需要在配置里启用对应的模块,M-.的跳转就能正常工作,不用自己手动改绑定。
不管选哪个方案,修改完配置后记得重启Emacs或者用M-x eval-buffer重新加载配置文件,这样新的绑定才能生效哦~
内容的提问来源于stack exchange,提问作者gi4c0
相关产品推荐
相关产品推荐

