【问题标题】:Emacs Evil "repeat" (dot) behaviorEmacs Evil “重复”(点)行为
【发布时间】:2014-12-18 14:29:56
【问题描述】:

我的.emacs 中有以下行

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

这使得文件中的导航更容易。例如,M-j 我在下面 5 行,所以我不必按 j 5 次。我对所有hjkl 都这样做。问题是这个命令污染了 Evil 中的 last repeat(点),所以假设我替换了给定行中的一个单词,然后我用 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)))

【问题讨论】:

  • 嗨,不知道,所以问:您不喜欢使用{( 或使用sexps 导航段落,使用beginning-of-defunbeginning-of-sexp 吗?比起使用“5 行”,我更喜欢它们,因为它们更有意义。

标签: vim emacs


【解决方案1】:

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

【讨论】:

  • 您能解释一下为什么会出现这种行为吗?谢谢
  • 实际上并没有什么特别的原因,只是像往常一样试图复制 vim 的行为是邪恶的。所以你的问题不是关于邪恶的问题,而是 vim,我没有答案。好消息是这种方法没有缺点,因为您可以选择是否将 deun 声明为动议。
猜你喜欢
  • 2014-06-10
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多