修改Emacs中tex-mode下的Alt+f快捷键

3
在TeX模式下,使用Emacs写作时,Alt + F似乎不会将“.”作为单词的一部分进行包含。那么,如何修改Alt + F的行为,在向前移动时,如果有标点符号,则将其包含在单词中,使其保持完全一致呢?
我有一个单独的文件,在TeX模式下加载,因此我将把它放在那里,以便不影响正常的Emacs行为。
感谢您的任何帮助。
另外一个相关的问题是,当使用Alt + D删除时,考虑到删除词汇及其后面的标点符号(例如...,!等)。
1个回答

3
以下代码应该适用于您:
(defun unpunctuate-syntax (str)
  "Make the characters of the given string word characters."
  (let ((st (copy-syntax-table (syntax-table))))
    (dotimes (n (length str))
      (modify-syntax-entry (elt str n) "w" st))
    (set-syntax-table st)))

(defun dots-are-not-punctuation ()
  (unpunctuate-syntax "."))

(add-hook 'TeX-mode-hook 'dots-are-not-punctuation)

M-f(前进单词函数)的工作方式是跳过当前语法表中类型为“w”(即单词)的缓冲区中的所有字符。
此代码创建了一个修改后的语法表,并将其提供给缓冲区,底部的add-hook位将其设置为在TeX-mode中打开文件时运行。(这种方法避免了您需要执行所描述的单独文件操作)。
您可能会注意到,我制作了语法表的副本,而不是编辑属于TeX主要模式的语法表。这是因为当我玩语法表时,我总是搞错了,而且你可能会彻底搞砸事情... 这种方法意味着您只需关闭缓冲区并重新开始!

@Rupert-不确定,但我可以在取消标点符号语法中放置多个表达式,例如“.,!”。从函数中看起来可能是这样,但对于Lisp编码并不完全熟悉。 - J Spen
没错,这就是想法。抱歉 - 我在看到你的问题编辑之前就发布了答案。 dotimes 循环在 unpunctuate-syntax 函数中遍历给定的字符串。 - Rupert Swarbrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接