Reavaliar a expressão de aviso toda vez que um prompt for exibido em zsh

3

Estou ajustando meu prompt do zsh, com base no dallas tema e o tema dstufft de oh-my-zsh . Eu amo como Dallas tem várias seções do prompt contidas em variáveis, o que torna muito mais fácil entender o que está acontecendo.

O problema é que essas strings são avaliadas uma vez para expansão. Portanto, quando tento usar algo dinâmico, como ${PWD/#$HOME/~} of dstufft, ele não é mais atualizado dinamicamente.

Como posso obter o melhor dos dois mundos? Eu gostaria que o prompt fosse dividido em subseções que são avaliadas toda vez que o prompt for escrito.

    
por Spencer Rathbun 12.06.2012 / 15:08

4 respostas

7

Verifique se a opção prompt_subst está ativada. Se necessário, adicione a seguinte linha ao seu ~/.zshrc :

setopt prompt_subst

Isso diz ao zsh para reavaliar a string de prompt sempre que estiver exibindo um prompt. Em seguida, verifique se você está atribuindo PS1 (ou alguma outra variável usada pelo tema de prompts) conforme desejado:

PS1='${PWD/#$HOME/~}'

As aspas simples protegem os caracteres especiais, como $ , de serem avaliados quando você define a variável.

    
por 13.06.2012 / 00:24
1

Em zsh, precmd pode fazer qualquer coisa (como definir uma variável) antes de cada prompt:

function precmd() {
    current_git_branch='git rev-parse --abbrev-ref HEAD'
}

link

Isso não é necessário para o diretório atual, como na pergunta original, mas pode ser útil para pessoas que encontrarem essa pergunta em outros casos.

(precmd é somente zsh - no bash, há $PROMPT_COMMAND .)

    
por 13.04.2017 / 19:56
0

Ok,

Eu só preciso escapar dos meus sinais $ . Por exemplo:

${PWD/#$HOME/~}
\${PWD/#\$HOME/~}
    
por 12.06.2012 / 19:40
0

No zsh, você deve usar % escapes para isso. Por exemplo, em vez de ${PWD/#$HOME/~} (como seu exemplo), use apenas %~ .

Leia zshall(1) e procure por SIMPLES PROMPT ESCAPES (é muito longo para citar aqui).

    
por 12.06.2012 / 19:52