
(題圖來自:deviantart.net)
<a target="_blank"></a>
下面是——包裝在tmux中的zsh和vim:
該tmux會話中有三個分别命名為demo、docs和scatch的視窗,然而在截圖中隻有最上面的視窗是可見的。在這個視窗中有四個分區。左上角的分區是一個zsh視窗,左下角的分區是一個互動的python會話,右上角的窗格是用vim打開的python代碼,然後右下角是包含markdown文檔的窗格。
我将我的 .zshrc、 .vimrc 和 .tmux.conf 配置檔案儲存在 dotfiles 目錄中,并用 symlink 在 home 目錄下建立連結。這樣我就能隻在一個目錄裡做zsh、vim 和tmux的配置的版本控制了。文本三巨頭使用了vim,那麼我們應該讓zsh和tmux也使用vim以及它的綁定鍵并将vim設定為預設編輯器。将下面的文本加到.zshrc檔案中,讓zsh支援vim:
<code>export editor="vim"</code>
<code>bindkey -v</code>
<code></code>
<code># vi style incremental search</code>
<code>bindkey '^r' history-incremental-search-backward</code>
<code>bindkey '^s' history-incremental-search-forward</code>
<code>bindkey '^p' history-search-backward</code>
<code>bindkey '^n' history-search-forward</code>
zsh不僅支援大多數bash指令,還支援更多的智能指令。比如,如果你想在bash中移動到一個目錄裡,你可能會輸入<code>cd foo</code>。而在zsh中如果你将下面一行加入到.zshrc中,你隻需要輸入<code>foo</code>即可。
<code>setopt auto_cd</code>
<code>function virtualenv_info {</code>
<code>[ $virtual_env ] && echo '('`basename $virtual_env`') '</code>
<code>}</code>
<code>function box_name {</code>
<code>[ -f ~/.box-name ] && cat ~/.box-name || hostname -s</code>
<code>prompt='</code>
<code>%{$fg[magenta]%}%n%{$reset_color%} at %{$fg[yellow]%}$(box_name)%{$reset_color%} in %{$</code>
<code>fg_bold[green]%}${pwd/#$home/~}%{$reset_color%}$(git_prompt_info)</code>
<code>$(virtualenv_info)%(?,,%{${fg_bold[blue]}%}[%?]%{$reset_color%} )$ '</code>
<code>zsh_theme_git_prompt_prefix=" on %{$fg[magenta]%}"</code>
<code>zsh_theme_git_prompt_suffix="%{$reset_color%}"</code>
<code>zsh_theme_git_prompt_dirty="%{$fg[green]%}!"</code>
<code>zsh_theme_git_prompt_untracked="%{$fg[green]%}?"</code>
<code>zsh_theme_git_prompt_clean=""</code>
<code>local return_status="%{$fg[red]%}%(?..⤬)%{$reset_color%}"</code>
<code>rprompt='${return_status}%{$reset_color%}'</code>
<code>syntax enable</code>
<code>let g:solarized_termtrans = 1</code>
<code>colorscheme solarized</code>
<code>togglebg#map("<f5>")</code>
終端中的顔色管理會比較複雜。在我的系統中,為了在終端的vim中得到合适的顔色渲染,我特地加了<code>let g:solarized_termtrans = 1</code>。solarized 提供了内建背景函數,讓你可以使用<code>&lt;f5&gt;</code>在亮調和暗調主題之間切換,是以如果你需要這個功能就需要加上上面的内容的最後一行。你還可以在vim裡運作<code>:set background=dark</code> 或者 <code>:set background=light</code>去實作同樣的功能。
vim對複制/粘貼的處理跟基于gui的文本編輯器有些不同。vim有許多複制寄存器和一些粘貼模式,而不是一個單一的複制/粘貼機制。我向我的vimrc裡添加了下列内容,使複制/粘貼機制更加直覺。
<code>" yank text to the os x clipboard" 将文本複制到os x剪貼闆中</code>
<code>noremap <leader>y "*y</code>
<code>noremap <leader>yy "*y</code>
<code>" preserve indentation while pasting text from the os x clipboard 在粘貼os x剪貼闆中的文本時保留縮進</code>
<code>noremap <leader>p :set paste<cr>:put *<cr>:set nopaste<cr></code>
tmux像膠水一樣将文本三巨頭緊密聯系在一起。我在上個月才開始使用tmux,但我驚訝地發現它現在對我的工作流來說是如此的不可或缺。下面是維基百科對tmux的描述:
tmux是一個用于終端複用的軟體,它允許一個使用者在一個終端視窗或遠端終端會話中使用多個不同的終端會話。在同一個指令行接口處理多個程式,以及将程式從已經開始運作另外的程式的unix shell中分離出來,是非常有用的。
從本質上來說,tmux允許你建立會話,隻要你願意,你可以随時離開或傳回該會話。tmux非常的寶貴,因為你可以根據上下文去安排你的工作。
就像vim一樣,設定和使用tmux最難的部分就是顔色管理和用到系統剪貼闆的複制/粘貼功能。通過確定tmux知道你使用的256色來建立合适的solarized顔色是非常簡單直白的。将下面的内容添加到你的tmux.conf檔案中:
<code>set -g default-terminal "screen-256color"</code>
關于複制/粘貼,tmux有一個特别的複制模式。tmux的複制模式指令以一個字首鍵開頭。預設的字首鍵是<code>control-b</code>。大多數人,包括我自己,都會重映射字首鍵為<code>control-a</code>,因為這樣容易使用多了,而且這還是gnu screen的預設綁定鍵。當你看到我在下面提到<code>prefix</code>,我指的都是<code>control-a</code>。是以<code>&lt;prefix&gt; c</code>的意思就是:點選<code>control-a</code>再點選<code>c</code>。
<code>set -g default-command "reattach-to-user-namespace -l zsh"</code>
<code>set -g mode-mouse on</code>
<code>setw -g mouse-select-window on</code>
<code>setw -g mouse-select-pane on</code>
<code># copy mode</code>
<code>setw -g mode-keys vi</code>
<code>bind ` copy-mode</code>
<code>unbind [</code>
<code>unbind p</code>
<code>bind p paste-buffer</code>
<code>bind -t vi-copy v begin-selection</code>
<code>bind -t vi-copy y copy-selection</code>
<code>bind -t vi-copy escape cancel</code>
<code>bind y run "tmux save-buffer - | reattach-to-user-namespace pbcopy"</code>
第一行設定令tmux使用 wrapper 程式給每個新打開的tmux視窗去啟動zsh。接下來的三行是我個人對tmux裡滑鼠操作的設定。你可以保留或删掉這三行,這取決于你自己的需求。真正的幹貨在接下來的十行,它們用于處理複制模式。
除了vim和os x的複制/粘貼緩存外,tmux有它自己的複制/粘貼緩存。為了高效地使用tmux緩存,可以點選 <code>` 鍵</code>來進入複制模式。我已經将預設的複制綁定重映射為跟vi類似的綁定。為了将文本放入tmux的複制/粘貼緩存中,可以點選<code>v</code>去做出文本的標明然後點選<code>y</code>複制選中項。此時,所選的文本就被放在tmux複制/粘貼緩存中。輸入<code>&lt;prefix&gt; p</code>可以粘貼該文本。不過,如果你想将文本放入os x的複制/粘貼緩存裡,你需要輸入<code>&lt;prefix&gt; y</code>。
要是我沒提及一些非常棒的特别與文本三巨頭融合的很好的開源項目,就是我的不對了。我就不深入地一個一個說這些工具了,下面是一些我最喜歡的項目的連結以及簡介:
<code>set -g status-left-length 52</code>
<code>set -g status-right-length 451</code>
<code>set -g status-fg white</code>
<code>set -g status-bg colour234</code>
<code>set -g window-status-activity-attr bold</code>
<code>set -g pane-border-fg colour245</code>
<code>set -g pane-active-border-fg colour39</code>
<code>set -g message-fg colour16</code>
<code>set -g message-bg colour221</code>
<code>set -g message-attr bold</code>
<code>set -g status-left '#[fg=colour235,bg=colour252,bold] #s</code>
<code>#[fg=colour252,bg=colour238,nobold]⮀#[fg=colour245,bg=colour238,bold] #(whoami)</code>
<code>#[fg=colour238,bg=colour234,nobold]⮀'</code>
<code>set -g window-status-format "#[fg=white,bg=colour234] #i #w "</code>
<code>set -g window-status-current-format</code>
<code>"#[fg=colour234,bg=colour39]⮀#[fg=colour25,bg=colour39,noreverse,bold] #i ⮁ #w</code>
<code>#[fg=colour39,bg=colour234,nobold]⮀"</code>
原文釋出時間:2015-05-06
本文來自雲栖合作夥伴“linux中國”