【问题标题】:Emacs recommended use of search-forward-regexp vs re-search-forward?Emacs 推荐使用 search-forward-regexp vs re-search-forward?
【发布时间】:2016-04-22 15:32:32
【问题描述】:

根据this previous SO post,Emacs对于同一个代码函数(re-search-forward)有两个名字(re-search-forward,search-forward-regexp)。

据我所知,Emacs 文档只提到了重新搜索。

是否有我应该使用的首选/推荐表格? (其中一个名称是否已弃用?)我个人认为 search-forward-regexp 信息量更大,因为它在名称中明确明确地包含 -regexp (相对于更短且更不透明的“re-”)。但如果可能的话,我想坚持推荐的做法。

问这个问题的另一种方式是“为什么 emacs 开发人员会在代码中而不是在文档中放置别名 search-forward-regexp?(也许别名表示“更好”的名称,因为也许别名出现在 re 之后- 向前搜索原始?)

【问题讨论】:

  • FWIW,在 Emacs 的源代码中,我统计了 search-forward-regexp 的 114 次使用与 re-search-forward 的 3685 次使用。所以我倾向于将re-search-forward 声明为在源代码中使用的推荐函数。

标签: regex emacs


【解决方案1】:

这完全取决于你想要什么行为,正如你所指的问答所解释的那样。

通过在 Emacs 构建时将 search-forward-regexp 别名为 re-search-forward 的定义,如果用户或库后来更改了 re-search-forward 的定义,那么 search-forward-regexp 将不会自动受到该更改的影响。这使用户可以修改两者之一,而不必修改另一个。 IOW,它为用户提供了更多的灵活性。 (没有什么可以阻止某人以相同的方式修改这两者,甚至将search-forward-regexp 重新别名为符号re-search-forward 或稍后对其的定义。

两者之间没有首选形式。定义别名的代码中的这条注释告诉您两者都没有被弃用:

;; Alternate names for functions - these are not being phased out.
(defalias 'search-forward-regexp (symbol-function 're-search-forward))

您对名称的观察可能是别名背后的原因。两者都已经存在很长时间了——至少可以追溯到 Emacs 20。

【讨论】:

    【解决方案2】:

    我的印象是search-forward-regexp 是用于交互使用的名称,而re-search-forward 通常用于 Elisp 代码。

    我很乐意宣布 search-forward-regexp 已过时,但这是不值得一战的战斗之一。

    【讨论】:

    • 我同意,(交互式)差异是我所能看到的。当然,Search-forward-regexp 可以两种方式使用。但是由于我在几个地方阅读了手册以避免在代码中使用交互式乐趣(例如行首)与(goto-char(point-min)),我认为它是“重要的”(或至少在某些方面有用)为我的代码选择正确的搜索表达式。
    【解决方案3】:

    使用“re-”表示正则表达式对于大多数 Emacs 用户来说是很常见的,但对于初学者来说绝对不能。非程序员。别名更详细,这可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 2011-09-01
      • 1970-01-01
      相关资源
      最近更新 更多