为什么在 python 模式下重新向后搜索会给出不同的结果?

2024-03-11

我已经使用 python 模式很长时间了。我总是使用子字模式。但子字模式在 python 模式下表现得很奇怪。例如,M-b移动。如果有一个名为test_varialbe我将光标放在这个变量的末尾,在 python 模式下M-b将使光标指向t而在其他模式下它将转到v.

所以我查看了 subword-mode 的源码,发现了以下函数:

(defun subword-backward-internal ()
  (if (save-excursion
        (let ((case-fold-search nil))
          (re-search-backward
           (concat
            "\\(\\(\\W\\|[[:lower:][:digit:]]\\)\\([[:upper:]]+\\W*\\)"
            "\\|\\W\\w+\\)")
           nil t)))
      (goto-char
       (cond
        ((and (match-end 3)
              (< 1 (- (match-end 3) (match-beginning 3)))
              (not (eq (point) (match-end 3))))
         (1- (match-end 3)))
        (t
         (1+ (match-beginning 0)))))
    (backward-word 1)))

经过一些测试,我发现re-search-backward在不同的模式下给出不同的结果。如果我eval-expression the (let ...)python模式下的表达式,光标会跳到前面的空格test_varialbe,在其他模式下会跳转到-.

为什么是这样?是什么原因造成的re-search-backward表现不同?


原因是“_”的语法表定义存在差异。

