前言

在记录开始之前,我想先介绍一下vim和gvim。

vim和gvim

    Vim诞生的具体时间虽然没有具体的说明,但是最初创建它的原因据说是因为作者在新购入的计算机这当中并没有找到他熟悉的编辑器Vi,而Vim的诞生,起初是为了完全复制Vi的功能,但是在1992年1.22版本的Vim被移植到UNIX和MS-DOS上时开始,Vim的全名就改为Vi IMproved,此前,Vim的全名为Vi IMitation,也就是从这时起,Vim加入了不计其数的新功能。
    Vim作为从Vi里面发展出来的类Vi中最优秀的一款编辑器,拥有代码补全、编译及错误跳转等方便编程的各类功能和插件,在程序员和文档编辑的工作人员中被广泛的使用着,同时也作为无GUI系统上最强的编辑器之一的存在(另一个为Emacs),Vim的操作完全可以不依赖于鼠标进行编辑,使用户的双手可以一直在打字区悬留,且各类插件强大功能的支撑下,Vim赢得了编辑器之神的美誉。
    Vim虽然强大,但是从设计之初都只是为了在类UNIX的系统上运行,所以没有GUI也不兼容大多数有GUI的系统,为此,GVim诞生了,GVim拥有对用户较为友善的GUI,且在各大主流平台都有相应的安装包,将Vim完美的兼容到了各个主流平台,并且GUI也使得Vim的门槛也变得比较低,不再是曾经那个不看完说明书都不知道怎么保存退出的编辑器。

环境搭建

因为GVim和其插件以及MinGW对系统环境的要求并不严格,基本上都可以通过安装器直接安装并运行,所以这个环节没有任何内容,可以直接跳过。

MinGW安装

因为是作为C/C++的IDE,所以还需要在windows平台上安装C/C++的编译器,同样,在安装之前,先简单的介绍一下MinGW这个编译器。因为都是些老生常谈且比较浅显的东西,了解MinGW这个编译器的可以跳过介绍部分直接看安装。

    MinGW, a contraction of “Minimalist GNU for Windows”, is a minimalist development environment for native Microsoft Windows applications.
    MinGW provides a complete Open Source programming tool set which is suitable for the development of native MS-Windows applications, and which do not depend on any 3rd-party C-Runtime DLLs. (It does depend on a number of DLLs provided by Microsoft themselves, as components of the operating system; most notable among these is MSVCRT.DLL, the Microsoft C runtime library. Additionally, threaded applications must ship with a freely distributable thread support DLL, provided as part of MinGW itself).
    因为本人的英语水平所限,不对这部分进行翻译,大致意思就是MinGW是一个不依赖于外部C的类库,本身自带了所需的,系统没有的部分类库的一个极简的开发环境。

安装

  1. 下载
    • 曾经有一段时间MinGW的官网http://www.mingw.org/是无法在国内访问的,但是在我编撰这篇记录的时候,我又重新尝试访问了MinGW的官网,结果竟然成功了,在官网里面可以直接找到下载的地址,如果官网不能访问的话,也可以在其它地方进行下载,大部分时候下载到的都是安装器,自带更新检测,所以不用太担心下载不到最新的问题。
  2. 安装MinGW
    • 最开始会选择安装的路径,后面所有下载到的资源文件都放在这个文件夹,所以尽量不要选择空间小的磁盘
    • 在最开始会下载一些基本的信息,然后打开新的下载页面
    • 选择需要安装的组件,我这里推荐无脑下载MinGW一开始推荐的列表上的所有组件,基本上后续的一些简单的开发都不会遇到编译上面的问题,后面再将需要的组件手动补齐即可,当然,熟悉的人自己选择所需的组件即可
    • 等待下载,下载完即可使用
  3. 配置环境变量
    • 新建新的系统变量MINGW_HOME存储MinGW的根目录,例如D:\MinGW
    • 在系统变量Path中添加%MINGW_HOME%\bin

注意事项:
    虽然不是每个人都会遇到下载失败的问题,但是还是要简单的提一下,因为目前下载器不能自己指定镜像,也不能设置代理,所以基本上是靠自己的网络状况来下载,不过部分可以全局代理的VPN是一个不错的选择,也可以在下载失败之后,记录下失败的文件,手动下载完之后放到自动创建的文件夹底下,下次启动下载器是会检查已下载的文件,存在则跳过下载环节,不过因为我是可以直接下载成功的(虽然下载失败了很多次,但是我重新下载了数次之后将失败的全部都下载下来了),所以对于手动下载的具体操作我也说不好,大家可以自行百度。

GVim安装

  1. 下载

  2. 解压

  3. 配置环境变量

    • 新建新的系统变量VIM_HOME

    接下来就是重头戏了,Vim之所以强大是因为他的可扩展性十分强大,还拥有专门的脚本语言,极大的增强了插件的功能

