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

来源:互联网 发布:网络布局要看什么书籍 编辑:程序博客网 时间:2024/06/05 11:30

  • 安装oh-my-zsh
  • 安装Powerline
  • 配置Vim
    • 插件管理器
    • 安装插件
    • 配置vim

转载请注明原始出处:http://blog.csdn.net/a464057216/article/details/52070922
2017.02.17更新:新写了一篇在Mac上配置C系列(C/C++/Objective-C/Objective-C++)语言及Python开发环境的博客,欢迎移步http://blog.csdn.net/a464057216/article/details/55652179

我使用的是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 updatemarsloo@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/.oh-my-zshZSH_THEME="gnzh"DISABLE_UPDATE_PROMPT=trueplugins=(git autojump sudo httpie colored-man-pages)source $ZSH/oh-my-zsh.shexport LANG=en_US.UTF-8export LC_ALL=en_US.UTF-8# Aliases configurationalias 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=vimalias -s txt=vimalias -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/learnspaceexport WORKON_HOME=$HOME/Envsif [ ! -d $PROJECT_HOME ]; then    mkdir -p $PROJECT_HOMEfiif [ ! -d $WORKON_HOME ]; then    mkdir -p $WORKON_HOMEfi# Virtualenvwrappersource /usr/local/bin/virtualenvwrapper.shsource ~/.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/fontsmarsloo@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 pluginPlugin 'tmhedberg/SimpylFold'" Color SchemePlugin 'tomasr/molokai'" NerdTree: A tree explorer plugin for vimPlugin 'scrooloose/nerdtree'Plugin 'jistr/vim-nerdtree-tabs'" Auto indent for PythonPlugin 'vim-scripts/indentpython.vim'" Auto complete plugin" Bundle 'Valloric/YouCompleteMe'" Syntax check in VimPlugin 'scrooloose/syntastic'" PEP8 standard checking for PythonPlugin 'nvie/vim-flake8'" Powerfull status linePlugin '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 SimpylFoldautocmd BufWinEnter *.py setlocal foldexpr=SimpylFold(v:lnum) foldmethod=exprautocmd BufWinLeave *.py setlocal foldexpr< foldmethod<

vim使用unix utf8编码处理文件

" Vim file formattingset encoding=utf-8set fileformat=unix

YCM自动补全及离开插入模式后自动关闭帮助窗口

" YCM: close the preview window after completeion automaticallylet g:ycm_autoclose_preview_window_after_completion = 1" YCM: close the preview window after leave insertion mode automaticallylet g:ycm_autoclose_preview_window_after_insertion = 1

YCM配合virtualenv

 "python with virtualenv supportpy << EOFimport osimport sysif '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 variablesexport PROJECT_HOME=/home/marsloo/workspace# export PROJECT_HOME=/home/marsloo/learnspaceexport WORKON_HOME=/home/marsloo/Envsif [ ! -d $PROJECT_HOME ]; then    mkdir -p $PROJECT_HOMEfiif [ ! -d $WORKON_HOME ]; then    mkdir -p $WORKON_HOME    source /usr/local/bin/virtualenvwrapper.shfi

YCM快捷键定义

" YCM shortcutsmap <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 automaticallylet g:nerdtree_tabs_open_on_console_startup=1

NertTreeTabs是最后一个串口时,不关闭NertTreeTabs

" Don't close nerdtreetabs when it is the last windowlet g:nerdtree_tabs_autoclose=0

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

" Files that nerdtree will ignorelet NERDTreeIgnore = ['\.pyc$', '\~$']

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

" Mapping C-g to toggle NERDTreeTabsmap <C-g> :NERDTreeTabsToggle<CR>

vim显示行号

set nu

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

" Ensure one line doesn’t go beyond 80 charactersset textwidth=79

配置使用Python语法检查

" Configuration for scrooloose/syntastic pluginset statusline+=%#warningmsg#set statusline+=%{SyntasticStatuslineFlag()}set statusline+=%*let g:syntastic_always_populate_loc_list = 1let g:syntastic_auto_loc_list = 1let g:syntastic_check_on_open = 1let 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 molokaielse    colorscheme zenburnendif

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

如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!

2 0