O que é uma maneira inteligente de usar / manter dois bash_profile's separados e vimrc's

6

Eu tenho duas configurações diferentes que eu gosto de usar no terminal e vim. Um usa um fundo claro e uma linha de status da linha aérea um pouco chique no vim. O outro usa um fundo escuro e uma aparência mais barebonesa. Eu estou oscilando entre os dois por indecisão ou apenas por um pouco de variedade de vez em quando.

Qual é a maneira inteligente de alternar facilmente entre essas duas configurações à vontade? Agora eu tenho basicamente dois .bash_profile s e .vimrc s um pouco diferentes. Quando eu quero ficar escuro eu manualmente source o perfil escuro e eu defini um alias bash para iniciar o vim com o vimrc alternativo. Tenho certeza de que há uma maneira melhor e estaria interessado em sugestões.

Atualizar : Eu fui com a excelente sugestão de definir uma variável de ambiente THEME para referência nos arquivos de configuração. Funciona como um encanto. Também encontrei esta gema (não no sentido do Ruby) que me permite passar o perfil iTerm para um escuro ao mesmo tempo . Um aviso: definir a função bash como um one-liner como esse estava me dando um erro de sintaxe, então tive que dividi-lo em várias linhas.

it2prof() {
  echo -e "3]50;SetProfile=$1\a"
}

alias dark="export THEME=dark && it2prof black && . ~/.bash_profile"
alias light="unset THEME && it2prof white && . ~/.bash_profile"

Melhor ainda, o iTerm2 tem um monte de códigos de escape disponíveis para alterar as configurações no voar.

Outra atualização : Os documentos do iTerm2 avisam que as seqüências de escape podem não funcionar no tmux e na tela, e na verdade não funcionam. Para fazê-los funcionar, você precisa dizer ao multiplexador para enviar a seqüência de escape para o terminal subjacente, em vez de tentar interpretá-lo. É um pouco peludo, mas isso agora está funcionando para mim no tmux, na tela e em uma sessão de shell normal:

darken() {
  if [ -n "$ITERM_PROFILE" ]; then
    export THEME=dark
    it2prof black
    reload_profile
  fi
}

lighten() {
  if [ -n "$ITERM_PROFILE" ]; then
    unset THEME
    it2prof white
    reload_profile
  fi
}

reload_profile() {
  if [ -f ~/.bash_profile ]; then
    . ~/.bash_profile
  fi
}

it2prof() {
  if [[ "$TERM" =~ "screen" ]]; then
    scrn_prof "$1"
  else
    # send escape sequence to change iTerm2 profile
    echo -e "3]50;SetProfile=$1
it2prof() {
  echo -e "3]50;SetProfile=$1\a"
}

alias dark="export THEME=dark && it2prof black && . ~/.bash_profile"
alias light="unset THEME && it2prof white && . ~/.bash_profile"
7" fi } scrn_prof() { if [ -n "$TMUX" ]; then # tell tmux to send escape sequence to underlying terminal echo -e "3Ptmux;33]50;SetProfile=$1
darken() {
  if [ -n "$ITERM_PROFILE" ]; then
    export THEME=dark
    it2prof black
    reload_profile
  fi
}

lighten() {
  if [ -n "$ITERM_PROFILE" ]; then
    unset THEME
    it2prof white
    reload_profile
  fi
}

reload_profile() {
  if [ -f ~/.bash_profile ]; then
    . ~/.bash_profile
  fi
}

it2prof() {
  if [[ "$TERM" =~ "screen" ]]; then
    scrn_prof "$1"
  else
    # send escape sequence to change iTerm2 profile
    echo -e "3]50;SetProfile=$1%pre%7"
  fi
}

scrn_prof() {
  if [ -n "$TMUX" ]; then
    # tell tmux to send escape sequence to underlying terminal
    echo -e "3Ptmux;33]50;SetProfile=$1%pre%73\"
  else
    # tell gnu screen to send escape sequence to underlying terminal
    echo -e "3P3]50;SetProfile=$1%pre%73\"
  fi
}
73\" else # tell gnu screen to send escape sequence to underlying terminal echo -e "3P3]50;SetProfile=$1%pre%73\" fi }
    
por ivan 27.09.2014 / 16:17

3 respostas

6

Use uma variável de ambiente. Dessa forma, você pode definir THEME=dark ou THEME=light em um shell, e todos os programas iniciados por esse shell usarão o esquema desejado.

No bash ou em qualquer outro shell:

case $THEME in
  light)
    PS1='\[\e05m\]fancy stuff\[\e0m\]';;
  *)
    PS1='\w\$ ';;
esac

No seu .vimrc :

if $THEME == "light"
  …
else
  …
endif
    
por 28.09.2014 / 03:07
2

Você pode usar links suaves. Então, crie dois conjuntos de .bash_profile e .vimrc com o conteúdo

touch .vimrc-light .vimrc-dark .bash_profile-light .bash_profile-dark

Em seguida, dependendo do seu humor, altere os softlinks para apontar para o conjunto de cores correto

ln -sf .vimrc-light .vimrc 
ln -sf .bash_profile-light .bash_profile
    
por 27.09.2014 / 19:38
2

Estou desenvolvendo uma ferramenta, shprofile , que ajuda você a gerenciar um conjunto de perfis de shell . Cada perfil define um conjunto de scripts que podem ser carregados a qualquer momento na sessão atual do shell.

Para resolver seu problema, você pode definir dois perfis que contêm suas duas versões de .profile e .vimrc . Então você pode alternar entre eles chamando shprofile :

$ shprofile profileName

Para mais informações, confira o projeto do Github associado.

    
por 18.05.2018 / 08:58

Tags