重回ubuntu,這次可以更主動,更成熟的享受全棧linux的工作狀態,用了一段時間來折騰這幾個軟件,小有所成,提筆寫篇文章記錄一下過程. 我的終極目標是,全面啟用VIM的鍵位和操作模式,拔掉鼠標,能像彈鋼琴一樣工作.
為了達到這個目標,我這次主力配置了如下幾個軟件:
- 進化版bash--->zsh+oh-my-zsh
- bash的殼 ---> tmux
- 扔掉unity,改用平鋪式窗口管理器--->awesomewm
- 扔掉IDE,改用強大得出乎意料的VIM
- 其余還有很多好玩的小軟件,諸如ranger,xclip,scrot,guake等等,有空也寫一下
這一系列下來每個都有自己的配置文件,最現代化的辦法應該是搞一個庫專門來維護他們,以后升級電腦,換電腦直接從云端拉下來sh一下,一個一毛一樣的世界就會重現在你面前,這幾個東西我選擇的標準基本都是1能否高度定制化(插件化,開源化)2能否配置使用vim模式的鍵位
個人的配置庫放在coding上,國內速度就是飛快
1. 扔掉原裝的bash,換上ZSH
用過zsh后你就不會對系統中自帶的終端有任何的留戀。沒有見過zsh之前,我對linux的終端印象總是停留在rh9時代,tty上去,黑白兩色。。。接觸過了以后才知道這才是現代化的終端。。。大量的語法糖,超智能提示,超級美觀的各種配色主題,開發活躍,大量插件。。。最要命的是,你一旦習慣了zsh給的糖,你就恨不得給你所有的服務器都搞一套。。。
安裝很簡單,ubuntu16上apt里直接有,oh-my-zsh在github上,撿下來也可以一步安裝:
sudo apt-get install zsh -y #install zsh
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
chsh -s /bin/zsh #將默認的shell切換成zsh
重新登錄后就可以使用zsh了,zsh使用rc作為配置模型,所以還需要創建一個~/.zshrc作為配置核心,這個文件在oh-my-zsh中提供有范例,里面有幾個關鍵配置:
# 使用的主題,主題位于~/.oh-my-zsh/themes下
# 你把omz搞下來之所以花了那么久時間就是因為一野搞下來上百個主題。。。
ZSH_THEME="lambda"
# 啟用的插件,插件在omz/plugins目錄下,有很多很神奇的插件,可以去官網探索一下
plugins = (git)
#zsh的alias也是亮點之一,比原生的alias強悍
alias xclip='xclip -sel clip'
我填過的坑有:
dir目錄顏色丟失問題
某些主題下目錄是不帶顏色的,對比過bashrc后重裝了dircolors,解決了這個問題:
git clone git://github.com/seebi/dircolors-solarized.git ~/dircolors-solarized
cp ~/dircolors-solarized/dircolors.256dark ~/.dircolors
eval 'dircolors .dircolors'
接著將腳本同樣寫入到.zshrc里面:
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
2. 裝上tmux使你的終端更加強大
tmux作為第二個出場的神器,也是我強力推薦的能顯著提高生產力,增加bigger的好東西,主要出場場景有幾個:
- 將大屏幕橫著分豎著分成幾個不同的區域,選項卡,提高工作效率
- 增加了session的概念,session可以持久化,第二天再開recover一下就回到昨天單記錄點,如果裝在服務器上,由于不關機,直接a一下就可以馬上進入工作狀態,還不怕掉線!
- 用在服務器上可以進行真正意義上的結對編程,多人可以同時ssh上去,然后attach到同一個session里,可以實現屏幕直播
安裝很簡單,如果想要最新版本可以在github上面下,然后自己make一下,也很簡單:
sudo apt-get install tmux -y
mkdir -p ~/.tmux
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
tmux默認查找配置文件~/.tmux.conf,他官方提供了插件管理器,有幾個強大的插件裝了以后讓你用得更舒服:
set -g @plugin 'tmux-plugins/tpm' #插件管理器
set -g @plugin 'tmux-plugins/tmux-sensible' #常用的高級設置
set -g @plugin 'tmux-plugins/tmux-resurrect' #session持久化
set -g @plugin 'tmux-plugins/tmux-pain-control' #vim模式的快捷鍵
set -g @plugin 'tmux-plugins/tmux-prefix-highlight' #高亮按下前綴鍵
tmux的快捷鍵很多,但都是有固定套路的,比如:
prefix+| 將屏幕豎分為兩半,同理橫著就是prefix+-
prefix+hjkl vim模式了,在各個不同的panel間移動
prefix+c(create) 創建新的窗口,同理prefix+n(next)移動到下個窗口
prefix+? 顯示所有可用的快捷鍵
我踩過的坑有:
在tmux下使用vim,固定的配色會顯示不正確
這是因為tmux使用的顏色模式和原來的不一樣,解決方法很簡單啟動tmux時使用
alias tmux=`tmux -2`
然后在tmux的配置文件中使用
set -g default-terminal "screen-256color"
3. 是時候改用awesomewm了,unity走開走開
為了更好的使用awesomewm,我推薦你多來幾個顯示器,你會爽到飛起,唯一不舒服的就是,你又得再記7,8個快捷鍵。。。
unity很華麗,但啟動也不是一般的慢,而且實在沒法做到全鍵盤操作,對于我等coder,華麗的界面雖然可以給你帶來心靈的局部愉悅,但并不是我等的追蹤的本意,是不?
amesomewm意為平鋪式窗口管理器 我原來在多個任務之間切換的時慣用虛擬桌面+alt/tab,任務一多加上坑爹的unity,實在讓人抓狂,換用awesome后,手不用離開鍵盤,3個屏幕隨意切換,再加上高度定制的配置文件,當你看明白后,可以定制里面的一切。簡直就是coder式的窗口管理器!
安裝
# awesome核心,擴展,屏保,gnome風格的窗口元素
sudo apt-get install -y awesome awesome-extra xscreensaver gnome-settings-daemon
安裝很簡單,注銷后在登錄界面可以選擇使用awswome登錄。配置很麻煩,因為這全套都是用lua擼出來的!包括每一個按鈕,每一個函數。。。默認配置文件在~/.config/awesome/rc.lua,文件很長,我就不貼了,有興趣的自己看我整理好的配置文件,全面定制過vim-style的快捷鍵:
Mod+j/k: 在同一個屏幕中切換程序
Mod+1/2/3:切換到當前屏幕的第N個虛擬桌面
Ctrl+Mod+j/k:切換到下一個屏幕
Mod+o:將當前的程序丟到另一個屏幕上顯示
我踩過的坑有:
程序自啟動問題
程序自啟動其實有兩個點:
- x啟動后但awesome沒啟動:這個點可以使用xinitrc和xprofile掛載窗口主題,屏保:
#!/usr/bin/env bash
gnome-settings-daemon &
#網絡管理程序
# nm-applet &
# 自動更新程序
# update-notifier &
# 屏保
xscreensaver -nosplash &
ln -sf ~/.confhub/awesomewm-config/config/xinitrc ~/.xinitrc
ln -sf ~/.confhub/awesomewm-config/config/xinitrc ~/.xprofile
- awesome框架啟動完成后,就可以使用rc.lua來加載常用程序了,記得要使用runonce來啟動,容錯率更高
run_once("synapse")
run_once("ss-qt5")
run_once("fcitx-autostart")
run_once("nm-applet")
run_once("open-xscreen")
4. VIM終于來了
大神說的:世界上只有3種編輯器,VIM,Emacs,其他。。。
大神又說:Emacs是編輯器中的神,而VIM是神的編輯器。。。
我主要使用vim來進行nodejs和web相關的開發,vim完全可以勝任,下述的配置也是圍繞這個展開,但如果你想使用vim來調試java的話,我個人感覺依然是idea+vim插件比較強勢
VIM是這堆東西里面最復雜的一個,我也留到最后再寫,基本上vim一個插件就可以給你玩幾天,更別提幾十個插件了。。。
所以我了解了規模以后,果斷使用了github上面星最高的vim項目:·spf13,8000多顆星基于這個,移除了不用的插件,改成適合做web和nodejs開發的結構
下面就是漫長的踩坑之旅:
重新編譯vim
注意,ubuntu apt中的vim雖然已經是huge集了(除非你和我一樣,直接使用ubuntu16,一步到位),但對于我們還是不適用,因為我們要使用YCM做語法完成和跳轉,而YCM在我這里使用python2死活時不時有bug,而換成python3后就妥妥的,所以第一步就是要從source編譯vim,加入python3,參考這個
基于spf13開搞
直接從git上拉下來,修改配置后就可以開始安裝:
git clone https://github.com/spf13/spf13-vim.git ~/.spf13-vim
# 重新調整分組,去除php等我不需要的插件們
ln -sf ~/.confhub/vim-config/vimrc.before.local ~/.vimrc.before.local
# 額外裝的插件
ln -sf ~/.confhub/vim-config/vimrc.bundles.local ~/.vimrc.bundles.local
# 自定義配置
ln -sf ~/.confhub/vim-config/vimrc.local ~/.vimrc.local
# 腳本會把插件全部拉下來,都在github上,很慢,要有耐心
sh ~/.spf13-vim/bootstrap.sh
# js的自動完成使用
cd ~/.vim/bundle/YouCompleteMe && ./install.sh --tern-completer
YCM很難整,js的語法提示部分使用的是ternjs,搞過了才知道原來很多編輯器里內帶的js自動完成都是由ternjs完成的。安裝編譯過程可能會有很多問題,語法提示模式時YCM跟隨VIM啟動,然后YCM接管默認的提示模型,額外的js就去調用tern來完成提示。
在項目的根目錄放置一個.tern-project文件就可以實現完美的語法提示:
{
"libs": [
"ecma6",
"browser",
"underscore",
"jquery",
"chai"
],
"plugins": {
"node": {}
}
}
效果是這樣:
YCM的提示和系統的提示展開快捷鍵沖突
這個問題糾結了很久,一直不知道是什么問題,后來在stackoverflow上發現了有人有類似的問題才反映過來:
" fix the ycm and snippets bugs
let g:UltiSnipsExpandTrigger = "<nop>"
let g:ulti_expand_or_jump_res = 0
function ExpandSnippetOrCarriageReturn()
let snippet = UltiSnips#ExpandSnippetOrJump()
if g:ulti_expand_or_jump_res > 0
return snippet
else
return "\<CR>"
endif
endfunction
inoremap <expr> <CR> pumvisible() ? "<C-R>=ExpandSnippetOrCarriageReturn()<CR>" : "\<CR>"
spf13
spf13已經是大而全的了,基本已經沒啥需要改進單,為了工作方便額外,還裝了如下這些插件方便js開發:
Bundle 'mxw/vim-jsx' #react jsx的格式化和語法高亮
Bundle 'ternjs/tern_for_vim' #tern
Bundle 'maksimr/vim-jsbeautify' #jsbeautify的vim接口
Bundle 'sjl/gundo.vim' #歷史記錄時光機
Bundle 'mustache/vim-mustache-handlebars' #handlebars模板高亮