Emacs web模式选择字分隔符包括_

Emacs web模式选择字分隔符包括_,emacs,selection,delimiter,Emacs,Selection,Delimiter,我不确定如何恰当地描述这个问题,但下面是: 在emacs中,我双击来选择一个单词,一些东西决定了要选择哪些字符——这叫什么?(在终端配置文件首选项中,这称为按单词字符选择,因此我将使用该短语。) 例如,在没有web模式的情况下,如果我双击image\u title中的单词title,它将只突出显示title——也就是说,下划线被识别为按单词选择的分隔符 启用web模式后,按单词选择的行为将发生变化,下划线不再是单词分隔符。在上一个示例中,双击现在高亮显示整个图像\u标题。这让我很恼火,因为我通常

我不确定如何恰当地描述这个问题,但下面是:

在emacs中,我双击来选择一个单词,一些东西决定了要选择哪些字符——这叫什么?(在终端配置文件首选项中,这称为按单词字符选择,因此我将使用该短语。)

例如,在没有web模式的情况下,如果我双击
image\u title
中的单词
title
,它将只突出显示
title
——也就是说,下划线被识别为按单词选择的分隔符

启用web模式后,按单词选择的行为将发生变化,下划线不再是单词分隔符。在上一个示例中,双击现在高亮显示整个
图像\u标题
。这让我很恼火,因为我通常想要选择下划线分隔标识符的部分。(通常,我希望任何模式都不更改默认选择行为。)

更改web模式的这种行为的选项是什么


编辑以添加:在我的首选模式下,如果我双击
\u
字符,它会选择整个单词,包括下划线。我喜欢这种微妙但精确的选择行为控制。

@lawlist-谢谢你的建议!我无法完全遵循这些函数,但它确实引导我走上了正确的道路:

  • 找到
    双鼠标-1
    ,搜索谷歌
  • 找到了使用全局函数的
  • 该页面提到了
    语法表
    ,您提到了
    语法表
    ,我们这里有什么web-mode.el包含一个
    语法表
    (以及对的引用)
web模式的语法表大约包含v 11.2.2中的第1969行:

(defvar web-mode-syntax-table
  (let ((table (make-syntax-table)))
    (modify-syntax-entry ?_ "w" table)
    (modify-syntax-entry ?< "." table)
    (modify-syntax-entry ?> "." table)
    (modify-syntax-entry ?& "." table)
    (modify-syntax-entry ?/ "." table)
    (modify-syntax-entry ?= "." table)
    (modify-syntax-entry ?% "." table)
    table)
  "Syntax table used to reveal whitespaces.")
(defvar web模式语法表
(let((表(生成语法表)))
(修改语法条目?uw“表)
(修改语法条目?<“”表)
(修改语法条目?>“”表)
(修改语法条目?&“.”表)
(修改语法条目?/“”表)
(修改语法条目?=“”表)
(修改语法条目?%“”表)
表1)
“用于显示空白的语法表。”)
我假设
?u“w”
表示它将
u
视为一个单词字符。我将
“w”
改为
”,下划线现在被视为我想要的单词边界

堆栈溢出、谷歌和github万岁


另外,现在我已经有了一些正确的关键字,Stack Overflow建议了一个可能有用的相关答案:

@lawlist-谢谢你的建议!我无法完全遵循这些函数,但它确实引导我走上了正确的道路:

  • 找到
    双鼠标-1
    ,搜索谷歌
  • 找到了使用全局函数的
  • 该页面提到了
    语法表
    ,您提到了
    语法表
    ,我们这里有什么web-mode.el包含一个
    语法表
    (以及对的引用)
web模式的语法表大约包含v 11.2.2中的第1969行:

(defvar web-mode-syntax-table
  (let ((table (make-syntax-table)))
    (modify-syntax-entry ?_ "w" table)
    (modify-syntax-entry ?< "." table)
    (modify-syntax-entry ?> "." table)
    (modify-syntax-entry ?& "." table)
    (modify-syntax-entry ?/ "." table)
    (modify-syntax-entry ?= "." table)
    (modify-syntax-entry ?% "." table)
    table)
  "Syntax table used to reveal whitespaces.")
(defvar web模式语法表
(let((表(生成语法表)))
(修改语法条目?uw“表)
(修改语法条目?<“”表)
(修改语法条目?>“”表)
(修改语法条目?&“.”表)
(修改语法条目?/“”表)
(修改语法条目?=“”表)
(修改语法条目?%“”表)
表1)
“用于显示空白的语法表。”)
我假设
?u“w”
表示它将
u
视为一个单词字符。我将
“w”
改为
”,下划线现在被视为我想要的单词边界

堆栈溢出、谷歌和github万岁


另外,现在我有了一些正确的关键字,Stack Overflow建议了一个可能有用的相关答案:

发布这个问题的潜在答案的问题是,Emacs开发人员一直在不同版本和未来版本之间更改
mouse.el
中函数的内部工作方式。您的Emacs版本可能与其他人使用的版本不同。您需要做的是按
C-hk
,然后左键单击以查看调用的两个函数。然后,您需要
M-x find function
跟踪跟踪到负责选择区域的函数。一旦你这么做了,您需要使用自定义语法表创建一个新函数--
with syntax table
。您需要使用
with syntax table
,因为您不想更改当前缓冲区中主模式使用的
语法表
——您只需要在缓冲区的select region组件期间使用一个临时语法表有争议的职能。例如,您可以复制
文本模式所使用的语法表
,或者简单地创建和定义自己的语法表。一旦找到了有问题的函数,您就可以用使用临时语法表的建议将其包装起来——大多数Emacs用户将源代码视为神圣的,他们更愿意使用建议而不是创建新函数。:)发布此问题的潜在答案的问题是,Emacs开发人员一直在更改不同版本和未来版本之间
mouse.el
中函数的内部工作方式。您的Emacs版本可能与其他人使用的版本不同。您需要做的是按
C-hk
,然后左键单击以查看调用的两个函数。然后,您需要
M-x find function
跟踪跟踪到负责选择区域的函数。一旦您这样做了,您需要使用自定义语法表创建一个新函数--
with syntax table
。您需要使用
with syntax table
,因为您不想更改当前缓冲区中主模式使用的
语法表
,您只需要一个te