2011-10-31 10 views
6

Cuando comienzo a hacer la pestaña autocompletar de un comando, guarda lo que inicialmente escribí junto a él y el comando no se puede leer. En el siguiente ejemplo, escribí 'git che' y presioné la pestaña. Una vez que selecciono 'pagar', el símbolo del sistema se convierte en 'git che git checkout'. El comando todavía funciona y en mi historial almacena 'git checkout'. Pero es bastante molesto visualmente. ¿Hay alguna forma de cambiar este comportamiento? Intenté esto en 2 emuladores de terminal diferentes, así que puedo confirmar su ZSH y no el emulador. GraciasZSH autocompletar tornillos nombre de comando

Screenshot

EDIT:

echo $ ZSH_VERSION
4.3.10

Eso no parece suceder con -f zsh. Aunque es difícil de decir ya que el único autocompletado que funciona es directorios. Estoy usando 'oh-my-zsh' con este tema personalizado:

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

SOLUCIÓN:

NOTA: stackoverflow no me deja responder a mi propia pregunta desde que pedí dentro de las últimas 8 horas. No tengo ganas de esperar.

Así que lo descubrí. Resulta que no estaba escapando correctamente los códigos de color ANSI (creo). En todas partes tenía $ reset_color en mi variable PROMPT, lo cambié a% {$ reset_color%} y lo arreglaba.

+0

¿Cuál es su versión de zsh ('echo $ ZSH_VERSION')? ¿Ves el mismo efecto si ejecutas 'zsh -f'? De lo contrario, publique los contenidos de sus archivos de configuración zsh ('~/.zshrc' y cualquier otro que haya personalizado). – Gilles

Respuesta

6

Así que lo descubrí. Resulta que no estaba escapando correctamente los códigos de color ANSI (creo). En todas partes tenía $ reset_color en mi variable PROMPT, lo cambié a% {$ reset_color%} y lo arreglaba.

sólo descubrieron this link esta noche, después de jugar con mi pronta - Siempre me había preguntado por qué los ejemplos rápidos Zsh parecían tan innecesariamente compleja.

Cuando configura los colores en su aviso zsh, debe escapar de las cosas con %{ [...] %}, de modo que 'el shell sabe que no hay salida de estas secuencias y el cursor no se ha movido'.

Si no escape esto, el shell cree que su cursor se ha movido (aunque no lo haya hecho). Esto lleva a mal estado, indicaciones y efectos visuales bastante molesto cuando se utiliza para rellenar la ficha etc.

Aquí hay algunas capturas de pantalla sin escapar de la secuencia de mensajes reset-color (PR_NO_COLOUR="%{$terminfo[sgr0]%}", en mis configuración de solicitud).Como podemos ver, el cursor se inicia en el lugar equivocado:

Cursor starts in the wrong place

Debe quedar aquí:

Correctly-placed cursor

y después de probar para rellenar la ficha sin escapar, el símbolo es todo confuso acerca de dónde está el texto, y donde el cursor se debe colocar:

Cursor is in the middle of the word

(El cursor debe colocarse al final del directorio, no a la mitad).

Así las secuencias rápidas tener este aspecto:

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

porque todo tiene que estar muy bien dentro escapado %{...%} pares.

Cuestiones relacionadas