Emacs Evil“重复”(点)行为

时间:2014-10-23 00:23:13

标签: vim emacs

我的.emacs

中有以下一行

(define-key evil-normal-state-map "\M-j" (lambda () (interactive) (evil-next-line 5)))

使文件中的导航更容易。例如,使用M-j我会在下面的5行,所以我不必按j 5次。我为所有hjkl做同样的事情。麻烦的是这个命令污染了邪恶(点)中的最后一次重复,所以让我说我替换给定行中的一个单词,然后我做M-j来改变一个单词5以下几行。如果我按.,它将跳过下面的另外5行,而不是像在Vim中那样替换该单词。如果我使用hjkl中的任何一个,它将不会污染上次重复。如何才能使我的功能不会污染上次重复

编辑:我刚刚注意到\M-j\M-k实际上并没有发生,只有\M-h\M-l,所以这个问题更加陌生。两者都定义为:

(define-key evil-normal-state-map "\M-h" '(lambda () (interactive) (evil-backward-char 5)))

(define-key evil-normal-state-map "\M-l" '(lambda () (interactive) (evil-forward-char 5)))

1 个答案:

答案 0 :(得分:1)

只需用defun说:(defun my-5-lines-down...)替换lambda然后(evil-declare-motion 'my-5-lines-down) 在邪恶(可能是vim?)中,动作不算是可重复的,所以这应该可以解决问题。或者,如果您想控制跳转列表,则可以使用evil-define-motion而不是defun。请参阅documentation以定义动作。