Alterna o esquema de cores no terminal, vim e tmux na frente escuro para claro com um comando

6

Estou usando zsh, tmux e vim e gostaria de saber como alternar entre escuro / luz solarizada a linha de terminal, vim, vim-airline e tmux status com apenas um comando.

    
por Arturo 19.03.2017 / 13:36

2 respostas

3

Estou lutando com esse problema. Cheguei a uma solução semi-hacky imperfeita, mas pelo que aprendi, domar as cores dos terminais não é exatamente um problema trivial.

O que eu descobri é que ambos tmux e vim pegam emprestado os 16 valores de cor ANSI definidos no esquema de cores do seu terminal (preto, vermelho, verde, amarelo, azul, magenta, ciano, branco e todas as suas variantes "brilhantes" ). Se no seu esquema de cores do terminal light , você inverte as definições de ANSI black & branco ( isto é, definido preto / preto brilhante como as cores de fundo claro e branco / branco brilhante como as cores de primeiro plano escuras), tmux e vim seguirão o mesmo caminho. Contanto que você esteja usando apenas as variantes claro / escuro de um único esquema de cores, ele deve funcionar decentemente.

Comovocêpodevernestaimagem,elanãoéperfeita(afrenteéterminal,atraseiraéMacVim-noteasdiferençasnotextodacompanhiaaérea,bemcomooblocoilegíveldepretopertodomeio,quedeveriasertextoclaroemumfundoescuro),masfica99%docaminhosemterquetocaremnenhumaconfiguraçãodevim/tmux/vim-airline.

    
por 24.05.2017 / 03:22
2

Eu descobri um método para alternar simultaneamente o Solarized entre claro e escuro para o iTerm2, tmux e Vim, com um único comando dentro do Vim:

  1. Configure dois perfis nas preferências do iTerm2, um com o esquema de cores Solarized Dark e outro com o esquema de cores Luz Solarizada. As predefinições de cores são muito úteis aqui, pois incluem as duas versões do Solarized.

  2. Adicioneumatalhodetecladoacadaperfilparaalternarparaooutro(osinterruptoresescurosparailuminar,osinterruptoresdeluzparaescuro).Euuseiomesmoatalhoparaambos,entãoapenasalternaentreeles.Vocêpodeusaratalhosdiferentes,sequiser,sóprecisaráfazerumapequenamodificaçãoemumaetapaposterior.

    Casovocênãoestejafamiliarizadocomosglifos,istoéControle-Opção-Shift-s.Sinta-seàvontadeparaescolheralgodiferente,maslembre-sedisso,precisaremosmaistarde.EestoumostrandoapenasoSolarizedDarkaqui,masnãoseesqueçadeconfigurá-loparaambosperfis.

  3. Obtenhaalgunsesquemasdecorestmux.Euuseiosde este repositório no Github. Vou me referir a sua localização no seu computador como ~/tmux-colors-solarized .

  4. Instale Solarizado para o Vim através do seu método preferido. Como definimos as 16 cores ANSI para os valores Solarizados nos perfis iTerm2, podemos usar o esquema de cores padrão Solarizado, em vez da versão degradada de 256 cores .

  5. Adicione uma função ao seu .vimrc e, opcionalmente, um comando:

    function! Solar_swap()
        if &background ==? 'dark'
            set background=light
            execute "silent !tmux source-file " . shellescape(expand('~/tmux-colors-solarized/tmuxcolors-light.conf'))
        else
            set background=dark
            execute "silent !tmux source-file " . shellescape(expand('~/tmux-colors-solarized/tmuxcolors-dark.conf'))
        endif
        silent !osascript -e 'tell app "System Events" to keystroke "s" using {shift down, option down, control down}'
    endfunction
    
    command! SolarSwap call Solar_swap()
    

    Explicação linha-a-linha ... ish:

    function! Solar_swap()
    

    Defina um function denominado Solar_swap que não usa nenhum parâmetro () . O ! no final de function faz com que substitua silenciosamente uma função existente de mesmo nome, útil se você acabar obtendo seu .vimrc novamente.

        if &background ==? 'dark'
    

    Verificação simples se o plano de fundo do Vim estiver escuro no momento. ==? faz uma comparação insensível a maiúsculas e minúsculas. O & é necessário para usar uma configuração (como background ) em uma expressão.

            set background=light
    

    Apenas colocando o pano de fundo do Vim à luz.

            execute "silent !tmux source-file " . shellescape(expand('~/tmux-colors-solarized/tmuxcolors-light.conf'))
    

    execute da seguinte string como um comando Ex (ou seja, : ). silent nos poupa de ter que pressionar retornar toda vez. ! executa um comando externo (para Vim), neste caso tmux source-file [path] . O . concatena o caminho expandido e com escape para o restante da cadeia de comandos.

        else
            set background=dark
            execute "silent !tmux source-file " . shellescape(expand('~/tmux-colors-solarized/tmuxcolors-dark.conf'))
        endif
    

    Este pedaço é basicamente apenas a versão claro-escuro das linhas acima.

        silent !osascript -e 'tell app "System Events" to keystroke "s" using {shift down, option down, control down}'
    

    silent ! é o mesmo de antes. osascript executará alguns AppleScript para nós. -e significa executar o seguinte argumento como uma linha de um script. A linha que estamos executando é uma para enviar o atalho de teclado da etapa 2 para o aplicativo ativo, que deve, no que diz respeito ao sistema operacional, ser iTerm2. 1 Talvez seja necessário modificar a linha para ajustar sua escolha de atalho. Note que se você tivesse dois atalhos diferentes para mudar o iTerm2 você precisaria mover esta linha para as ramificações do if , e mudar as combinações de teclas para combinar.

    endfunction
    
    command! SolarSwap call Solar_swap()
    

    E, finalmente, fechamos a função e definimos um command chamado SolarSwap , que chama a função que acabamos de criar. ! silenciosamente substitui qualquer comando existente com o mesmo nome.

    Agora, a partir do Vim, basta executar :SolarSwap e o Vim, o tmux e o iTerm2 devem alternar entre o Solarized Light e o Dark. Você pode, claro, adicionar um mapeamento ao seu .vimrc para tornar a troca ainda mais fácil.

1 o iTerm2 tem uma API adequada do AppleScript , no entanto, Não consegui localizar nenhum meio de alterar diretamente o perfil da guia atual. Apenas maneiras de criar novas guias, janelas ou divisões com um perfil especificado ou obter o nome (somente leitura) do perfil da sessão atual. Assim, o caminho rotativo de configurar atalhos de teclado e usá-los para alternar perfis.

    
por 02.09.2017 / 05:00

Tags