我喜欢在终端和 vim 中使用两种不同的设置。其中一个在 vim 中使用浅色背景和有点奇特的航空公司状态栏。另一个使用深色背景和更准系统的 vim 外观。我要么因为犹豫不决而在两者之间摇摆不定,要么只是偶尔想尝试一下。
有什么聪明的方法可以在这两种配置之间轻松切换?现在我基本上得到了两个略有不同的.bash_profile
s 和.vimrc
s 。当我想要变暗时,我手动获取黑暗配置文件,并定义了一个 bash 别名来使用备用 vimrc 启动 vim。我确信有更好的方法,并且我会对建议感兴趣。
更新:我采纳了设置主题环境变量以在配置文件中引用的极好建议。奇迹般有效。还发现了这个宝石(不是 Ruby 意义上的)它让我可以同时将 iTerm 配置文件切换为深色配置文件。警告:将 bash 函数定义为单行函数会给我带来语法错误,因此我必须将其分成多行。
it2prof() {
echo -e "\033]50;SetProfile=$1\a"
}
alias dark="export THEME=dark && it2prof black && . ~/.bash_profile"
alias light="unset THEME && it2prof white && . ~/.bash_profile"
更好的是,事实证明 iTerm2 有很多转义码可即时更改设置。
另一个更新:iTerm2 文档警告转义序列可能无法在 tmux 和 screen 中工作,事实上它们也不能工作。为了让它们工作,您需要告诉多路复用器将转义序列发送到底层终端,而不是尝试解释它。它有点毛茸茸的,但现在这对我来说在 tmux、屏幕和正常的 shell 会话中都有效:
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 "\033]50;SetProfile=$1\007"
fi
}
scrn_prof() {
if [ -n "$TMUX" ]; then
# tell tmux to send escape sequence to underlying terminal
echo -e "\033Ptmux;\033\033]50;SetProfile=$1\007\033\\"
else
# tell gnu screen to send escape sequence to underlying terminal
echo -e "\033P\033]50;SetProfile=$1\007\033\\"
fi
}
答案1
使用环境变量。这样,您可以在 shell 中设置THEME=dark
或,并且该 shell 启动的所有程序都将使用所需的方案。THEME=light
在 bash 或任何其他 shell 中:
case $THEME in
light)
PS1='\[\e05m\]fancy stuff\[\e0m\]';;
*)
PS1='\w\$ ';;
esac
在你的.vimrc
:
if $THEME == "light"
…
else
…
endif
答案2
您可以使用软链接。因此创建两组.bash_profile
和.vimrc
内容
touch .vimrc-light .vimrc-dark .bash_profile-light .bash_profile-dark
然后根据您的心情,更改软链接以指向正确的颜色集
ln -sf .vimrc-light .vimrc
ln -sf .bash_profile-light .bash_profile