在Python模式下,'_'具有“单词”的语法定义,而在其他情况下,它被定义为“符号”。看着Elisp 手册:语法表 http://www.gnu.org/software/emacs/manual/html_node/elisp/Syntax-Tables.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 python 模式下重新向后搜索会给出不同的结果? 的相关文章

  • 将子目录添加到加载路径

    我希望能够自动加载它们 而不是单独指定插件目录中的每个子目录 为此 我将以下内容包含到我的 emacs 文件中 let base emacs d plugins normal top level add subdirs to load pa
  • emacs 去掉 shell 中的所有 ansi 颜色代码

    我在 OS X 上使用 emacs 24 但遇到了一个奇怪的问题 我看不到任何颜色代码 Emacs 似乎只是忽略它们 我的动机是查看 C 项目的 cmake llvm 和 googletest 框架的彩色输出 我想在编译模式下查看颜色 但是
  • 在 Emacs 中,如何更改迷你缓冲区完成列表窗口?

    我想为迷你缓冲区完成列表设置一个特定的窗口 目前 我有 3 个窗口采用此配置 在这种情况下 我想使用左下窗口作为迷你缓冲区完成列表 目前 它似乎是随机的一个窗口 大多数时候它喜欢使用最右边的窗口 它太薄了 无法在我不必水平滚动的情况下显示完
  • Emacs + 流浪汉 + plink

    我正在尝试让 emacs trapmp 在 Windows XP 下运行 以便在 Amazon EC2 实例上通过 putty plink 工作 用于执行此操作的文档很少 我可以找到部分文档 但没有一个文档能够解决实现此功能所需的所有步骤
  • Emacs 打字骨架对插入也许

    在 Eclipse 中 编辑 Java 代码时 如果我输入一个左括号 我会得到一对括号 如果我然后 输入 第二个括号 它不会插入额外的括号 我如何在 emacs 中得到它 Eclipse 编辑器足够聪明 当我输入闭括号时 它知道我刚刚完成了
  • Emacs:导航目录和打开文件的好策略是什么?

    上周 由于必须应对 R 和 Perl 的不同 IDE 我再次感到愤怒 我不喜欢这两种 IDE 也没有使用它们来真正适应 所以我决定尝试 Emacs 我做出这个决定并非没有一定的恐惧 我的主要用途是使用 cperl 来使用 Perl 以及使用
  • 对齐 emacs lisp 中的正则表达式

    我正在尝试使用以下 elisp 函数来对齐文本 defun align Align lines by interactive align regexp region beginning region end 我正在尝试对齐以下文本 offe
  • 我可以在 Emacs 的 shell 模式下使用 PowerShell 吗?

    我可以在 emacs 的 shell 模式下使用 powershell 作为 shell 吗 How 请参阅 Jeffrey Snover 的博客文章在 Emacs 内运行的 PowerShell http blogs msdn com p
  • 如何找到 emacs 中定义键绑定的位置?

    Somehow shift m是必然的Meta在 emacs 中键入 现在我无法输入任何以M like Mock 我想找出为什么会发生这种情况 或者是哪个包导致了这种情况 有一个问题 https stackoverflow com ques
  • 更改 Common Lisp REPL 中文本的颜色

    我想控制 Common Lisp 中显示的文本的颜色 像这样的伪代码 print color red hello blue world 有什么办法可以做到这一点吗 我使用 SBCL 我的 repl 位于 emacs 内 谢谢 您可以使用AN
  • 为什么 clojure-mode 用一些卷曲的 f 字符替换 fn ?

    我刚刚开始使用 emacs 入门套件和 clojure 模式 现在 当我输入或粘贴 fn 在 Clojure 模式下进入缓冲区 fn 字符在窗口中被替换为稍微卷曲的小写字母 f 缓冲区已正确保存 但这非常烦人 尤其是当我以艰难的方式发现该功
  • 我应该学习使用 Emacs 吗? [复制]

    这个问题在这里已经有答案了 我使用 IntelliJ IDEA 作为代码编辑器 所以这并不是要取代它 我用vi or vim用于在我们的服务器和标准上进行简单的文本编辑unix用于查找文件 获取目录列表等的命令 同事们对 emacs 赞不绝
  • 如何在 Emacs à la Vim 中设置标记?

    I d like to be able to set multiple marks in Emacs like Vim does In Vim you might press m b and that would set a mark at
  • 设置自动完成以处理语义

    我在 Emacs 中的自动完成包方面遇到问题 目前我已经启动并运行了 cedet 并具有适当的自动完成功能 但自动完成包有一些奇怪的行为 它不会使用语义 参议员 的数据库 直到我显式访问包含文件并创建 C u M x bovinate 然后
  • 减少通过管道传输至 Emacs

    当查看 Less 的管道输出时 有时我希望能够在 Emacs 中查看它 以便获得语法突出显示并使用 emacs 命令进行搜索 标记 复制等 我看到 Less 有一个v可用于打开当前查看的文件的命令 EDITOR 不幸的是 这在查看管道输入时
  • cygwin bash 在 emacs shell 中无法正确显示

    我正在尝试使用 emacs 来运行 cygwin 我的环境是Windows 7 x64 emacs 24 0 93 1 cygwin 2 769 系统编码为gbk cygwin的编码系统默认为utf 8 emacs的编码系统默认为gbk I
  • Lisp:CHAR 既未声明也未绑定

    几天前我决定学习 通用 Lisp 我意识到这是一个相当新手的问题 对于至少有一点经验的人来说可能非常微不足道 所以基本上发生的事情是我加载 Emacs Slime 通过 Lisp in a Box 并编写我的程序 包括在下面 defun l
  • 让 Emacs 尊重我的默认 shell + 选项

    我正在尝试让我的 Emacs shell 模仿我的标准终端会话 基本上我希望它尊重相同的路径以及命令提示符 到目前为止我有几个问题 找不到 PATH 下面是我正在使用的修复程序 我尝试过另一个修复 到处都是 ascii 颜色代码 我的 mw
  • 在 Emacs 中追逐标签后切换到原始缓冲区

    I use M 跳转到类 函数的定义 有时有多个类具有相同的标签 所以我需要使用C u M 跳转到多个文件 因此有多个缓冲区 现在我的问题是 如何快速回到原来的缓冲区 我知道C x b 但是您需要输入缓冲区名称 或者它只是默认为您提供您访问
  • 我把 IPython 配置文件放在哪里?

    我已经尝试将 edit 编辑器设置为 Emacs 一段时间了 但进展非常缓慢 IPython 0 13 文档不清楚如何实际配置它 它告诉我通过添加将 EDITOR 设置为所需的编辑器 在我的例子中为 emacsclient c get co

随机推荐