忽略 silversearcher 中的长行

Ignore long lines in silversearcher

现在我正在使用:

 ag sessions --color|cut -b1-130

但是如果搜索匹配被 cut 命令剪切,这将导致颜色伪像。

Silversearcher 在文档中有这个:

   --print-long-lines
          Print matches on very long lines (> 2k characters by default).

我可以将 2k 更改为其他内容吗? (对我来说是 120,因为老实说,在我使用的任何代码中,真正的代码都不会比这长)。

我能想到三个选项:

  1. 只打印搜索结果而不是整行,使用 -o 选项:ag --color -o

  2. 使用 less 而不是 cut,它使用 -S 选项(切长行)和 -R 选项(处理颜色转义序列)在屏幕尺寸的宽度上很好地切长行: ag --color <pattern> | less -R -S

  3. 使用 sed 或 awk 之类的东西代替 cut:ag --color <pattern> |sed -E "s/(.{$COLUMNS}).*$//"

这将在您的屏幕尺寸限制处剪切返回的行。当然,如果你决心砍掉 120 列,你可以:ag --color <pattern> |sed -E "s/(.{120}).*$//"

这最后一个选项不会阻止在颜色转义序列的中间进行斩波的可能性;如果你真的很顽固,你可以修改 sed 搜索模式来忽略颜色转义序列——已经在 SO 上回答了。也就是说,考虑到上面选项 1 的简单性和正确性,我看不到这样做的目的。

非常奇怪,记录的 --print-long-lines 实际上什么也没做,但是有一个工作开关: -W NUM / --width NUM 根本没有记录。参见 https://github.com/ggreer/the_silver_searcher/pull/720

ag --width 400 string dir/

# In .bash_aliases (s is for short)
alias ags='ag --width 400'

忽略超过 400 个字符的行。