在Ubuntu上打造方便好用的Python開發環境

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
確保系統安裝了cmakepython-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切換。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章