36.在Ubuntu上打造方便好用的Py

发布时间:2019-09-07 08:08:10编辑:auto阅读(1859)

    转载请注明原始出处: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 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/.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切换。

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

关键字