5

我只是切换到 zsh,现在调整打印一些文本(彩色)以及命令的别名。

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

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

为什么命令在执行它应该做的事情之前打印自己?(我准确地说,在没有任何可疑命令的情况下打印时不会发生这种情况)我是否必须为 zsh 设置一个特定选项,使用带有特殊参数的 echo 来解决这个问题?

4

2 回答 2

11

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

echo $fg[red] `ls`

编辑:好的,所以你的麻烦是在echo. 您有一些有趣的配置给您带来麻烦。

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

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

如果我不得不猜测,我会说你正在使用oh-my-zsh却不知道你打开了什么(这是一个无穷无尽的麻烦来源)。

于 2013-05-15T10:27:22.457 回答
3

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

$ echo $fg_bold[red] test
 test

因为我无法复制它,我敢肯定有一个选项可以阻止它发生在你身上。我不知道那个选项是什么(我正在使用大量修改oh-my-zsh过的 ,但还没有完成学习所有zsh选项的作用或是什么)。

我的建议:

您可以尝试使用print

$ print $fg_bold[red] test
 test

内置的选项比(请参阅参考资料)print多得多。echoman zshbuiltins

您还应该:

  • 检查zsh您使用的版本。
  • setopt检查启用了哪些选项 ( )。
  • 检查您的~/.zshrc(和其他加载的文件)以查看正在运行的选项和功能(如果有)。

这个问题可能会建议检查TERM您正在使用什么,但阅读您的问题听起来好像您只在使用别名时看到这种行为(输入后命令的回显)......?

于 2013-05-15T15:10:25.817 回答