在Emacs中递归识别长度超过80个字符的行

4

因为代码文件中不宜存在超过80个字符的行, 所以如何使用Emacs递归识别现有项目中的这些行是最有效的方式?

更新:

使用Trey的建议,我当前正在使用以下代码:

(defun find-long-lines (base-dir)
  "Recursively look for lines longer than 80 characters files"
  (interactive "DPath:")
  (grep-compute-defaults)
  (rgrep "^................................................................................." "*" base-dir))

这与whitespace-mode结合使用效果很好。


不是完整的解决方案,但是 occur 函数期望一个正则表达式,所以你可以使用 occur 来识别长度超过 80 个字符的行,它们将被显示在一个漂亮的缓冲区中,在那里你可以点击它们,Emacs 将自动跳转到相应的行。 - phimuemue
2个回答

4

我无法提供与EMACS相关的具体解决方案,但是您可以略微更改命令以包含文件名(并且输入更少)。

rgrep "^.\{81\}" . -n (include line numbers)


rgrep "^.\{81\}" . -c (summary view per file)

交互式rgrep提示不需要引号。

rgrep RET ^.{81} RET 文件类型 RET 路径


3
您可以使用igrep-find并使用正则表达式匹配81(+)个字符,如下所示:
M-x igrep-find ^.................................................................................. RET /path/to/area/to/search/* RET

在编译模式下,您会得到一个缓冲区,可以通过鼠标点击或 C-x `M-x next-error 轻松跳转到每个有问题的行。
或者,您可以使用内置的 M-x grep-find 命令,并使用同样的正则表达式。
要输入 81 个 .,请键入 C-u 81 .
如果您想将所有内容包含在单个命令中(提示您输入文件路径),则可以使用以下命令:
(defun find-lines-longer-than-80 (files)
  "Recursively look for lines longer than 80 characters files"
  (interactive (list (igrep-read-files)))
  (igrep igrep-program "^................................................................................." files igrep-options))

Emacs Wiki上提供了一些其他关于查找长行的技巧,包括在访问文件时突出显示超过80个字符的行的几个选项。


要输入81个点,您可以键入ESC 8 1 .C-u 8 1 . - Gilles 'SO- stop being evil'
@Giles 我应该提到,这正是我所做的。 - Trey Jackson
谢谢您。我正在使用whitespace-mode来处理当前缓冲区,它的效果非常好。您的解决方案是否会递归地遍历所有子文件夹呢? - Roberto Aloi
我已经更新了我的问题。那段代码似乎运行良好。非常感谢您的建议。 - Roberto Aloi
@RobertoAloi 这个解决方案确实会遍历所有子文件夹(这就是 igrep-findgrep-find-find 的作用)。如果你只想搜索单个文件夹,可以使用 igrepgrep 命令。 - Trey Jackson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接