Bashrc

什麼是使用/維護兩個單獨的 bash_profile 和 vimrc 的聰明方法

  • May 18, 2018

我喜歡在終端和 vim 中使用兩種不同的設置。一個在 vim 中使用淺色背景和有點花哨的航空公司狀態欄。另一個使用深色背景和更準系統的 vim 外觀。我要麼因為優柔寡斷而在兩者之間搖擺不定,要麼只是偶爾有點變化。

隨意在這兩種配置之間輕鬆切換的聰明方法是什麼?現在我基本上有兩個略有不同.bash_profile的 s 和.vimrcs。當我想變暗時,我手動獲取暗配置文件,並定義了一個 bash 別名以使用備用 vimrc 啟動 vim。我相信有更好的方法,我會對建議感興趣。

更新:我提出了設置主題環境變數以在配置文件中引用的極好建議。奇蹟般有效。還發現了這個gem(不是 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
}

使用環境變數。這樣,您可以在 shell 中設置THEME=dark或設置THEME=light,並且由該 shell 啟動的所有程序都將使用所需的方案。

在 bash 或任何其他 shell 中:

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

在你的.vimrc

if $THEME == "light"
 …
else
 …
endif

您可以使用軟連結。所以用內容創建兩組.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

引用自:https://unix.stackexchange.com/questions/157911