GVim插件的安装

在开始安装插件之前,我想先把我现在安装了的插件和其功能贴出来,方便大家参阅。

    这里的功能不完全是插件的功能,而是我在配置我的gvim中所使用的插件的功能,还有许多重要的功能我并没有写出来,同样,等级也是对我自己的gvim来说的重要等级,每个人可以按照自己的需求和对插件的了解重新评估这个等级。

  • vundle
    • 功能:vundle是需要第一个安装的插件,虽然不是安装插件的必然插件,但是可以省下基本的查找、下载、安装的步骤,并且只需要知道名字或者github的链接就可以了。
    • 等级:必要
  • SuperTab
    • 功能:根据已存在的内容自动补全
    • 等级:重要
  • TagList
    • 功能:taglist是一个用于显示定位程序中各种符号的插件,例如宏定义、变量名、结构名、函数名这些东西 我们将其称之为符号(symbols),而在taglist中将其称之为tag。显然,要想将程序文件中的tag显示出来,需要事先了解全部tag的信 息,并将其保存在一个文件中,然后去解析对应的tag文件。taglist做的仅仅是将tag文件中的内容解析完后显示在Vim上而已。
    • 等级:必要
  • NERDTree
    • 功能:NERDTree是一个用于浏览文件系统的树形资源管理外挂,它可以让你像使用Windows档案总管一样在VIM中浏览文件系统并且打开文件或目录。
    • 等级:必要
  • WinManager
    • 功能:窗口管理,可以将TagList和NERDTree都控制在同一边并分上下屏,美观还省地方
    • 等级:必要
  • Vim-airline
    • 功能:这是一款状态栏增强插件,可以让你的Vim状态栏非常的美观,同时包括了buffer显示条扩展smart tab line以及集成了一些插件。
    • 等级:重要
  • OmniCppComplete
    • 功能:C/C++方法自动补齐,但是不打算把Vim当做一个C/C++开发的IDE的话不需要改插件
    • 等级:非必要/必要

    还有一个不能再Vundle里面安装的插件,ctags,推荐在github上面安装较新版本,ctags 5.8版本不能对更深的层级做递归,在生成Java源码和Java项目源码的tags时,只能生成一部分,需要注意一下

Vundle安装

    Vundle是vim的插件管理器,只要安装完了Vundle,剩下的插件基本上就是一行命令的事情,所以,第一个安装的插件应该是Vundle(其实还有其他的插件管理器,不过我也没有用过,所以就不对其他的插件管理器做介绍了,有兴趣的可以自己百度),而Vundle插件的安装则依赖于Git和curl。

安装步骤

  1. 下载Git和Curl
  2. 安装Git,将Curl.exe的位置加入系统变量Path中或者将Curl.exe放入System32下。
  3. 检测环境
    • 在控制台输入git --versioncurl --version对两个工具进行检测,返回相应的版本信息则表示工具安装完成。
  4. 安装Vundle
    • 在控制台中输入$ git clone https://github.com/gmarik/vundle.git D:/vim/vim81/bundle/vundle等待自动下载和安装

Ctags

    Ctags绝对算得上一个重量级的插件,只要你想要把你的Vim打造成一个强大且适合你自己的IDE,毕竟他可以让你在各个方法和类当中随意跳转,无所拘束,但同时也是一个比较难控制的一个插件,关于这个插件的用法我几乎可以在写一篇,但那是另一篇了,这篇里面我就不多做赘述了。接下来简单讲一下Ctags的安装。

  1. 下载
    • 在我写这篇文章的时候,百度出来的Ctags官网只能下载到5.8的版本,但是这个版本对层级比较深的源码,使用递归获取(指令-R)是拿不到的,所以要在GitHub上面下载更新的版本才能解决这个问题。
    • Github上Ctags的地址:https://github.com/universal-ctags/ctags-win32/releases
  2. 解压
  3. ctags.exe所在的目录地址存入系统变量中

通过Vundle安装剩下的插件

    因为剩下的插件安装除了ctags基本上都可以通过Vundle安装,所以这里贴出我之前提到的插件的配置和安装指令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
" =========================== Plugin Config Start =========================== "

" ============ Ctags Config Start ============ "

" 设置tags位置,这里要注意一点!+= 两遍不能有空格!否则VIM无法解析! "
" C/C++源码的tags "
set tags+=$TAGS\_HOME/c\_cpp/systags
" Java源码的tags
" set tags+=$JAVA\_HOME/src/Java8Src

" ============ Ctags Config End ============ "

" ============ TagList Config Start ============ "

