转载请注明原始出处: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文件时使用效果如下:
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是一个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
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,把各个插件的功能利用起来,下面说明的内容都是放在.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("" )
colorscheme molokai
else
colorscheme zenburn
endif
配色部分我一般用molokai
,你也可以使用solarized
,并且激活F5切换。
如果觉得我的文章对您有帮助,欢迎关注我(CSDN:Mars Loo的博客)或者为这篇文章点赞,谢谢!