http://blog.csdn.net/a464057216/article/details/52070922
我使用的是Ubuntu 14.04 LTS,按照我的操作步驟做完,終端Terminal的使用效果如下:
vim編輯Python文件時使用效果如下:
安裝oh-my-zsh
Shell是Linux內核與用戶通信的接口,種類很多,Ubuntu上默認的Shell是Bash。查看當前使用的Shell是什麼:
marsloo@mars-Ideapad-V460:~$ echo $SHELL
/bin/bash
查看系統中可用的Shell有哪些:
marsloo@mars-Ideapad-V460:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
雖然Bash很好用,但是Zsh比Bash更好用(因爲Z是英文字母的最後一個,所以Zsh也叫終極Shell
),只不過Zsh配置很麻煩,大家不會爲一個Shell工具耗費太多經歷學習配置使用它,直到有人在Github上放了oh-my-zsh項目。
安裝zsh
marsloo@mars-Ideapad-V460:~$ sudo apt-get update
marsloo@mars-Ideapad-V460:~$ sudo apt-get install zsh -y
- 1
安裝oh-my-zsh
需要有curl或wget工具,沒有的話先安裝其中一個。使用curl安裝oh-my-zsh:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
如果使用wget:
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
安裝完成後(中間會要求輸入用戶密碼)就可以體驗oh-my-zsh了:
插件及配置
oh-my-zsh支持加載插件(plugin)增加各種好用的功能,關於插件可以查看~/.oh-my-zsh/plugins
目錄,或者GitHub上的wiki介紹。
oh-my-zsh的配置在~/.zshrc
文件中,下面是我的配置,供參考:
export ZSH=$HOME/.oh-my-zsh
ZSH_THEME="gnzh"
DISABLE_UPDATE_PROMPT=true
plugins=(git autojump sudo httpie colored-man-pages)
source $ZSH/oh-my-zsh.sh
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
# Aliases configuration
alias ll='ls -lrth'
alias la='ls -lrtha'
alias grep="grep --color=auto"
alias vi='vim'
alias mysql='/usr/local/mysql/bin/mysql'
alias mysqladm='/usr/local/mysql/bin/mysqladmin'
alias mysqld='/usr/local/mysql/bin/mysqld'
alias -s c=vim
alias -s txt=vim
alias -s gz='tar -xzvf'
alias -s tgz='tar -xzvf'
alias -s zip='unzip'
alias -s bz2='tar -xjvf'
alias -s jpg='imgcat'
alias -s gif='imgcat'
alias -s png='imgcat'
export PROJECT_HOME=$HOME/learnspace
export WORKON_HOME=$HOME/Envs
if [ ! -d $PROJECT_HOME ]; then
mkdir -p $PROJECT_HOME
fi
if [ ! -d $WORKON_HOME ]; then
mkdir -p $WORKON_HOME
fi
# Virtualenvwrapper
source /usr/local/bin/virtualenvwrapper.sh
source ~/.iterm2_shell_integration.`basename $SHELL`
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
主題我選擇了流行的agnoster
,你可以在這裏選擇自己喜歡的。插件部分除了默認的Git,還選擇了autojump,後續我會寫一篇博文講它的用法。alias
-s c=vim
是說,直接在終端輸入一個.c文件的名字,會自動用vim打開它,處理其他類型的文件也會使用對應的工具打開(比如解壓壓縮包)。
先備份你的.zshrc,再把上面的配置拷貝到你的~/.zshrc
中,$ source ~/.zshrc
就可以了。如果沒有改過Ubuntu的終端字體設置的話,會顯示亂碼:
先不管亂碼,把Zsh設置爲當前用戶的默認Shell:
marsloo@mars-Ideapad-V460 ~ chsh -s /bin/zsh
註銷後重新登陸,打開Terminal使用的就是Zsh了。
安裝Powerline
Powerline是一個Vim的狀態欄插件,也可以爲Zsh提供服務。
安裝Powerline
我平時使用Python 2,安裝Powerline依賴Python 2.6+及pip:
marsloo@mars-Ideapad-V460 ~ pip install --user powerline-status
此時Powerline已經生效了,可以看下效果:
安裝Powerline字體
Powerline爲了漂亮的視覺效果,使用了大量自己開發的字體,這些字體並不是系統原生的。安裝這些字體也非常簡單:
marsloo@mars-Ideapad-V460 ~ git clone https://github.com/powerline/fonts
marsloo@mars-Ideapad-V460 ~ cd fonts/
marsloo@mars-Ideapad-V460 ~/fonts master ./install.sh
安裝完成以後,需要配置終端的字體:
選擇Ubuntu專門的Powerline字體,其他字體會因爲不等寬造成問題,然後就可以看到Terminal的變化了:
如果不想讓Zsh的命令提示符佔據太多命令空間,推薦把Zsh的主題換成gnzh
:
安裝solarized配色
solarized配色對眼睛比較好,安裝這個配色需要dconf-cli
工具,Ubuntu一般默認都有安裝:
$ git clone https://github.com/Anthony25/gnome-terminal-colors-solarized.git
$ cd gnome-terminal-colors-solarized
$ ./install.sh
安裝過程中,我選擇的dark模式,最後效果如下:
配置Vim
Vim是Vi的升級版,本身功能已經很強大,配合各種插件使用後能讓開發效率飛起來。按照我下面的步驟,可以搭建一個高效的Python開發環境。
首先打開vim查看其版本,我的是7.4.52,然後使用$ vim --version | grep +python
確認vim支持python。如果vim版本過低或不支持python,請重新安裝支持Python的最新vim。
插件管理器
vim也支持插件增強功能,有很多插件管理器可以幫助管理插件,我常用的是Vundle:
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
然後新建一個~/.vimrc
的vim配置文件,將GitHub上面的示例內容拷貝進去,記得除了Vundle插件外,將其他作爲示例的插件配置刪掉,然後啓動vim,執行:PluginInstall
:
安裝插件
~/.vimrc
中,插件的設置都在call vundle#begin()
和call vundle#end()
之間,先把我們需要安裝的插件配置都加在裏面:
" Code folding plugin
Plugin 'tmhedberg/SimpylFold'
" Color Scheme
Plugin 'tomasr/molokai'
" NerdTree: A tree explorer plugin for vim
Plugin 'scrooloose/nerdtree'
Plugin 'jistr/vim-nerdtree-tabs'
" Auto indent for Python
Plugin 'vim-scripts/indentpython.vim'
" Auto complete plugin
" Bundle 'Valloric/YouCompleteMe'
" Syntax check in Vim
Plugin 'scrooloose/syntastic'
" PEP8 standard checking for Python
Plugin 'nvie/vim-flake8'
" Powerfull status line
Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}
各個插件的作用可以在GitHub上找到完整的說明,我們還是先打開vim,然後使用:PluginInstall
把這些插件安裝上:
細心的朋友會發現我註釋了一個YouCompleteMe的插件,它是一個代碼自動補全的插件,幾乎可以支持各種語言,也可以跳轉到函數定義、聲明、調用,查看幫助文檔等。因爲這個插件非常不好安裝,所以我們自己手動安裝它。雖然安裝它的過程比較麻煩,但是相比與它的易用性,付出是值得的!首先需要從Github上把它clone下來:
$ git clone https://github.com/Valloric/YouCompleteMe.git
然後cd到YouCompleteMe目錄clone依賴(時間會比較長):
$ cd YouCompleteMe
$ git submodule update --init --recursive
確保系統安裝了cmake
及python-dev
(如果使用python3的話,時python3-dev),將準備好的YouCompleteMe目錄移動到~/.vim/bundle/YouCompleteMe
,
然後在家目錄執行如下命令:
marsloo@mars-Ideapad-V460 ~ mkdir ycm_build
marsloo@mars-Ideapad-V460 ~ cd ycm_build
marsloo@mars-Ideapad-V460 ~/ycm_build cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
marsloo@mars-Ideapad-V460 ~/ycm_build cmake --build . --target ycm_core
如果編譯沒有問題的話,可以在.vimrc
文件中取消YouCompleteMe的註釋重新:PluginInstall
一下。
配置vim
所有的插件安裝完畢後,下一步就是配置vim,把各個插件的功能利用起來,下面說明的內容都是放在.vimrc
文件的末尾。
將:sp和:vsp分割的窗口位置放在右下角
” Change position of the window of :sp & :vsp
set splitbelow
set splitright
開啓代碼摺疊:可以摺疊函數、類等的定義
” Enable folding
set foldmethod=indent
set foldlevel=99
使用空格鍵摺疊代碼:而不必使用za按兩次鍵盤
” Enable folding with the spacebar
nnoremap za
摺疊代碼時,顯示幫助文檔
” Show docstring for folded code
let g:SimpylFold_docstring_preview=1
避免代碼摺疊的Bug
" Avoid Issue #27 for SimpylFold
autocmd BufWinEnter *.py setlocal foldexpr=SimpylFold(v:lnum) foldmethod=expr
autocmd BufWinLeave *.py setlocal foldexpr< foldmethod<
vim使用unix utf8編碼處理文件
" Vim file formatting
set encoding=utf-8
set fileformat=unix
YCM自動補全及離開插入模式後自動關閉幫助窗口
" YCM: close the preview window after completeion automatically
let g:ycm_autoclose_preview_window_after_completion = 1
" YCM: close the preview window after leave insertion mode automatically
let g:ycm_autoclose_preview_window_after_insertion = 1
YCM配合virtualenv
"python with virtualenv support
py << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
project_base_dir = os.environ['VIRTUAL_ENV']
activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
EOF
推薦使用virtualenvwrapper,在.zshrc
最後添加如下內容:
# Other environment variables
export PROJECT_HOME=/home/marsloo/workspace
# export PROJECT_HOME=/home/marsloo/learnspace
export WORKON_HOME=/home/marsloo/Envs
if [ ! -d $PROJECT_HOME ]; then
mkdir -p $PROJECT_HOME
fi
if [ ! -d $WORKON_HOME ]; then
mkdir -p $WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh
fi
YCM快捷鍵定義
" YCM shortcuts
map <C-n> :YcmCompleter GoToDefinition<CR>
" map <C-?> :YcmCompleter GoToDeclaration<CR>
map <C-m> :YcmCompleter GoToReferences<CR>
map <C-p> :YcmCompleter GetDoc<CR>
" invoke omni completion by pressing ctrl+/ (ctrl+/ is recognized as C-_)
inoremap <unique> <C-_> <C-X><C-O><C-P>
Ctrl + n跳轉到函數定義,然後使用Ctrl + o就能回到原來的位置。Python並沒有Declaration一說,所以註釋掉了。Ctrl + m可以看到所有對函數的調用。CtrlP其實是一個查找文件的vim插件,但是我沒有用,所以定義了Ctrl + p是調出幫助文檔。另外有些時候,可以使用Ctrl + /調用強制補全。
打開vim時,自動打開NertTreeTabs
" Start Nerdtree automatically
let g:nerdtree_tabs_open_on_console_startup=1
NertTreeTabs是最後一個串口時,不關閉NertTreeTabs
" Don't close nerdtreetabs when it is the last window
let g:nerdtree_tabs_autoclose=0
NerdTree自動忽略某些文件:如以.pyc和~結尾的文件
" Files that nerdtree will ignore
let NERDTreeIgnore = ['\.pyc$', '\~$']
快速顯示關閉NerdTreeTabs
其實vim中,Ctrl + g是顯示當前行處於整個文件的位置,因爲Powerline已經有這個功能,所有把Ctrl + g的功能換掉了。
" Mapping C-g to toggle NERDTreeTabs
map <C-g> :NERDTreeTabsToggle<CR>
vim顯示行號
set nu
設置一行不會超過80個字符
" Ensure one line doesn’t go beyond 80 characters
set textwidth=79
配置使用Python語法檢查
" Configuration for scrooloose/syntastic plugin
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
注意:需要sudo pip install flake8
vim配色自動切換
需要新增兩個插件:
Plugin ‘jnurmine/Zenburn’
Plugin ‘altercation/vim-colors-solarized’
安裝完成後,在.vimrc
末尾增加如下判斷:
if has('gui_running')
set background=dark
" colorscheme solarized
" call togglebg#map("<F5>")
colorscheme molokai
else
colorscheme zenburn
endif
配色部分我一般用molokai
,你也可以使用solarized
,並且激活F5切換。