使用VIM作为IDE

Windows环境

插件管理器

VIM的插件管理器主要有vim-plug和vundle

Vim-plug

  1. 首先下载vim-plug,可以去github下载

  2. 下载完成后解压压缩包将plug.vim复制到vim安装目录下的autoload文件夹下,即可完成vim-plug的安装。

  3. 使用管理员身份运行gvim,,然后点击gvim的“编辑”——“启动设定”,打开_vimrc配置文件。

插件安装示例

在_vimrc中添加如下的内容,这里以vim-plug下载nerdtree插件为例。设置完成后保存设置。

1
2
3
call plug#begin('~/.vim/plugged') "插件保存的目录
Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'} "NERDTree插件
call plug#end()

常用操作

命令 解释
:PlugStatus 查看插件安装状态
:PlugInstall 安装在_vimrc中配置的插件。注意命令的大小写,执行后vim-plug会自动克隆并安装插件
:PlugUpdate 更新插件
:PlugClean 清理插件(需要先在_vimrc中删除或注释)
:PlugUpgrade 更新vim-plug

Vundle

  1. 首先下载vundle,可以去github下载

  2. 下载完成后解压压缩包到vim安装目录下的bundle文件夹下(没有就新建),即可完成vundle的安装。

  3. 使用管理员身份运行gvim,,然后点击gvim的“编辑”——“启动设定”,打开_vimrc配置文件。

插件安装示例

在_vimrc中添加如下的内容,这里以vundle下载nerdtree插件为例。设置完成后保存设置。

1
2
3
4
5
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'scrooloose/nerdtree'
call vundle#end()

常用操作

命令 解释
:PluginList 查看插件安装状态
:PluginInstall 安装在_vimrc中配置的插件。注意命令的大小写,执行后vundle会自动克隆并安装插件
:PluginUpdate 更新插件
:PluginClean 清理插件(需要先在_vimrc中删除或注释)
:PluginSearch 搜索插件,例如:PluginSearch xml可以搜到xml相关的插件

Python自动补全

Python自动补全插件这里主要使用jedi-vim,具体配置步骤如下:

在_vimrc中添加如下的内容,设置完成后保存设置。

1
2
3
4
"插件管理 vim-plug
call plug#begin('~/.vim/plugged') "插件保存的目录
Plug 'davidhalter/jedi-vim',
call plug#end()

然后在gvim中输入:PlugInstall安装jedi-vim插件

注意:

  1. Vim和版本一定要和Python相匹配,即32位Vim配32位Python, 64位Vim配64位Python。

  2. Vim使用Python编译的版本一定要和电脑上安装的Python版本对应,可能会出现如下错误:

