首页 > 系统 > Linux >

36.在Ubuntu上打造方便好用的Python开发环境

2016-08-09

安装oh-my-zsh 安装Powerline 配置Vim 插件管理器 安装插件 配置vim 我使用的是Ubuntu 14 04 LTS,按照我的操作步骤做完,终端Terminal的使用效果如下: vim编辑Python文件时使用效果如下:

我使用的是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

安装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/marsloo/.oh-my-zsh
ZSH_THEME="agnoster"
DISABLE_UPDATE_PROMPT=true
plugins=(git autojump)
source $ZSH/oh-my-zsh.sh
export LANG=en_US.UTF-8
alias ll='ls -lrth'
alias la='ls -lrtha'
alias grep="grep --color=auto"
alias vi='vim'
alias -s py=vim
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'

主题我选择了流行的agnoster,你可以在这里选择自己喜欢的。插件部分除了默认的git,还选择了autojump,后续我会写一篇博文讲它的用法。alias -s c=vim是说,直接在终端输入一个.c文件的名字,会自动用vim打开它,处理其他类型的文件也会使用对应的工具打开(比如解压压缩包)。

先备份你的.zshrc,再把上面的配置拷贝到你的~/.zshrc中,$ source ~/.zshrc就可以了。如果没有改过Ubuntu的终端字体设置的话,会显示乱码:

这里写图片描述

先不管乱码,把Zsh设置为当前用户的默认Shell:<喎"http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;"> 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 &#39;tmhedberg/SimpylFold&#39;
" Color Scheme
Plugin &#39;tomasr/molokai&#39;
" NerdTree: A tree explorer plugin for vim
Plugin &#39;scrooloose/nerdtree&#39;
Plugin &#39;jistr/vim-nerdtree-tabs&#39;
" Auto indent for Python
Plugin &#39;vim-scripts/indentpython.vim&#39;
" Auto complete plugin
" Bundle &#39;Valloric/YouCompleteMe&#39;
" Syntax check in Vim
Plugin &#39;scrooloose/syntastic&#39;
" PEP8 standard checking for Python
Plugin &#39;nvie/vim-flake8&#39;
" Powerfull status line
Plugin &#39;Lokaltog/powerline&#39;, {&#39;rtp&#39;: &#39;powerline/bindings/vim/&#39;}

各个插件的作用可以在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 &#39;VIRTUAL_ENV&#39; in os.environ:
  project_base_dir = os.environ[&#39;VIRTUAL_ENV&#39;]
  activate_this = os.path.join(project_base_dir, &#39;bin/activate_this.py&#39;)
  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   :YcmCompleter GoToDefinition
" map   :YcmCompleter GoToDeclaration
map   :YcmCompleter GoToReferences
map   :YcmCompleter GetDoc
" invoke omni completion by pressing ctrl+/ (ctrl+/ is recognized as C-_)        
inoremap   

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&#39;t close nerdtreetabs when it is the last window
let g:nerdtree_tabs_autoclose=0

NerdTree自动忽略某些文件:如以.pyc和~结尾的文件

" Files that nerdtree will ignore
let NERDTreeIgnore = [&#39;\.pyc$&#39;, &#39;\~$&#39;]

快速显示关闭NerdTreeTabs
其实vim中,Ctrl + g是显示当前行处于整个文件的位置,因为Powerline已经有这个功能,所有把Ctrl + g的功能换掉了。

" Mapping C-g to toggle NERDTreeTabs
map  :NERDTreeTabsToggle

vim显示行号

set nu

设置一行不会超过80个字符

" Ensure one line doesn&rsquo;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 &lsquo;jnurmine/Zenburn&rsquo;
Plugin &lsquo;altercation/vim-colors-solarized&rsquo;

安装完成后,在.vimrc末尾增加如下判断:

if has(&#39;gui_running&#39;)
    set background=dark
    " colorscheme solarized
    " call togglebg#map("")
    colorscheme molokai
else
    colorscheme zenburn
endif

配色部分我一般用molokai,你也可以使用solarized,并且激活F5切换。

相关文章
最新文章
热点推荐