Emacs在钩子中运行char

时间:2011-08-31 10:12:47

标签: emacs elisp

我在下面写了这个,以便在tex模式中搜索下一个时段。它工作正常,除了试图让它在找到句点后向前移动一个字符。我不知道该怎么做但这是我的尝试。

(add-hook 'text-mode-hook (lambda ()                                                                                                                                                                                                 
                (local-set-key (kbd "s-p")                                                                                                                                                                                            
                       (lambda () (interactive) ((search-backward "." nil t) (forward-char))))))       

最终解决方案我结合了ajk解决方案的功能。没有加钩,我无法让另一个工作。有人可能知道如何使第二个工作。以下内容完全有效并向后搜索上一期间,除非它当前处于某个时期。

(add-hook 'text-mode-hook
      (lambda ()
        (local-set-key (kbd "s-p")
                       (lambda ()
                         (interactive)
                          (if (looking-back "\.")
                         (backward-char))
                         (search-backward "." nil t)
                         (forward-char)))))

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

您在分配给密钥的匿名函数中的最后两个函数调用周围有括号,导致Emacs Lisp认为您要调用名为(search-backward "." nil t)的函数。尝试

(add-hook 'text-mode-hook
          (lambda ()
            (local-set-key (kbd "s-p")
                           (lambda ()
                             (interactive)
                             (search-backward "." nil t)
                             (forward-char)))))

我对此绑定的问题是它不可重复。如果再次运行它,它会找到您刚刚找到的相同时段。您可能想检查前一个字符是否为句点,如果是,请跳过它。此外,您可以使用define-key将绑定显式添加到text-mode键映射来简化它:

(define-key text-mode-map (kbd "s-p")
  (lambda ()
    (interactive)
    (if (looking-back "\.")
        (backward-char))
    (search-backward "." nil t)
    (forward-char)))