Zsh问题时,使用回声与颜色/格式字符



我只是切换到zsh,现在适应别名,其中打印一些文本(彩色)随着一个命令。

我一直在尝试使用$fg数组var,但是有一个副作用,所有的命令在执行之前被打印。
如果我只是在终端中测试一个带有颜色代码的echo,也会发生同样的情况:

echo $fg_bold[blue] "test"
]2;echo "test"  test     #the test is in the right color

为什么命令在做它应该做的事情之前打印自己?(我确定这不会发生在没有任何变量命令的情况下打印)我是否需要为zsh设置一个特定的选项,使用带有特殊参数的echo来获取它?

首先执行命令(将其输出保存在某处),然后发出echo。我能想到的最简单的方法是:

echo $fg[red] `ls`

编辑:好的,所以你的问题是在echo实际输出之前的一些垃圾。你有一些奇怪的配置给你带来了麻烦。

该怎么做(除了检查你的配置):

  • zsh -f启动shell(它将跳过任何配置),然后重新尝试echo命令:autoload colors; colors; echo $fg_bold[red] foo(这应该表明问题在您的配置中)。
  • 很可能您的配置定义了一个precmd函数,该函数在每个命令之前执行(以某种方式失败)。试试which precmd。如果没有定义,试试echo $precmd_functions (precmd_functions是一个函数数组,在每个命令之前执行)。知道正在执行的代码将帮助您在配置中搜索它(我假设您只是从其他人那里获取)。

如果要我猜的话,我会说您正在使用oh-my-zsh而不知道您打开了什么(这是像这样的麻烦的无尽来源)。

我不复制你的问题,我认为这表明它要么是一个选项(我已经设置),要么是zsh版本问题:

$ echo $fg_bold[red] test
 test

因为我不能复制它,我肯定有一个选项来阻止它的发生。我不知道这个选项是什么(我正在使用经过大量修改的oh-my-zsh,并且仍然没有完成所有zsh选项的学习)。

我的建议:

你可以尝试使用print:

$ print $fg_bold[red] test
 test

print内置比echo有更多的选项(参见man zshbuiltins)。

你还应该:

  • 检查您使用的zsh版本。
  • 检查哪些选项(setopt)是启用的。
  • 检查你的~/.zshrc(和其他加载的文件),看看什么,如果有的话,选项和函数正在运行。

这个问题可能建议检查你正在使用的TERM,但是阅读你的问题听起来像你只看到这种行为(输入后命令的回声)当你使用别名…?

最新更新