Переключите colorscheme в темноте стержня, vim и tmux передней для того чтобы осветить с одной командой

Я использую zsh, tmux и vim и я хотел был бы знать как переключить между solarized темнотой / светом в стержне, vim, vim-авиакомпанией и линией состояния tmux с как раз одной командой.

6
задан Arturo
05.05.2023 11:05 Количество просмотров материала 2762
Распечатать страницу

2 ответа

Я сам борюсь с этой проблемой. Я приземлился на несовершенное, хакерское полурешение, но из того, что я собрал, Укрощение терминальных цветов-не совсем тривиальная проблема.

Я обнаружил, что tmux и vim заимствуют 16 значений цвета ANSI, определенных в вашей цветовой схеме терминала (черный, красный, зеленый, желтый, синий, пурпурный, голубой, белый и все их "яркие" варианты). Если в вашем светлая цветовая схема терминала инвертировать определения ANSI black & white (то есть, set черный/brightblack как светлый фон цвета: белый/brightwhite как темные цвета на переднем плане), tmux и vim последуют их примеру. Пока вы используете только светлые / темные варианты одной цветовой схемы, она должна работать прилично.

enter image description here

Как вы можете видеть на этом скриншоте, это не идеально (спереди терминал, сзади MacVim-обратите внимание на различия в тексте авиакомпании, как ну, как неразборчивый Черный блок около середины, который должен быть светлым текстом на темном фоне), но он получает 99% пути туда, не касаясь каких-либо настроек vim/tmux/vim-airline.

enter image description here

3
отвечен Ryan Lue 2023-05-06 18:53

я придумал метод одновременного переключения Solarized между светлым и темным для iTerm2, tmux и Vim с помощью одной команды изнутри Vim:

  1. настройте два профиля в настройках iTerm2, один с Solarized темной цветовой схемой, а другой с Solarized светлой цветовой схемой. Цветовые пресеты очень полезны здесь, так как они включают в себя обе версии Solarized.

    iterm solarized profiles

  2. добавить сочетание клавиш для каждого профиля, чтобы переключиться на другой (темный переключается на свет, свет переключается на темный). Я использовал один и тот же ярлык для обоих, поэтому он просто переключается между ними. Вы можете использовать различные ярлыки, если хотите, вам просто нужно сделать небольшую модификацию на более позднем этапе.

    iterm keyboard shortcut

    в случае, если вы не знакомы с глифами, это Control -опции -Shift -s. Не стесняйтесь выбирать что-то другое, но помните, нам это понадобится позже. И я только показываю Solarized Dark здесь, но не забудьте настроить его для и профили.

  3. получить себе некоторые цветовые схемы tmux. Я использовал те, от этот репозиторий на Github. Я буду ссылаться на его расположение на вашем компьютере, как ~/tmux-colors-solarized.

  4. установить Solarized для Vim с помощью предпочтительного метода. Так как мы установили 16 цветов ANSI в Solarized значения в профилях iTerm2, мы можем использовать стандартная Solarized цветовая схема, а не ухудшенная версия цвета 256.

  5. добавить функцию в ваш .vimrc, и дополнительно команда:

    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()
    

    построчное...выход пояснение:

    function! Solar_swap()
    

    определение function имени Solar_swap это не принимает параметров (). The ! по конец function заставляет его молча заменить существующую функцию с тем же именем, удобно, если вы в конечном итоге поиске .vimrc снова.

        if &background ==? 'dark'
    

    простая проверка, если фон Vim в настоящее время темный. ==? делает сравнение без учета регистра. The & необходимо использовать параметр (например,background) в выражение.

            set background=light
    

    просто устанавливаю Vim фон на свет.

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

    execute следующая строка как Ex (т. е. : команды). silent избавляет нас от необходимости нажимать return каждый раз. ! запускает внешнюю (для Vim) команду, в данном случае tmux source-file [path]. The . объединяет расширенный экранированный путь к остальной части командной строки.

        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}'
    

    silent ! то же самое, что и раньше. osascript запустит AppleScript для нас. -e означает выполнение следующего аргумента в виде одной строки скрипта. Строка, которую мы запускаем, - это отправить эту комбинацию клавиш с шага 2 в активное приложение, которое должно, насколько это касается операционной системы, быть iTerm2.1 вам может потребоваться изменить строку в соответствии с вашим выбором ярлыка. Обратите внимание, что если у вас было два разных ярлыки для переключения iTerm2 вам нужно переместить эту строку в if ' ы ветви, и изменить нажатия клавиш, чтобы соответствовать.

    endfunction
    
    command! SolarSwap call Solar_swap()
    

    и, наконец, закрываем функцию и определяем a command под названием SolarSwap, который вызывает функцию, которую мы только что сделали. ! автоматически заменяет любую существующую команду с тем же именем.

    теперь, изнутри Vim, просто запустите :SolarSwap и Vim, tmux и iTerm2 должны переключаться между Solarized Light и Dark. Вы можете, конечно, добавьте отображение в .vimrc сделать переключение еще проще.


1iTerm2 имеет правильный API AppleScriptновая tabs, windows или splits с указанным профилем, или получить (только для чтения) имя профиля текущего сеанса. Таким образом путь кольцевой развязки установки сочетания клавиш и их использование для переключения профилей.

2
отвечен 8bittree 2023-05-06 21:10

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Вверх