" 指定taglist需要使用的ctags的地址,如果不指定该地址,taglist可能无法使用
let Tlist\_Ctags\_Cmd = 'D:\vim\ctags\ctags.exe'
" taglist同时只展示1个文件的sysmbol列表,0 支持展示多个 "
let Tlist\_Show\_One\_File=1
" 0的话就是显示在左边, 1 是右边 "
let Tlist\_Use\_Right\_Window=0
" 当taglist是最后一个窗口时,自动退出Vim "
let Tlist\_Exit\_OnlyWindow=1
" 实时更新tags "
let Tlist\_Process\_File\_Always=1

" ============ TagList Config End ============ "

" ============ JavaComplete2 Config Start ============ "

autocmd FileType java setlocal omnifunc=javacomplete#Complete

" ============ JavaComplete2 Config End ============ "

" ============ WinManager Config Start ============ "

" 设置要管理的组件,并对NERDTree组件进行设置,如果不设置,则不能使用winManager启动NERDTree "
let g:NERDTree\_title='NERD Tree'
let g:winManagerWindowLayout='NERDTree|TagList'
function! NERDTree\_Start()
exec 'NERDTree'
endfunction

function! NERDTree\_IsValid()
return 1
endfunction

" 绑定F2到winmanager,并在启动时关闭额外自动打开的缓冲区 "
nmap \<silent\> \<F2\> :if IsWinManagerVisible() \<BAR\> WMToggle\<CR\> \<BAR\> else \<BAR\> WMToggle\<CR\>:q\<CR\> endif \<CR\>

" ============ WinManager Config End ============ "

" =========================== Plugin Config End =========================== "

" =========================== Plugin Install Start =========================== "

" 设置包括vundle和初始化相关的runtime path
set rtp+=$VIM\_HOME/bundle/Vundle.vim
call vundle#begin()
" 让vundle管理插件版本,必须 "
Plugin 'VundleVim/Vundle.vim'
" 自动补全 "
Plugin 'SuperTab'
" taglist是一个用于显示定位程序中各种符号的插件,例如宏定义、变量名、结构名、函数名这些东西 我们将其称之为符号(symbols),而在taglist中将其称之为tag。显然,要想将程序文件中的tag显示出来,需要事先了解全部tag的信 息,并将其保存在一个文件中,然后去解析对应的tag文件。taglist做的仅仅是将tag文件中的内容解析完后显示在Vim上而已。 "
Plugin 'taglist.vim'
" NERDTree是一个用于浏览文件系统的树形资源管理外挂,它可以让你像使用Windows档案总管一样在VIM中浏览文件系统并且打开文件或目录。 "
Plugin 'https://github.com/scrooloose/nerdtree.git'
" 窗口管理 "
Plugin 'WinManager'
" 这是一款状态栏增强插件,可以让你的Vim状态栏非常的美观,同时包括了buffer显示条扩展smart tab line以及集成了一些插件。 "
Plugin 'Vim-airline'
" C/C++方法自动补齐 "
Plugin 'OmniCppComplete'
" Java代码自动补全
" Plugin 'artur-shaik/vim-javacomplete2'
" 你的所有插件需要在下面这行之前,必须 "
call vundle#end()
" 必须 加载vim自带和插件相应的语法和文件类型相关脚本 "
filetype plugin indent on
" =========================== Plugin Install End =========================== "

vundle的基本命令

在vim的命令行模式下,直接输入

  • :PluginInstall 安装插件
  • :PluginList 查看已安装软件
  • :PluginClean 清除列表中没有的插件
  • :h vundle 查看帮助

或者在控制台直接输入

  • vim +PluginInstall +qall 安装插件

结语

    以上就是搭建一个最最最基本的C/C++的IDE的基本教程,需要注意的是,我的配置文件里面也提到了Java代码自动补齐的插件,如果需要使用该插件,请确保自己的Vim支持Python(Python2或者Python3都可以),可以先在Vim的命令模式中输入:python print("hello world"),如果成功在输出的话,而不是提示缺少pythonxx.dllxx指代数字,一般是版本号)的话,就是支持python且电脑已经安装了python环境,如果提示缺少dll,根据最后的数字下载安装就可以了,还有就是在控制台输入vim --version,如果是+号就代表支持,-号代表不支持,也就是说,+python/+python/dyn就是支持python2,python3/python3/dyn就是支持python3。
    如果出现不支持python环境的情况的话(虽然按照我的教程的地址下一般不会出现这个问题,但一定有些人已经有了自己的vim,所以还是要说一下),一般来说有两种办法,一个是重编译vim,使其支持python,好处是能够自己选择vim支持的python的版本,坏处就是windows上面基本没办法重编译,难度很高,另一个办法就简单点,重新下一个,反正vim最核心的还是配置文件和自己的脚本,迁移过来就好了,没有什么影响的。