19

现在我正在使用:

 ag sessions --color|cut -b1-130

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

Silversearcher 在文档中有这个:

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

我可以把2k换成别的吗?(对我来说是 120,因为老实说,我使用的任何代码中的真实代码都不会比这更长)。

4

3 回答 3

23

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

于 2017-04-12T20:53:30.720 回答
1
ag --width 400 string dir/

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

忽略超过 400 个字符的行。

于 2020-09-15T09:29:07.753 回答
1

我可以想到三个选项:

  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 的简单性和正确性,我看不出这样做的目的。

于 2017-01-10T19:40:06.017 回答