2011-10-31 24 views
6

Khi tôi bắt đầu thực hiện tự động hoàn thành tab của lệnh, nó giữ những gì tôi bắt đầu gõ bên cạnh nó và lệnh trở nên không thể đọc được. Trong ví dụ dưới đây, tôi gõ 'git che' và nhấn tab. Khi tôi chọn 'checkout', dấu nhắc lệnh sẽ trở thành 'git che git checkout'. Lệnh này vẫn hoạt động và trong lịch sử của tôi nó lưu trữ 'git checkout'. Nhưng nó khá khó chịu trực quan. Có cách nào để thay đổi hành vi này không. Tôi đã thử điều này trong 2 giả lập thiết bị đầu cuối khác nhau, vì vậy tôi có thể xác nhận ZSH của nó và không phải trình mô phỏng. Cảm ơnZSH tự động hoàn thành các ốc vít lên tên lệnh

Screenshot

EDIT:

echo $ ZSH_VERSION
4.3.10

Nó không có vẻ xảy ra với zsh -f. Mặc dù khó có thể nói được vì tính năng tự động hoàn thành duy nhất hoạt động là các thư mục. Tôi đang sử dụng 'oh-my-zsh' với chủ đề tùy chỉnh này:

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%}' 

SOLUTION:

LƯU Ý: stackoverflow wont cho tôi trả lời câu hỏi của riêng tôi kể từ khi tôi hỏi nó trong vòng 8 giờ qua. Tôi không cảm thấy muốn chờ đợi.

Vì vậy, tôi đã tìm ra. Nó chỉ ra tôi đã không đúng cách thoát khỏi các mã màu ANSI (tôi nghĩ). Ở khắp mọi nơi tôi đã có $ reset_color trong biến PROMPT của tôi, tôi đã thay đổi thành% {$ reset_color%} và nó đã sửa nó.

+0

Phiên bản zsh của bạn ('echo $ ZSH_VERSION') là gì? Bạn có thấy hiệu ứng tương tự nếu bạn chạy 'zsh -f'? Nếu không, hãy đăng nội dung của tệp cấu hình zsh của bạn ('~/.zshrc' và bất kỳ tệp nào khác mà bạn đã tùy chỉnh). – Gilles

Trả lời

6

Vì vậy, tôi đã tìm ra. Nó chỉ ra tôi đã không đúng cách thoát khỏi các mã màu ANSI (tôi nghĩ). Ở khắp mọi nơi tôi đã có $ reset_color trong biến PROMPT của tôi, tôi đã thay đổi thành% {$ reset_color%} và nó đã sửa nó.

tôi chỉ phát hiện this link tối nay, sau khi rối tung với dấu nhắc của tôi - Tôi luôn tự hỏi tại sao các ví dụ nhắc ZSH có vẻ rất phức tạp vô.

Khi bạn thiết lập các màu trong lời nhắc zsh, bạn nên thoát khỏi mọi thứ với %{ [...] %}, để vỏ biết không có đầu ra nào từ các chuỗi này và con trỏ không di chuyển '.

Nếu bạn không thoát khỏi điều này, vỏ tin rằng con trỏ của bạn đã di chuyển (mặc dù nó không có). Điều này dẫn đến sai lầm nhắc nhở, và các hiệu ứng thị giác khá khó chịu khi bạn sử dụng tab động hoàn thành, vv

Dưới đây là một số ảnh chụp màn hình mà không cần thoát khỏi reset-color chuỗi prompt (PR_NO_COLOUR="%{$terminfo[sgr0]%}", trong cài đặt nhanh chóng của tôi).Như chúng ta có thể thấy, con trỏ bắt đầu ở vị trí sai:

Cursor starts in the wrong place

Nó phải ở đây:

Correctly-placed cursor

Và sau khi thử tab hoàn thành mà không cần thoát ra, dấu nhắc là tất cả bối rối về vị trí của văn bản và nơi đặt con trỏ:

Cursor is in the middle of the word

(Con trỏ sẽ được đặt ở cuối thư mục, không nửa chừng).

Vì vậy, các chuỗi cửa sổ trông như thế này:

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

vì tất cả mọi thứ đã được thoát độc đáo bên trong %{...%} cặp.

Các vấn đề liên quan