2013-05-15 29 views
1

我只是切換到zsh,現在將適合打印某些文本(彩色)的別名與命令一起使用。Zsh在使用顏色/格式化字符回顯時遇到問題

我一直在嘗試使用數組var,但是有一個副作用,所有的命令在執行前都會打印出來。
同樣會發生,如果我只是在終端測試回聲顏色代碼:

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

爲什麼做它應該做的前命令打印本身? (我確切地說,這種情況在打印出沒有任何可糾正的命令時不會發生) 我是否需要爲zsh設置一個特定的選項,使用帶有特殊參數的echo來獲取該選項?

回答

5

首先執行命令(保持其輸出某處),然後發出echo。我能想到這樣做將是最簡單的方法:

echo $fg[red] `ls` 

編輯:好了,你的麻煩是echo實際輸出之前的一些垃圾。你有一些有趣的配置會導致你的麻煩。

做什麼(除了檢查您的配置):

  • 開始zsh -f一個殼(它會跳過任何配置),然後重新嘗試echo命令:autoload colors; colors; echo $fg_bold[red] foo(這應該告訴你,問題出在您的配置中)。
  • 很可能你的配置定義了一個precmd函數,它在每個命令(它以某種方式失敗)之前被執行。試試which precmd。如果未定義,請嘗試echo $precmd_functionsprecmd_functions是在每個命令之前執行的一組函數)。知道正在執行的代碼將幫助你在你的配置中搜索它(我假設你只是從別人那裏拿走它)。

如果我猜的話,我會說你正在使用哦,我-的zsh不知道是你轉身就什麼(這是這樣的煩惱無盡的來源)。

+0

也許不夠明確。問題是commandecho會打印'] 2;回顯'bedore打印剩下的東西。將編輯我的問題 – AdrieanKhisbe

+0

問題來自oh-my-zsh函數標題,它應該用runned命令更新終端的標題,命令標題鉤爲函數omz_termsupport_preexec 要修復它,我必須在zshrc文件中設置 > DISABLE_AUTO_TITLE =「true」 set -x對我來說非常有用,用於調試和查找來自哪裏 – AdrieanKhisbe

2

我不復制您的問題,我認爲這表明它要麼一個選項(我已經設置),或者它是一個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(和other loaded files)以查看正在運行的選項和功能(如果有的話)。

This question可以建議檢查你使用的TERM,但閱讀你的問題聽起來好像你當你使用別名會看到只有這種行爲(WTO後的命令呼應)...?

+0

使用打印不會改變它。我試過沒有init的文件,並且工作完美,所以它必須來自我所做的配置。 (我使用了oh-my-zsh,並修改了以前的bash配置)。 我會稍後挖掘它,而不是現在的優先權。我會告訴我當時發現的。 – AdrieanKhisbe