personalizar manjaro change shell autocomplete zsh zshrc

shell - manjaro - ZSH autocompleta el nombre del comando



zsh themes linux (1)

Cuando comienzo a hacer la tabulación automática de un comando, guarda lo que escribí inicialmente 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. Gracias

Captura de pantalla

EDITAR:

echo $ ZSH_VERSION
4.3.10

No parece suceder con zsh -f. 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 mi propia pregunta, ya que la pregunté en 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.


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.

Solo descubrí este enlace esta noche, después de jugar con mi mensaje; siempre me he preguntado por qué los ejemplos de ZSH parecen tan innecesariamente complejos.

Cuando configure los colores en su solicitud de zsh , debe escapar de las cosas con %{ [...] %} , de modo que "el shell sepa que no hay salida de estas secuencias y el cursor no se haya movido".

Si no escapa de esto, el shell cree que su cursor se ha movido (aunque no lo haya hecho). Esto conduce a mensajes desordenados, y efectos visuales bastante molestos cuando usas tab-completion, etc.

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

Debería estar aquí:

Y después de intentar completar las pestañas sin escaparse, el mensaje se confunde sobre dónde está el texto y dónde debe colocarse el cursor:

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

Entonces, las secuencias rápidas se ven así:

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

porque todo tiene que escaparse bien dentro de %{...%} pares.