gpt4 book ai didi

emacs - 替代前向词/后向词以包含符号——例如,***

转载 作者:行者123 更新时间:2023-12-04 14:46:12 25 4
gpt4 key购买 nike

我首选的方法是用三个星号来指示文档中需要注意的位置 *** .当需要使用 shift+right-word 选择包含三个星号的区域时或 shift+left-word ,这些函数会跳过三个星号并移动到下一个单词。当我偷看里面时 bindings.el ,我看到了left-wordright-wordforward-word 的改编版和 backward-word ,可追溯到 C 源代码中的内置函数。基本上,我正在寻找 left-wordright-word包括三个星号等符号 *** .

任何人都可以提出一种方法来让函数向左跳转一个单词或符号,向右跳转一个单词或符号。该函数的行为需要与左词和右词相似,以便在多次按下箭头键时我可以选择多个词——例如,left-word-or-symbolsright-word-or-symbols .

以下是基于以下有用答案的自定义函数:

(defvar lawlist-movement-syntax-table
(let ((st (make-syntax-table)))
;; ` default = punctuation
;; ' default = punctuation
;; , default = punctuation
;; ; default = punctuation
(modify-syntax-entry ?{ "." st) ;; { = punctuation
(modify-syntax-entry ?} "." st) ;; } = punctuation
(modify-syntax-entry ?\" "." st) ;; " = punctuation
(modify-syntax-entry ?\\ "_" st) ;; \ = symbol
(modify-syntax-entry ?\$ "_" st) ;; $ = symbol
(modify-syntax-entry ?\% "_" st) ;; % = symbol
st)
"Syntax table used while executing custom movement functions.")

(defun lawlist-forward-entity ()
"http://stackoverflow.com/q/18675201/2112489"
(interactive "^")
(with-syntax-table lawlist-movement-syntax-table
(cond
((eolp)
(forward-char))
((and
(save-excursion (< 0 (skip-chars-forward " \t")))
(not (region-active-p)))
(skip-chars-forward " \t"))
((and
(save-excursion (< 0 (skip-chars-forward " \t")))
(region-active-p))
(skip-chars-forward " \t")
(cond
((save-excursion (< 0 (skip-syntax-forward "w")))
(skip-syntax-forward "w"))
((save-excursion (< 0 (skip-syntax-forward ".")))
(skip-syntax-forward "."))
((save-excursion (< 0 (skip-syntax-forward "_()")))
(skip-syntax-forward "_()"))))
((save-excursion (< 0 (skip-syntax-forward "w")))
(skip-syntax-forward "w")
(if (and
(not (region-active-p))
(save-excursion (< 0 (skip-chars-forward " \t"))))
(skip-chars-forward " \t")))
((save-excursion (< 0 (skip-syntax-forward ".")))
(skip-syntax-forward ".")
(if (and
(not (region-active-p))
(save-excursion (< 0 (skip-chars-forward " \t"))))
(skip-chars-forward " \t")))
((save-excursion (< 0 (skip-syntax-forward "_()")))
(skip-syntax-forward "_()")
(if (and
(not (region-active-p))
(save-excursion (< 0 (skip-chars-forward " \t"))))
(skip-chars-forward " \t"))))))

(defun lawlist-backward-entity ()
"http://stackoverflow.com/q/18675201/2112489"
(interactive "^")
(with-syntax-table lawlist-movement-syntax-table
(cond
((bolp)
(backward-char))
((save-excursion (> 0 (skip-chars-backward " \t")) (bolp))
(skip-chars-backward " \t"))
((save-excursion (> 0 (skip-chars-backward " \t")) (> 0 (skip-syntax-backward "w")))
(skip-chars-backward " \t")
(skip-syntax-backward "w"))
((save-excursion (> 0 (skip-syntax-backward "w")))
(skip-syntax-backward "w"))
((save-excursion (> 0 (skip-syntax-backward ".")))
(skip-syntax-backward "."))
((save-excursion (> 0 (skip-chars-backward " \t")) (> 0 (skip-syntax-backward ".")))
(skip-chars-backward " \t")
(skip-syntax-backward "."))
((save-excursion (> 0 (skip-syntax-backward "_()")))
(skip-syntax-backward "_()"))
((save-excursion (> 0 (skip-chars-backward " \t")) (> 0 (skip-syntax-backward "_()")))
(skip-chars-backward " \t")
(skip-syntax-backward "_()")))))

最佳答案

添加到模式的模式 Hook ,您正在编辑文本的位置:

(modify-syntax-entry ?* "w")

阅读 here了解更多信息。

请注意,这将使其他函数将星号视为单词组成部分(不过,您可能会想要它,因为您很快就会发现不仅运动命令的行为与您希望的方式相反)。

仅重载这些特定命令的另一种方法是使用 defadvice 通知它们。并在函数运行期间临时更改语法表。

关于emacs - 替代前向词/后向词以包含符号——例如,***,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18675201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com