Mostra a versão atual do Ruby e o conjunto de gems no prompt

Ao trabalhar no console, quero saber qual Ruby e gemset está ativado atualmente pelo RVM. A melhor solução é exibir essas informações no prompt:

Cenário

O RVM fornece uma fun̤̣o para esse fim Рbasta colocar rvm-promptna linha de comando:

→ rvm-prompt
ruby
-1.9.3-p392@aina
→ rvm use 1.9.3
→ rvm-prompt
ruby
-1.9.3-p392

Quando no defaultgemset, não é a saída de rvm-prompt. Além disso, esse ruby-prefixo não é necessário para as nossas necessidades.

Permite armazenar a saída na variável:

→ rbv=`rvm-prompt`

É claro que ecoar essa variável produzirá o mesmo resultado:

→ echo $rbv
ruby
-1.9.3-p392

Vamos modificar a avaliação desse bit variável. Em bash(ou zsh) você pode utilizar a chamada expansão de parâmetro . O melhor para ilustrar é colocar um exemplo de saída:

→ echo ${#rbv}
15

A saída deste comando é o comprimento da string armazenado em rbv. Vamos tentar outro:

→ echo ${rbv:5}
1.9.3-p392

Isso é colocado no console da substring armazenada a rbvpartir do 6º caractere até o final da string. Agora começamos a chegar a algum lugar. Mas sejamos um pouco mais espertos:

→ echo ${rbv#ruby-}
1.9.3-p392

Esta expansão retorna a string sem o padrão de correspondência na frente da string.

OK, mas e o conjunto de defaultjoias? Bem, vamos usar força bruta 🙂 Se não houver um @caractere na saída de, vamos concatenar nossa pequena variável com . Não é muito inteligente, mas funciona bem em nosso cenário.rvm-prompt@default

Como testar se existe um determinado caractere na string?

→ [[ $rbv == *"@"* ]]
→ echo $?
1

Estamos testando a presença de @em rbv. O resultado é armazenado no código de saída do interpretador. Isso engraçado echocolocará o código de saída do último comando no console. Neste caso, @não está presente. Em caso oposto, 0seria devolvido.

Agora é hora de colar tudo junto. Crie uma função na sua pasta pessoal .bash_profileou .zshrcna sua pasta pessoal:

function prompt_rvm {
rbv
=`rvm-prompt`
rbv
=${rbv#ruby-}
[[ $rbv == *"@"* ]] || rbv="${rbv}@default"
echo $rbv

}

E consuma essa função em seu prompt mais tarde

bash :export PS1="\u@\h \w \$(prompt_rvm) \$ "

zsh :PROMPT='%n@%m %~ $(prompt_rvm)

Felicidades 🙂