【问题标题】:Change styling of If Statements in Emacs?更改 Emacs 中 If 语句的样式?
【发布时间】:2026-01-28 13:05:01
【问题描述】:

我的公司最近添加了一些新的代码样式规则,我想知道是否有一种简单的方法可以通过 emacs 来更改一些带有正则表达式替换的东西。

if 语句现在必须如下所示:

if (expression) {

我有很多这样的地方:

if(expression){   

缺少空格。有没有简单的方法来解决这个问题?

【问题讨论】:

标签: regex emacs


【解决方案1】:

如果expression 始终在一行,您也许可以用正则表达式替换它,但为了安全起见,我会使用一次性函数:

(defun my-fix-style ()
  (interactive)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward "\\_<if(" nil t)
      (backward-char)
      (insert " ")
      (forward-sexp)
      (unless (looking-at "[ \t\n]")
        (insert " ")))))

【讨论】:

  • 这不是万无一失的,但它会在大多数情况下工作。您也可以考虑只使用query-replace-regexp
  • 是的,这取决于编写了什么样的代码。考虑一下:if(something_is_true()){ something_else(); }(应该在一行上)由于正则表达式无法计算括号,你如何得到那个正确的?当然这是病态的,但这就是我使用函数的原因。
【解决方案2】:

只是我的两分钱,但如果我打算用 emacs 来做这件事,我可能会避免使用正则表达式并分两部分处理它。首先,我会通过执行 Meta-% "if(" "if (" 进行搜索以将 if( 替换为 if ( 引号仅用于描述,它们不属于输入的文本。然后要么回答每个单独的替换查询,或者给它一个“!”来告诉它进行所有替换。对关闭的){) { 重复该过程。

在我的脑海中,我希望第一个替代品可以毫无问题地工作。第二个也将在循环中获得“){”组合,但如果您的新标准要求为 if 语句提供空间,我希望它也可以为循环这样做,所以这似乎应该是一件好事。

【讨论】: