2011-10-31 13 views
6

जब मैं एक कमांड के टैब ऑटो-पूर्ण करना शुरू करता हूं, तो यह रखता है कि मैंने जो कुछ भी आंतरिक रूप से टाइप किया है और कमांड अपठनीय हो जाता है। नीचे दिए गए उदाहरण में, मैंने 'गिट चे' टाइप किया और टैब दबाया। एक बार जब मैं 'चेकआउट' चुनता हूं तो कमांड प्रॉम्प्ट 'गिट ची गिट चेकआउट' बन जाता है। आदेश अभी भी काम करता है और मेरे इतिहास में यह 'गिट चेकआउट' स्टोर करता है। लेकिन यह बहुत सुंदर परेशान है। क्या इस व्यवहार को बदलने के लिए वैसे भी है। मैंने इसे 2 अलग टर्मिनल अनुकरणकों में करने की कोशिश की, इसलिए मैं अपने जेडएसएच की पुष्टि कर सकता हूं, न कि एमुलेटर। धन्यवादजेडएसएच ऑटो-पूर्ण स्क्रू अप कमांड नाम

Screenshot

संपादित करें:

गूंज $ ZSH_VERSION
4.3.10

यह zsh -f के साथ होने लगते नहीं करता है। हालांकि यह कहना मुश्किल है कि काम करने वाला एकमात्र स्वतः पूर्ण निर्देशिका है। मैं उपयोग कर रहा हूँ 'ओह-मेरी-zsh' इस कस्टम विषय के साथ:

autoload -U add-zsh-hook 
add-zsh-hook chpwd do_ls_on_chdir 

function do_ls_on_chdir() { 
    ls; 
} 

function dirStack(){ 
OUT=''; 
NUM=1; 
for X in $(dirs | cut -d ' ' -f2-10); do 
    OUT="$OUT$1%B$NUM:%b$1$X "; 
    ((NUM=NUM+1)) 
done 
echo $OUT; 

}

ZSH_THEME_GIT_PROMPT_ADDED="" 
ZSH_THEME_GIT_PROMPT_MODIFIED="" 
ZSH_THEME_GIT_PROMPT_DELETED="" 
ZSH_THEME_GIT_PROMPT_RENAMED="" 
ZSH_THEME_GIT_PROMPT_UNMERGED="" 
ZSH_THEME_GIT_PROMPT_UNTRACKED="" 

ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg_bold[yellow]%}↑" 
ZSH_THEME_GIT_PROMPT_PREFIX="" 
ZSH_THEME_GIT_PROMPT_SUFFIX="" 
ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg_bold[red]%}✗" 
ZSH_THEME_GIT_PROMPT_CLEAN=" %{$fg_bold[green]%}✔" 

local user_color='blue' 
local back="${BG[237]}" 
test $UID -eq 0 && user_color='red' 

PROMPT='$(dirStack $back) 
$back%B%!%b$back %{$fg_bold[$user_color]%}%~%{$reset_color%}'\ 
'$back $(git_prompt_status)%{$reset_color%}'\ 
'$back%{$fg_bold[magenta]%}$(git_prompt_info)%{$reset_color%}'\ 
'$back$(git_prompt_ahead)$reset_color'\ 
'$back%(!.#.>)$reset_color ' 

PROMPT2='%{$fg[red]%}%_ %{$reset_color%}' 
PROMPT3='%{$fg[red]%}... %{$reset_color%}' 
RPROMPT='%(?..%{$fg_bold[red]%}exit %?%{$reset_color%})'\ 
' %{$FG[186]%}(%D %*)%{$reset_color%}' 

समाधान:

नोट: stackoverflow अभ्यस्त मुझे मेरे ही सवाल का जवाब के बाद से मैंने पूछा जाने यह पिछले 8 घंटों के भीतर है। मुझे इंतजार करना पसंद नहीं है।

तो मैंने इसे समझ लिया। यह पता चला कि मैं एएनएसआई रंग कोड (मुझे लगता है) से ठीक से भाग नहीं रहा था। मेरे प्रोपेट चर में हर जगह $ reset_color था, मैंने इसे% {$ reset_color%} में बदल दिया और इसे ठीक कर दिया।

+0

आपका zsh संस्करण क्या है ('$ ZSH_VERSION' गूंजें)? यदि आप 'zsh -f' चलाते हैं तो क्या आप वही प्रभाव देखते हैं? यदि नहीं, तो अपनी zsh कॉन्फ़िगरेशन फ़ाइलों ('~/.zshrc' और किसी भी अन्य जिसे आपने अनुकूलित किया है) की सामग्री पोस्ट करें। – Gilles

उत्तर

6

तो मैंने इसे समझ लिया। यह पता चला कि मैं एएनएसआई रंग कोड (मुझे लगता है) से ठीक से भाग नहीं रहा था। मेरे प्रोपेट चर में हर जगह $ reset_color था, मैंने इसे% {$ reset_color%} में बदल दिया और इसे ठीक कर दिया।

मैं केवल this link आज रात की खोज की, मेरी शीघ्र साथ खिलवाड़ के बाद - मैं हमेशा सोचा था क्यों ZSH शीघ्र उदाहरण तो बेकार में जटिल लग रहा था।

जब आप अपने zsh प्रॉम्प्ट में रंग सेट करते हैं, तो आपको %{ [...] %} के साथ चीजों से बचना चाहिए, ताकि 'खोल जानता है कि इन अनुक्रमों से कोई आउटपुट नहीं है और कर्सर नहीं चला है'।

यदि आप नहीं बचते हैं, तो खोल का मानना ​​है कि आपका कर्सर स्थानांतरित हो गया है (भले ही यह नहीं है)। इस में गड़बड़ संकेतों का है, और बजाय कष्टप्रद दृश्य प्रभाव की ओर जाता है जब आप टैब-पूरा होने आदि

का उपयोग यहाँ कुछ स्क्रीनशॉट reset-color शीघ्र अनुक्रम (PR_NO_COLOUR="%{$terminfo[sgr0]%}", मेरे शीघ्र सेटिंग्स में) से बचने के बिना है।हम देख सकते हैं, कर्सर गलत जगह में शुरू होता है:

Cursor starts in the wrong place

यह यहाँ होना चाहिए:

Correctly-placed cursor

और भागने के बिना टैब-पूरा होने के प्रयास करने के बाद, शीघ्र सब उलझन में है जहां पाठ है, और जहां कर्सर रखा जाना चाहिए के बारे में:

Cursor is in the middle of the word

(कर्सर को निर्देशिका के अंत में रखा जाना चाहिए, आधे रास्ते से नहीं)।

तो शीघ्र दृश्यों इस तरह दिखेगा:

PS1="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% " 

%{...%} जोड़े के अंदर अच्छी तरह से भाग निकले किए जाने की वजह से सब कुछ किया है।

संबंधित मुद्दे