Vim 开发环境配置
注意:本文只对熟悉 Vim 的基本操作想进一步把 Vim 打造成一个较通用的 IDE 的人有帮助,如果对 Vim 的基本操作不熟悉的话,请先看完下文推荐的书或者通过看 Vim 的帮助文档来熟悉 Vim 的基本使用方法。
并且,本文是一个完整的整体,不可以切割成部分来阅读,请务必从头到尾通读一遍,不可以跳过其中的任何一个步骤。
什么是 Vim ?维基百科中是这样描述的:
Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器。
听过 Vim 的估计也听过 Emacs,对于 Emacs 的配置,可以从 这儿 直接 clone 下来用。
学习 Vim 的基本使用技巧,除了查看 Vim 的帮助文档之外,推荐一本书:《Vim 实用技巧》:
下面直入主题,分别谈谈 Vim 在 Mac 环境下(即 MacVim)的基本配置以及对于不同语言(C、C++、Python、Javascript、HTML、CSS)的配置。
基本配置
关于主题配色
我的配色方案使用的是 Solarized,在终端中分别运行以下命令:
1 | git clone https://github.com/altercation/vim-colors-solarized.git |
然后在你的 .vimrc(一般在主文件夹下,如果没有请新建一个) 文件中分别写入以下设置后保存:
1 | syntax enable |
其他配色方案也可以用类似的方式将其放在 ~/.vim/colors
文件夹后在 .vimrc 中进行相应配置。
其他杂七杂八
1 | """""""""""""""""""""""""""""""""""""""""""""""""""" |
Vim插件管理
对于 Vim 的插件管理,主要有两个:Vundle 和 pathogen,这里推荐使用 Vundle ,如果对 pathogen 感兴趣,可以参照 https://github.com/tpope/vim-pathogen。
安装 Vundle 需要你的电脑上装有 Git,Mac 默认装有 Git,所以无需关心这一点,直接在终端中运行以下命令 Vundle 就装好了:
1 | git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim |
对 Vundle 的设置在 GitHub 上讲的很清楚,不过需要去掉一些你不需要的东西:
1 | """""""""""""""""""""""""""""""""""""""""""""""""" |
把以上配置写入 .vimrc 文件之后,打开 Vim,运行命令 :PluginInstall
,回车,安装以上所有插件,待会一一介绍这些插件的用途和配置。
重要说明:安装好以上插件之后,由于这些插件尚未配置好,所以打开 Vim 后可能会出现各种错误、界面丑陋等情况,请忽略掉它们,按照以下教程一步步设置完成后这些错误就会全部消除。
YouCompleteMe 插件
YouCompleteMe 插件主要用来进行自动补全,它所支持的语言有 C/C++/Objective-C/Objective-C++/Python2/Python3/Java/JavaScript/Go/Ruby 等等等等,详情见 YouCompleteMe 的 GitHub 主页。下面先谈谈 YouCompleteMe 的基本配置,再分别针对不同语言的进行自动补全配置。
YouCompleteMe 安装完成后打开 MacVim 如果出现 Python quit unexpectedly...
错误怎么办呢?在 Shell 中运行以下命令即可解决:
1 | brew unlink python |
1 | """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
c/c++ 配置
首先,请确保你的 Mac 上装有 Xcode,并且确保你的 MacVim 拥有 Python 支持,打开 MacVim,运行命令 :echo has('python') || has('python3')
,如果输出结果是 1,则拥有 Python 支持,否则,你需要安装相应的 python 支持,具体方法请求教搜索引擎。接着在 shell 中安装 cmake: brew install cmake
,如果还没有安装 homebrew 的话,参见 http://brew.sh/。
在 shell 中分别运行以下命令新建工作文件夹:
1 | cd ~ |
然后去 LLVM 下载 Mac 的 pre-built 版本,将压缩包里面的文件解压缩到刚才新建的文件夹 ycm_temp/llvm_root_dir
中,即确保 llvm_root_dir
文件夹中含有 bin
, lib
, include
等文件夹。然后回到 shell 中,在文件夹 ycm_build
中运行以下命令:
1 | cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp |
运行结束之后,再接着在文件夹 ycm_build
中运行以下命令:
1 | cmake --build . --target ycm_core |
运行完毕之后,再接着在 shell 中运行以下命令:
1 | echo "" | g++ -v -x c++ -E - |
找到位于 #include search starts here:
和 End of search list.
之间的部分,如图所示,将其复制到剪贴板。
打开文件 .vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py
,在 flags
列表中粘贴刚才复制到剪贴板中的内容(别忘了加上单引号和逗号):
这样,通过 YouCompleteMe 就可以实现 C/C++ 自动补全了,现在你不妨停下来测试一下行不行。
python 配置
python 自动补全依赖于 jedi,所以先要在 shell 中安装 jedi:
1 | pip install jedi |
如果出现 pip: command not found
,那么在 shell 中运行以下命令:
1 | sudo easy_install pip |
针对 python 3.5,则在 shell 中运行以下命令:
1 | sudo easy_install-3.5 pip |
(easy_install-,将 替换为相应的 python 版本号)
安装完 jedi,YouCompleteMe 就可以对 python 自动补全了。针对 python 3 自动补全的话需要在 .vimrc 中加入以下代码:
1 | let g:ycm_python_binary_path='/Library/Frameworks/Python.framework/Versions/3.5/bin/python3' |
后面的路径需要替换为自己的路径,在 shell 中用下面的命令获取这个路径:
1 | which python3 |
就这么简单就可以自动补全 python 代码了。
JavaScript 配置
首先去 https://nodejs.org/en/download/ 下载 Mac 版的 node.js 并安装。然后在 shell 中将你的目录切换到 ~/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/tern_runtime
下,运行一下命令:
1 | npm install --production |
JavaScript 的补全依赖于 .tern-project
文件,也就是说,在你的 工作目录中 或者 工作目录的上层目录中 需要有 .tern-project
文件,关于这个文件的详细设置请参阅 Tern参考手册。下面是我的 .tern-project
文件配置,可根据需要修改:
1 | { |
其实你可以直接将 .tern-project
文件放在你的主文件夹下面,然后在主文件夹下新建新的工作目录。下面测试一下补全效果:
太棒了!!!
CSS/HTML 配置
CSS/HTML 的自动补全在 .vimrc 文件中加入以下代码即可:
1 | let g:ycm_semantic_triggers = { |
Powerline 插件
Powerline 插件是用来美化状态栏的,如下图所示:
Powerline 插件需要用到 Powerline 字体,我用的是 Monaco for Powerline 字体,到 https://gist.github.com/baopham/1838072 把这个字体下载下来之后安装好即可。这里顺带说一下中文字体最好用微软雅黑,到 http://www.ifunmac.com/2014/08/yahei/ 下载安装好即可。这两个字体安装完成后,在 .vimrc 文件中增加以下设置:
1 | set guifont=Monaco\ for\ Powerline:h14 |
保存设置后重启 MacVim,就可以看到上面红色方框所示的状态栏。
Syntastic 插件
Syntastic 插件是 Vim 的一个语法错误检查插件,详情见它的 GitHub 主页。它让你可以在编译或者运行代码之前看到语法错误。它所支持的语言包括:C/C++/Java/JavaScript/Python/Objective-C/C#/HTML/CSS/TeX 等等,它自身并不会进行语法检查,所以需要与对应语言的语法检查器配合才能进行语法检查,而针对一种语言进行语法检查的检查器有很多种,详情见 https://github.com/scrooloose/syntastic/blob/master/doc/syntastic-checkers.txt。下面先谈谈 Syntastic 插件的基本配置,再分别谈谈我个人针对 C/C++/JavaScript/Python/HTML/CSS 所采用的语法检查器及其配置。
Syntastic 的基本配置
1 | set statusline+=%#warningmsg# |
将以上配置写入 .vimrc 文件中,重启 MacVim。
C 语言配置
针对 C 语言所采用的语法检查器为 GCC,装好 Xcode 之后 Mac 默认装有 GCC,所以直接使用即可,下面是我的配置:
1 | " C Checker |
将以上配置写入 .vimrc 文件中,重启 MacVim,在写代码的过程中有没有错误提示呢?试试就知道了:
不错,真的太棒了,不但有错误提示,而且当你把光标放在错误行的时候,底部的状态栏还有错误信息出现:提示你这行末尾少了一个分号。
C++ 语言配置
仍然用 GCC 做语法检查器,下面是具体的配置:
1 | " C++ Checker |
将以上配置写入 .vimrc 文件中,重启 MacVim 即可看到效果。
JavaScript 语言配置
用 ESLint 作为语法检查器,安装 ESLint 需要首先安装 Node.js,前文已经安装完成,如果没有安装的请首先安装 Node.js,安装完成后,打开终端分别输入以下几条命令:
1 | sudo npm install -g eslint |
然后在你的工作目录创建 .eslintrc 文件,不过最好还是在主文件夹下创建该文件(即 ~/.eslintrc
),将以下配置写入 .eslintrc 文件中:
1 | { |
再接着将以下配置写入 .vimrc 中:
1 | let g:syntastic_javascript_checkers = ['eslint'] |
重启 MacVim,就可以语法检查了。
Python 语言配置
用 flake8 作为语法检查器,需要安装 flake8,首先需要安装 pip。前文已经安装了 pip,如若没有安装,请参照前文。安装完成后,在终端中运行以下命令安装 flake8:
1 | pip install flake8 |
flake8 可以让你的代码符合 PEP8 风格。接着在 .vimrc 文件中加入以下配置:
1 | " Python checker |
这样就可以进行 Python 语法检查了,最后一行的配置忽略了一些警告或错误(E501、E225
是警告或错误对应的代码),如果你想严格遵守标准,不选择忽略的话,也可以把最后一行删掉。
重启 MacVim 生效。
HTML 语言配置
HTML 的语法检查使用的是 HTML tidy,在终端中输入以下命令安装 HTML tidy:
1 | brew install tidy-html5 |
针对 HTML5,在 .vimrc 中加入以下配置后重启 MacVim:
1 | let g:syntastic_html_tidy_exec = 'path/to/html-tidy' " path/to/html-tidy换成你的路径 |
CSS 语言配置
CSS 的语法检查使用的是 CSSLint,安装 CSSLint 同样需要首先安装 Node.js ,如前所示。在终端中运行以下命令:
1 | sudo npm install -g csslint |
安装完成之后,CSS 语法检查即设置完成。
对于 CSS,还推荐安装的三个插件分别是:vim-less、vim-coloresque、 vim-css3-syntax,它们分别是干嘛的在其 GitHub 主页上都有说明。
indentLine 插件
这个插件用来干嘛的呢?用一张图说话吧!
没错,就是用来显示缩进级别的。我对这款插件的设置很简单,在 .vimrc 中就加入如下一行代码即可:
1 | let g:indentLine_char = '┊' |
如果需要插件使用 Patched font 产生上图所示的那种缩进符号效果(毕竟以上语句所设置的缩进符号看起来太丑),请继续阅读我另一篇针对此插件的补充内容:Vim 中 indentLine 插件修改对齐字符。
Command-T 插件
这款插件的作用 官方 是这么说的:
Command-T is a Vim plug-in that provides an extremely fast “fuzzy” mechanism for:
Opening files and buffers
Jumping to tags and help
Running commands, or previous searches and commands
with a minimal number of keystrokes.
这个插件通过 Vundle 安装好之后,需要在 shell 中运行一下三行命令:
1 | cd ~/.vim/bundle/command-t/ruby/command-t |
为这个插件设置一个快捷键,写入 .vimrc 中:
1 | " 设置调出 command-t 的快捷键为 ctrl+w 加 ctrl+f |
重启 MacVim 后,效果如图:
vim-instant-markdown 插件
请参考这个插件的 GitHub主页。这个是装着玩的,好用的 Markdown 编辑器那么多,个人感觉用 Atom 写 Markdown 是最好的,而且 Atom 安装插件之后也支持 vim 模式,插件极其丰富。并且,个人以为 Atom 做前后端比 Vim 爽,比 Sublime Text 也好,有兴趣的可以折腾折腾。
SimpylFold 插件
这个是 Python 折叠插件,由于 Python 是按照缩进来区分代码段的,所以 Python 的代码折叠逻辑也就显得尤为重要。
下面是与 Python 的代码折叠相关的一些配置:
1 | " 激活代码折叠,快捷键 za |
写入 .vimrc 中,重启 MacVim 后就会发现敲击快捷键 za 就能对 Python 函数进行折叠了。
关于 Python 的一些其他设置
1 | " 进行 Python 开发时使用 utf-8 编码 |
将以上内容一道写入 .vimrc 中。
Emmet 插件
做前端的人都知道这是个什么东西,这里就不多说了,教程参见 http://docs.emmet.io/cheat-sheet/。
vim-jsbeautify 插件
这个插件可以用来一键格式化你的 JavaScript/HTML/CSS 代码,要求先装有 Node.js,再安装 js-beautify,按前文先安装 Node.js,再在终端中输入以下命令安装 js-beautify:
1 | sudo npm -g install js-beautify |
然后在 .vimrc 中写入以下配置:
1 | " vim-jsbeautify 配置,按 ctrl-f 一键格式化你的代码 |
重启 MacVim,按组合键 ctrl-f 就可以使用这个插件了。
vim-autopep8 插件
这个插件用来格式化你的 Python 代码,使之符合 PEP8 标准。在安装这个插件之前,首先需要安装 pep8,在终端中输入以下命令:
1 | pip install --upgrade autopep8 |
安装好 autopep8 之后,这个插件就可以使用了。在 MacVim 中打开一个 Python 文件,按 F8 就可以一键格式化你的 Python 代码。建议在每次写完你的 Python 程序后都首先按一下 F8 键进行代码格式化。
如果不需要显示格式化前后差异的话,请在 .vimrc 中加入以下配置:
1 | " vim autopep8 不显示格式化前后的差异的窗口 |
NERD Tree 插件
NERD Tree 插件是干嘛的呢?就是我的 MacVim 截图中的目录树结构:
安装这个插件,首先需要安装 pathogen.vim,在终端中运行以下命令进行安装:
1 | mkdir -p ~/.vim/autoload ~/.vim/bundle && \ |
安装完成之后,再在终端中运行以下命令:
1 | cd ~/.vim/bundle |
NERD Tree 即安装完成,下面是我在 .vimrc 中针对该插件的配置:
1 | " 此插件会自动配置 'path' 选项 |
重启 MacVim 就可以看到效果了。
Conque Shell 插件
这个插件可以让你在 MacVim 中运行 shell,见下图:
首先到 这儿 下载最新版本的 conque,将其解压缩后,将得到如下四个文件夹:
将这四个文件夹中的所有文件均移动至 ~/.vim
文件下的对应文件夹下面(如果没有对应的文件夹请新建),即安装完成,安装完成后,在 MacVim 中运行 :ConqueTermSplit bash
即可得到以上截图所示的界面。
关于 ctags
ctags 可以为你的项目生成函数索引,当你需要查看某个函数的源代码时只需要在 taglist 窗口中选择该函数并回车即可,如图所示:
首先在终端中用以下命令安装 ctags:
1 | brew install ctags |
ctags 安装完成后需要安装 taglist 插件,去 这儿 下载最新版本的 taglist 插件,解压缩后,打开解压缩后的文件,将 plugin
文件夹下的 taglist.vim
移动至 ~/.vim/plugin
文件夹下,将 doc
文件夹下的 taglist.txt
移动至 ~/.vim/doc
文件夹下。这样,taglist 插件安装完成,下面在 .vimrc 文件中写入配置:
1 | " 设置 ctags 命令的位置 |
上面 ctags 命令的位置请替换成你自己的。重启 MacVim 即可工作。
一键编译/调试/运行
针对 C/C++/Java/Python 一键编译/调试/运行相关的内容,写入 .vimrc 配置文件中:
1 | """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
gdb 调试需要安装 gdb,在终端中输入以下命令:
1 | brew install gdb |
好了,这篇文章到此结束,Vim 水很深,上面所介绍的还仅仅只是 Vim 千奇百怪的用法之中的一小部分,对于 Java 和其他语言设置的内容还没有介绍,Java 的自动补全请参照 Eclim,后续随着学习的深入会陆续补充本文的内容。