我把它弄乱了grep
,然后放在了我的 .zshenv 中:
export GREP_OPTIONS="--color=auto"
export GREP_COLORS='mt=1;34'
我用头敲打键盘并调换了GREP_COLORS
一会儿,试图弄清楚为什么文件夹颜色正常,而匹配的文本却不正常。
我正在这样做:
$ grep -R -n -i -e "functionFoo\(" --include=*.cs --exclude-dir=Logs *
行号和文件名采用默认颜色设置,但匹配的文本则没有。
花费后太多时间了,我想这样做:
$ grep -R -n -e "functionFoo\(" --include=*.cs --exclude-dir=Logs *
(我删除了该-i
选项。)这就是让匹配的文本正确显示为粗体蓝色所需的全部内容。这是 Vista 上的 Cygwin 设置,其中 rxvt 运行 zsh。
知道为什么 grep colors 会在指定不区分大小写的匹配时中断吗?
更新:在 cygwin 1.7 下,情况会好一些 - 不区分大小写的搜索可以正常工作,但它只会突出显示与表达式完全匹配的单词。换句话说,“FunctionFoo”会突出显示“FunctionFoo”,但不突出显示“functionFoo”,反之亦然。可能是 grep 的问题,所以我会将其提交到该列表。
答案1
这与 Cygwin 无关,但与 grep 有关。您需要在 shell 中设置区域环境变量,例如 LANG。
摘自 grep(1) 手册:
通过按顺序检查三个环境变量 LC_ALL、LC_foo、LANG 来指定类别 LC_foo 的语言环境。设置的第一个变量指定语言环境。例如,如果未设置 LC_ALL,但将 LC_MESSAGES 设置为 pt_BR,则巴西葡萄牙语语言环境将用于 LC_MESSAGES 类别。如果未设置任何环境变量、未安装语言环境目录或未使用国家语言支持 (NLS) 编译 grep,则使用 C 语言环境。
例如尝试:
LANG=en_US.UTF-8 grep -R -n -i -e "functionFoo\(" --include=*.cs --exclude-dir=Logs *
这应该可以解决您的问题,并且对于我来说,GNU grep 2.5.4 和 bash 3.2.48(1)-release 可以正常工作。
答案2
我在使用 Msys MinGW 时遇到了同样的问题。我没有找到解决方法,所以最终使用了:
ack -i PATTERN
其能正确显示颜色和不区分大小写。