我正在查看一个非常大的流体动力学代码,c
其中通常有一些非常糟糕的变量选择。包括一个名为“g”的全局变量。类似地,有一个文件包含一个名为“geom”的变量和许多包含子字符串“geom”的其他变量(例如geometry、geomAL、geom_arb 等)。
有没有办法搜索与正则表达式完全匹配的变量,而不是部分匹配?
例如:搜索“geom”与“geomAL”不匹配。显然emacs不知道变量从哪里开始或结束,但这可以构造为 c 模式的函数吗?
Emacs 正则表达式引擎 ( C-M-s <regexp>
) 为这类事情提供了各种操作数,例如单词边界\<
和\>
零宽度断言。所以\<geom\>
会单独匹配geom
并且(取决于你的模式的语法表)也许还有geom_something
. \<geom\>[^_]
如果您需要排除下划线后缀,请尝试。
您可以使用C-u C-s \_<g\_>
which 将使用带有符号边界标记的正则表达式搜索来搜索符号。 g
或者在最近足够多的 Emacs 中,您可以M-s _ g
执行基本相同的操作(M-s
是其中的“搜索前缀键” M-s _
)isearch-forward-symbol
。
你试过 Emacs TAGS 系统吗?它应该能够解析出变量,并且可以提供精确的查找。见这里:http ://www.emacswiki.org/emacs/EmacsTags
使用 etags 帮助器生成标签表:
etags *.c
寻找一个标签
M-. your-var-name
如果您想使用 emacs 正则表达式,http: //www.emacswiki.org/emacs/RegularExpression 几乎可以满足您的一切需求。