Regex Emacs-子词正则表达式说明
我试图更改子字模式命令(子字前进、子字后退等)停止的位置 我注意到subword.el提供了用于向前和向后匹配的正则表达式,我一直在尝试在添加更多子词分隔符方面取得一些进展 我真正想要的是澄清子词正则表达式到底是如何工作的,只要匹配的是什么,这样我就可以将其更改为包含我想要停止的字符。我对正则表达式有一个基本的了解,以前也使用过,但从来没有像subword.el中那样大 对于这两个正则表达式,我也不一定需要帮助。对于向现有正则表达式中的一个添加额外分隔符的任何指导,我都同样感激,因为这是我更改它们的目标,但我真的很想了解一下正则表达式是如何设置的 最后,在寻找解决方案时,我发现。我仔细阅读了一遍,但是subword.el并不包含正则表达式本身,因为它似乎出现在相关问题的引用部分,我不理解引用部分中最后一个附加语句的含义 编辑: 为了让我想做的事情更加清晰,我只希望Emacs中的Ctrl+Left/Right(子词forward/backward)尽可能接近Eclipse,因为我希望光标以类似的方式移动,在到达Ctrl+Left/Right的行的末尾和开头停止 。“viper”命令与我要查找的命令非常接近,但有点偏离,因为我希望该点在继续下一行之前停止在该行的末尾Regex Emacs-子词正则表达式说明,regex,emacs,elisp,Regex,Emacs,Elisp,我试图更改子字模式命令(子字前进、子字后退等)停止的位置 我注意到subword.el提供了用于向前和向后匹配的正则表达式,我一直在尝试在添加更多子词分隔符方面取得一些进展 我真正想要的是澄清子词正则表达式到底是如何工作的,只要匹配的是什么,这样我就可以将其更改为包含我想要停止的字符。我对正则表达式有一个基本的了解,以前也使用过,但从来没有像subword.el中那样大 对于这两个正则表达式,我也不一定需要帮助。对于向现有正则表达式中的一个添加额外分隔符的任何指导,我都同样感激,因为这是我更改它
(修改语法条目?\\“w”)
。这使得反斜杠成为单词的组成字符,因此单词函数将其视为单词的一部分
subword.el
中的regexp非常简单。您说您不需要帮助理解这些regexp。但是你问“子词正则表达式到底是如何构造的”是什么意思呢?它们很可能是手工建造的(基于您已经了解它们的各个部分的用途)
a
为非单词字符,请执行以下操作:
(修改语法条目?a“);或另一个非单词成分语法类(使用标点符号)
这使得a
成为标点字符而不是单词组成字符。如果您需要标点符号以外的其他语法类,请选择类似的语法类
评论后更新 例如,如果您希望任何标点符号语法与大写字母的作用相同,则可以这样做:
(defvar subword-forward-regexp
"\\W*\\(\\(\\([[:upper:]]\\|\\s.\\)*\\(\\W\\)?\\)[[:lower:][:digit:]]*\\)"
"Regexp used by `subword-forward-internal'.")
(defvar subword-backward-regexp
"\\(\\(\\W\\|[[:lower:][:digit:]]\\)\\(\\([[:upper:]]\\|\\s.\\)+\\W*\\)\\|\\W\\w+\\)"
"Regexp used by `subword-backward-internal'.")
或者,如果您希望,比如说,,与大写字母的作用相同,则可以这样做:
(defvar subword-forward-regexp
"\\W*\\(\\([,[:upper:]]*\\(\\W\\)?\\)[[:lower:][:digit:]]*\\)"
"Regexp used by `subword-forward-internal'.")
(defvar subword-backward-regexp
"\\(\\(\\W\\|[[:lower:][:digit:]]\\)\\([,[:upper:]]+\\W*\\)\\|\\W\\w+\\)"
"Regexp used by `subword-backward-internal'.")
如果这仍然不是你想要的,那么试着更好地解释一下你想要什么。例如,你没有举过一个例子——既没有正面的(应该到此为止),也没有负面的(不应该到此为止)。你让那些试图帮助你的人猜得比他们应该猜的更多,这是没有效率的。对不起,让我试着澄清一下自己。总的来说,我所说的“定界”是指我想更改regexp,以便它们在附加字符上停止,例如符号、括号等。就单词/非单词差异而言,我是否应该将我想停止的字符更改为单词字符?您所说的“停止”是什么意思?如果您不希望字符被视为单词或子单词的一部分,那么请为其提供非单词语法。例如,如果您希望将其视为启动子字的字符,就像大写字母一样,那么请遵循当前子字代码中如何处理
[:upper://code>,例如,让regexp执行[:upper://code>或您的字符,等,我已经添加了额外的信息,以原来的职位只是意味着结果,我想要的。对于“stop on”,我打算让子词函数起作用,这样,除了单词中的大写字母外,点将“stop”或移动到字符,如括号、引号、行的开头和结尾。请注意,对于更复杂的子词模式自定义,您可以定义替代函数以分配给子字向前函数
和子字向后函数
变量。如果您正在考虑更改任意字符的语法,只是为了从子字模式中获得不同的行为,那么您可能会发现基于函数的方法不太像黑客。下面是一个指向线程的链接,其中包含一个示例,您可以修改该示例以适应您喜欢的行为。由于某些主要模式会更改语法表,因此您需要为通常使用的任何模式编写异常: