Mac下打造vim+Python开发环境

作者 Zee 日期 2016-12-28
Mac下打造vim+Python开发环境

记得刚装ubuntu那会,对vim和terminal爱不释手,装各种插件DIY。换到mac上后接触到SublimeText和VScode,就再也没有去理会vim了。前几天看了点《程序员修炼之道》,里面说『最好精通一种编辑器,并将其用于所有编辑任务。如果不坚持使用一种编辑器,可能会面临现代的巴别特大混乱』

于是,又开始思考到底该选择谁作为自己的主编辑器,想了想目前学的主要是Python和C++偏服务器方向,而且以后工作中也是跟服务器打交道,既然偏服务器那就注定跟图像界面无缘了,所以就是没得选了!不过,还是出于ubuntu环境下vim的易用性,扩展性等都比较符合我爱折腾的性格。最终!我决定用vim!好吧,既然决定了,那就风雨无阻,开始吧。

系统环境

看网上一大堆vim的教程,大都不把自己的系统环境贴上去,以至于让读者无法理解,在配置过程中会出现版本问题。所以,我先把我的系统环境贴上来,让读者能够在遇到问题的时候注意到版本问题。

  • macos 10.12.2
  • vim 7.3
  • homebrew
  • osx Terminal
  • zsh 5.0.8

网上很多选用iterm2代替Terminal,还有macVim代替vim等,本人一贯认为,既然系统自带的不难用,没大毛病,何必要多装一堆东西呢?弄得系统乱糟糟的。

升级vim

mac下自带的vim是7.3版本的,而vim最强大的补全插件You Complete Me是要求vim7.4+,所以要配置vim环境的首要任务就是安装最新版本的vim。以前在ubuntu下用vim的时候,当时最新版的是7.4,现在不知不觉中更新到8.0了,真是一大喜讯啊,还说什么呢?赶紧去尝鲜咯。

更新vim最方便的方法就是采用homebrew安装。在终端下输入如下指令:

/* 安装最新版的vim,并覆盖系统的vim */
brew install vim –with-lua –with-override-system-vi

安装过程中的信息如下:

==> Using the sandbox
==> Downloading https://github.com/vim/vim/archive/v8.0.0041.tar.gz
==> Downloading from https://codeload.github.com/vim/vim/tar.gz/v8.0.0041
######################################################################## 100.0%
==> ./configure --prefix=/usr/local --mandir=/usr/local/Cellar/vim/8.0.0041/share/man --enable-multibyte --with-tlib=ncurses --enable-cscope --with-compiledby=Homebrew --enable-luainterp --enable-perlinterp --enable-pythoninterp --enable-
==> make
==> make install prefix=/usr/local/Cellar/vim/8.0.0041 STRIP=/usr/bin/true
🍺 /usr/local/Cellar/vim/8.0.0041: 1,706 files, 23.3M, built in 5 minutes 16 seconds

我们通过检查vim的版本可以查看vim有没有成功更新。

~ vim -version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Dec 25 2016 08:56:17)
Garbage after option argument: "-version"
More info with: "vim -h"

安装zsh

zsh被称为是终极shell,其可配置性强,用户可以自定义配置,特别适合折腾党使用,一旦你用上了zsh,你再也回不去bash了。mac本身是自带zsh的,但是其版本比较低,我们可以先查看以下它的版本。

~ zsh --version
zsh 5.0.8 (x86_64-apple-darwin14.4.0)

接下来,把它升级到最新版吧,追新党最喜欢的就是一有新版本就立马上,体验一番。

/* 终端下运行如下指令安装最新版zsh */
brew install zsh

安装完之后,需要将zsh设为系统默认的shell。新安装的zsh在usr/local/bin目录下,首先我们需要把这个添加到系统shells下面。

/* 第一步,打开etc/shells 文件*/
sudo vi /etc/shells
/* 在文件末尾添加/usr/local/bin/zsh */
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh // 系统自带的zsh
/usr/local/bin/zsh // 添加安装的最新版zsh到shells文件中

修改完成后,需要启动最新版的zsh,运行如下指令:

chsh -s /usr/local/bin/zsh

我一般都是只使用默认的在zsh配置,各位读者如果觉得想进一步diy的可以自己去搜一些资料来配置。

配置开发环境

前面做了一系列的升级操作都是为了此刻!由于自己用的语言基本上就是C/C++和Python了,所以本人的vim围绕着这两种语言配置。如您有其它的语言要求,只好委屈您去找找其它的资料了。先贴一张终极配置图,如您觉得满足您的审美,请继续跟着我一起完成这些配置。

vimFinally

插件管理器

vim下最好用的插件管理器就是Vbundle,可以把它想象成是一个自动化仓库,专门用于管理各类插件。有了它,安装和更新插件这种事情,简直就是弹指一按间的事。

安装vbundle也很简单,从github上下载,直接安装。

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

运行完该命令之后,你的~/.vim文件夹下就多了一个bundle文件夹,这里就放置着你所有安装的插件。

那么,怎么安装插件呢?首先,我们需要接触到vim的配置文件.vimrc

touch ~/.vimrc

在用户的home文件夹下创建一个.vimrc文件,接下来我们的工作全部都要操作这个文件,来对vim进行一个全面的配置。

/* 第一步:打开.vimrc文件 */
vim ~/.vimrc
/* 添加vbundle管理配置 */
" *********************************************
" Vbundle插件管理
" *********************************************
set nocompatible " required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required

修改完.vimrc文件之后,就可以在vim中运行:PluginInstall来安装插件了。下面是vim的运行结果

" Installing plugins to /.vim/bundle"
. Plugin 'gmarik/Vundle.vim'
* Helptags

主题安装

默认的vim主题对于编程人员来说,伤眼又难看。作为一名码代码的,个人比较偏爱暗黑色的背景,所以选在隆重给大家推荐一款主题——vim主题Tomorrow。先放一张预览图,让大家决定是否选择它。

tomorrowThemes

该主题的安装也非常简单。从github上下载tomorrow主题的源文件,导入主题就能用了。

/* 从github上下载tomorrow主题 */
git clone https://github.com/chriskempson/tomorrow-theme.git

终端切换tomorrow主题

进入tomorrow/OS X Terminal双击Tomorrow Night.terminal即可导入暗黑色的tomorrow主题。

然后,打开终端,依次进入Terminal->preferences,按下图的操作进行。

terminalThemes

vim切换Tomorrow主题

vim切换tomorrow主题就没那么简单直接了,需要设置.vimrc配置文件和加入colors文件夹。

/* 在.vim/bundle下新建文件夹 */
~ cd ~/.vim/bundle
~ mkdir colors
/* 进入tomorrow文件夹中的vim配置文件夹 */
~ cd tomorrow-theme/vim/colors
/* 移动配置文件到.vim/bundle/colors文件夹 */
~ mv Tomorrow-Night.vim ~/.vim/bundle

接下来,修改.vimrc配置文件,使主题生效。

/* 在配置文件中加入下面的配置 */
" *********************************************
" Tomorrow主题配置
" *********************************************
set t_Co=256
set background=dark
colorscheme Tomorrow-Night

重启终端和vim试试,全新的tomorrow配色就这样生效了。!!!

分割布局

在写代码的时候,最喜欢的就是开两个窗口来浏览不同的代码,这点在vim中可以轻易的做到,所以,自从用了vim就再也不想用双屏来看代码了。

为了配合快捷键来使用分割布局,我们需要在.vimrc文件中添加下面的配置。

" *********************************************
" 分割布局相关
" *********************************************
set splitbelow
set splitright
"快捷键,ctrl+l切换到左边布局,ctrl+h切换到右边布局
"ctrl+k切换到上面布局,ctrl+j切换到下面布局
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

保存退出,重新进入vim之后,就可以用命令来控制分割布局了。

:split // 水平分割打开一个新窗口
:vsplit // 垂直分割打开一个新窗口

下面是分割成四个窗口的预览图,看看是不是很酷炫,效率一下子就提升了。另外,CTRL+H/J/K/L就可以切换到任意窗口进行编辑操作。

spliteVim

代码折叠

通常,在一些IDE里面都提供对代码进行折叠的操作,便于理清代码的思路。Vim当然不甘示弱,这么点小功能能难倒我,而且vim的折叠功能更加的可控和智能。

同样,在.vimrc中添加如下配置来开启代码折叠功能。

" 开启代码折叠功能
" 根据当前代码行的缩进来进行代码折叠
set foldmethod=indent
set foldlevel=99

这样一来,你在NORMAL模式下就可以输入za快捷键来进行代码折叠了。为了便于操作,我们可以将za快捷键换成空格键。所以,您的配置文件中还需要添加如下命令:

" 将za快捷键映射到space空格键上
nnoremap <space> za

目录树

按照当初的想法,是为了将vim配置成Python开发环境,那么开发环境中的文件目录当然少不了。得益于vim强大的插件系统,自然会有插件来带我们完成这个功能。于是,我们找到了NERDTree这个插件,先来看看实用效果吧。

NERDTree

左边显示的就是NERTree插件生成的目录,是不是很心动,跃跃欲试!接下来就来一步一步安装它吧。

第一步,在vimrc文件中添加如下代码,和Vbundle放在一起。

Plugin 'gmarik/Vundle.vim'
Plugin 'scrooloose/nerdtree'

第二步,添加NERDTree目录树的相关配置,也是在.vimrc文件中

" *********************************************
" NERD插件属性
" *********************************************
au vimenter * NERDTree // 开启vim的时候默认开启NERDTree
map <F2> :NERDTreeToggle<CR> // 设置F2为开启NERDTree的快捷键

第三步,执行:PluginInstall

" Installing plugins to /.vim/bundle"
. Plugin 'gmarik/Vundle.vim'
+ Plugin 'scrooloose/nerdtree' // 表示新添加的插件已经安装
* Helptags

重启vim,你将会看到上面的预览图。

Tagbar

Tagbar可以将正在编辑的文件生成一个大纲,包含类、方法、变量等,可以选中快速跳转到目标位置,编辑大文件的时候特别有用。

Tagbar的安装需要Ctags的支持,我们首先需要安装用brew来安装Ctags,运行如下命令:

~ brew install ctags

然后,在.vimrc中添加相应的插件配置。

Plugin 'majutsushi/tagbar'
" 启动时自动focus
let g:tagbar_auto_faocus =1
" 启动指定文件时自动开启tagbar
autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen()

做完这些之后,执行:PluginInstall,可以看到如下界面:

Tagbar

自动补全

在vim下,最好用的自动补全插件非YouCompleteMe莫属,这款插件支持C、C++、obj-C、C#和python语言的自动补全,有了它,补全各类代码都不用愁了。

安装YCM需要cmake的支持,而且vim的版本需要在7.4以上。首先,我们来安装cmake。

~ brew install cmake

然后,按照插件的安装方法,向.vimrc中添加下列配置命令。

Plugin 'Valloric/YouCompleteMe'
" *********************************************
" YCM插件相关
" *********************************************
let g:ycm_autoclose_preview_window_after_completion=1
" 跳转到定义处
map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR>
" 默认tab、s-tab和自动补全冲突
let g:ycm_key_list_select_completion = ['<TAB>', '<c-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<S-TAB>', '<c-p>', '<Up>']
let g:ycm_auto_trigger = 1

最后,执行:PluginInstall,执行完之后,会提示YCM需要编译后才能使用,去YCM目录下执行编译工作吧。

/* 进入ycm目录 */
~ cd .vim/bundle/YouCompleteMe/
/* 执行编译 */
./install.sh --clang-completer

编译的过程有点慢,耐心等待之后,就可以在写代码的时候自动补全了,看如下示意图,补全python代码。

YCM

air-line

大家在看上述截图的时候,可以会对下方的一条状态栏感兴趣,作为外观党,实在是对这个小插件爱不释手,它的最大好处就是好看!附带的功能也一目了然,可以显示vim当前的状态INSERT、NORMAL、VISUAL等,还可以配合一些插件提示语法错误。废话不多说,接下来就教大家安装这个增强型状态栏工具。

这个状态栏是由vim-airline插件提供,默认情况下,airline使用ASCII字符来作为状态栏的分隔符, 所以安装完后,会出现一些乱码的情况。具体的修改方法后面会讲到。

首先,还是按照插件安装的方法,在.vimrc中添加如下配置命令。

Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
" *********************************************
" vim-airline
" *********************************************
" 开启powerline字体
let g:airline_powerline_fonts = 1
" 使用powerline包装过的字体
set guifont=Source\ Code\ Pro\ for\ Powerline:h14

然后,执行:PluginInstall,重启vim可能不会如你所愿,状态栏是这样的。

airlineError

因为terminal使用的字体一般是menlo或者monaco,这些字体都没有对powerline的字符进行封装,所以状态栏的字符段会出现乱码,这个时候需要做的就是安装powerline字体。

/* 从github下载字体文件 */
git clone https://github.com/powerline/fonts.git
/* 安装powerline字体 */
cd fonts
./install.sh

等待脚本程序运行完之后,就成功安装好了powerline封装过的字体了。接下来,修改终端字体,个人比较偏爱Source Code Pro字体,所以讲终端字体修改为Source Code Pro for Powerline,然后重启vim就能看到正常显示的airline了。

airline

支持UTF-8编码

大部分情况下,进行Python开发时,你应该使用UTF-8编码,尤其是使用Python3的时候,为了使vim支持UTF-8编码需要在.vimrc中添加如下代码:

set encoding=utf-8

文件跳转ctrlp

在进行大项目的开发时,往往需要进行文件的跳转,有时我们队要跳转的文件名只记得部分,所以需要支持模糊查找,目录树跨文件夹跳转起来太不方便,于是ctrlp插件登场了,当逆向打开某个文件时,只需要按下ctrl+p输入要打开的文件名即可实现文件跳转,所有和这个文件名匹配的文件都会被按照优先级列出来。

其安装步骤如下,在.vimrc中添加如下配置命令:

Plugin 'kien/ctrlp.vim'
" *********************************************
" ctrlp
" *********************************************
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlP'
" 设置过滤不进行查找的后缀名
let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn|pyc)$'

最后,执行:PluginInstall,重启vim,按下CTRL+P,文件跳转就显示出来了。

ctrlp

PEP8风格

对于Python代码而言,必须要支持PEP8风格的缩进,所以,需要在.vim文件中添加下面的配置文件。

" *********************************************
" python代码风格PEP8
" *********************************************
au BufNewFile,BufRead *.py set tabstop=4 |set softtabstop=4|set shiftwidth=4|set textwidth=79|set expandtab|set autoindent|set fileformat=unix
au BufNewFile,BufRead *.js, *.html, *.css set tabstop=2|set softtabstop=2|set shiftwidth=2

另外,如果需要自动缩进python代码的话,需要安装如下插件:

Plugin 'vim-scripts/indentpython.vim'

共享粘贴板

有时候需要从vim中复制一些代码出去,所以vim必须支持能够将代码复制到系统粘贴板上,要实现上述需求,只需要在.vimrc中添加如下配置参数。

set clipboard=unnamed

小结

vim的插件太多了,针对不同的需求都有相应的插件给予辅助。本篇博客只是按照自己的需求配置了相应的插件,具体的配置文件我已经上传到我的github了,点击这里跳转。后续可能还会增加一些插件来满足自己的开发要求,博客也会同步更新,欢迎大家和我一起来学习配置vim!如果疑惑或配置中出问题的请在下方留言。

本篇博客欢迎转载,但请注明出处。http://zcheng.ren/2016/12/29/VimAndZshInMacTerminal/

张程,于湖北·武汉

License: CC BY-SA 4.0