忽略Silversearcher中的长行

21

现在我正在使用:

 ag sessions --color|cut -b1-130

但如果搜索匹配项被cut命令切断,这将会导致颜色伪影。

Silversearcher 在文档中有这个内容:

   --print-long-lines
          Print matches on very long lines (> 2k characters by default).
我可以将2k替换成其他的吗?(对我而言是120,因为老实说,我所处理的代码中从来没有长度超过这个值。)

我能否更改 2k 为其他内容? (对我来说是120,因为老实说,在我处理的任何代码中,其真实的长度都不会超过这个值。)

3个回答

29

4
Ubuntu的ag版本(0.31.0)尚不支持此功能。 - exebook
3
“--width”现在已经在Ubuntu版本的ag中得到了记录和支持。 - Gavin Uberti
在我的Ubuntu 18.04中,ag v 2.1.0,-W | --width都可以使用,但没有列在man页面中...哈哈。谢谢。 - Aaron Wallentine

2
我可以想到三个选项:
  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}).*$/\1/"

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

这个最后的选项并不能防止在颜色转义序列中间分割的可能性;如果你真的很执着,可以修改sed搜索模式以忽略颜色转义序列 - 这已经在SO上回答过了。尽管如此,鉴于上述选项1的易用性和正确性,我不认为这样做有意义。

“-o”参数是我在谷歌上提问后真正需要的。 - Sergei Voronezhskii

1
ag --width 400 string dir/

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

忽略长度超过400个字符的行。


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