Emacs在钩子中向前运行char

Emacs在钩子中向前运行char,emacs,elisp,Emacs,Elisp,我写这篇文章是为了在tex模式下搜索下一个时段。它工作得很好,只是在找到句点后试图让它向前移动一个字符。我不知道如何做到这一点,但这是我的尝试 (add-hook 'text-mode-hook (lambda ()

我写这篇文章是为了在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)))))

感谢您的帮助。

在分配给键的匿名函数中,最后两个函数调用的周围有括号,这导致Emacs Lisp认为您想调用名为
(向后搜索“.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模式
keymap来简化它:

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

在分配给键的匿名函数中,在最后两个函数调用的周围有括号,这导致Emacs Lisp认为您要调用名为
(向后搜索“.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模式
keymap来简化它:

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

@ajk底部的那个不能正常工作。它直接到了线路的起点。我想这可能是由于对addhook的更改。不太确定。@J斯宾:嗯,我不能让它那样失败。我所做的唯一不同于我发布的事情是我使用了不同的键序列(C-C-p),因为我没有超级键。我不太确定交易是什么,但我发布的另一个很好。我会看看这是否与超级钥匙有关,但我对此表示怀疑。我查一下。谢谢你的帮助。@ajk底部的那个不能正常工作。它直接到了线路的起点。我想这可能是由于对addhook的更改。不太确定。@J斯宾:嗯,我不能让它那样失败。我所做的唯一不同于我发布的事情是我使用了不同的键序列(C-C-p),因为我没有超级键。我不太确定交易是什么,但我发布的另一个很好。我会看看这是否与超级钥匙有关,但我对此表示怀疑。我查一下。谢谢你的帮助。