1
Error: jedi-vim failed to initialize Python: jedi-vim requires Vim with support for Python 2 or 3. (in function jedi#init_python[4]..48_init_python, line 10)

或者在gvim中输入:python3 print("Hello world")出现如下类似的错误:

1
2
E370: Could not load library python37.dll
E263: Sorry, this command is disabled, the Python library could not be loaded.

那么可以在_vimrc中添加如下命令指定Python3版本:

1
set pythonthreedll=python36.dll

由于笔者安装的vim8.1使用的是Python3.7编译,但是电脑环境装的是Python3.6,我们可以通过上面配置来解决Windows环境中gvim不支持python3.6的问题。

C/C++自动补全

C/C++自动补全插件这里主要使用ctags + OmniCppComplete方案,具体配置步骤如下:

Ctags 全名 Exuberant Ctags,是一个独立的程序。它可以为各种语言的源代码生成语言元素(language object)索引文件。对于 C/C++ 而言,就是把源代码中的各种宏、函数、类、类成员等等元素和它们的相关信息生成索引文件,供其它程序使用。OmniCppComplete 是专为 C/C++ 编写的OmniComplete一个补全脚本,它根据 Ctags 生成的索引文件对代码进行补全。

安装Ctags

  1. Ctags官网下载 Ctags 可执行文件
  2. 将下载到的文件(仅 EXE 文件即可)解压到一个目录,例如 C:/ctags
  3. 将该目录加入环境变量 PATH

生成索引文件

以生成 C++ 标准库索引文件为例:

  1. 下载专为 Ctags 修改过的 libstdc++ 头文件

  2. 将其解压到一个目录,例如 C:/ctags/cpp_src

  3. 使用命令行进入 D:/ctags/cpp_src 后执行:

1
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f cpp .

建议将上一步生成的 C:/ctags/cpp_src/cpp 文件放到一个专门放置索引文件的目录以便后面的统一设置,例如放到 C:/ctags/tags

其它库的索引文件也可以依法炮制,只需切换到该库的 include 文件夹,执行:

1
ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f <文件名> .

安装OmniCppComplete

  1. 使用插件管理器安装OmniCppComplete
  2. 修改VIM配置文件_vimrc,加入如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
" ctags 索引文件
set tags+=C:/ctags/tags/cpp " 指定tags存放路径
" OmniCppComplete
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1 " 输入 . 后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" 自动关闭补全窗口
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest
filetype plugin indent on

在插入模式编辑 C/C++ 源文件时按下 . 或 -> 或 ::,或者手动按下 Ctrl+X Ctrl+O 后就会弹出自动补全窗口,此时可以用 Ctrl+N 和 Ctrl+P 上下移动光标进行选择。

自动生成tags文件

omni插件的补全是依赖于tags文件的,因此需要我们手动建立tags文件:

1
ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++

我们可以通过下面的代码让vim在保存文件后自动生成tags文件:

1
au BufWritePost *.c,*.cpp,*.cc,*.h silent! !ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++

其中silent!表示静默运行命令,不然每次保存文件的时候,Vim 总是会有一个”ctags 执行完毕“的提示,按任意键确认。

生产力插件

Python代码检查:flake8

  1. 实用插件管理器安装flake8
  2. 配置_vimrc文件
1
au BufWritePost *.py call Flake8()

注释/取消注释:vim-commentary

这个插件可以快速注释与反注释多行内容, 但是它的注释符使用的是 commentstring, 默认是 / %s /, 但这个值满足不了Python 和 Shell这样的语言, 在 _vimrc 添加如下内容

1
2
3
4
"为python和shell等添加注释
autocmd FileType python,shell,coffee set commentstring=#\ %s
"修改注释风格
autocmd FileType java,c,cpp set commentstring=//\ %s

普通模式下gcc 指令可以注释/取消注释

可视模式下gc 命令可以注释/撤销注释

缩进提示:indentLine

indentLine是一款Vim下用于显示缩进指示线的插件。对于Python、Golang等靠代码缩进来标识代码块的语言来说,indentLine提供的缩进指示功能非常有用。indentLine安装之后即可使用,不需要额外的配置。

设置indentLine:

1
2
3
set list lcs=tab:\|\ " 最后面有空格
let g:indentLine_leadingSpaceChar = '.'
let g:indentLine_leadingSpaceEnabled = 1

实用配置

代码折叠

1
2
3
" Enable folding
set foldmethod=syntax " 语法折叠
set foldlevelstart=99 " 关闭自动折叠

zc 关闭折叠
zo 打开折叠
za 打开/关闭折叠互相切换

系统剪贴板

通常Vim会忽视系统剪贴板,而使用自带的剪贴板。但是有时候你想从Vim之外的程序中剪切、复制、粘贴文本。你可以通过这行代码访问你的系统剪贴板:

1
set clipboard=unnamed

禁止生成缓存文件

每次输入保存命令之后系统都会生成以.un~和.bak结尾的文件,我们可以通过下面的配置禁止vim生成undo文件和备份文件:

1
2
3
set noundofile
set nobackup
set noswapfile

主题插件

主题插件推荐使用flazz/vim-colorschemes

可以使用vim-plug安装,然后再配置_vimrc文件,例如在配置文件中增加下面的代码:

1
colorscheme wombat

Mac & Linux环境

插件管理器安装

使用如下命令安装plug-vim插件:

1
2
3
mkdir -vp ~/.vim/autoload/
cd ~/.vim/autoload/
wget https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

安装示例

仍然以NERDTree插件安装为例:

编辑配置文件vim ~/.vimrc

1
2
3
4
"插件管理 vim-plug
call plug#begin('~/.vim/plugged') "插件保存的目录
Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'} "NERDTree插件
call plug#end()

其他操作和Windows系统相同。

显示 Gitment 评论