将VIM配置为IDE

别来无恙 提交于 2020-01-24 04:23:55

前言

我们在服务器上做开发时,可以选择使用字符界面或者GUI界面。

由于远程GUI界面比较吃资源,因此其流畅度和本地操作系统的GUI界面相差甚远,使用体验往往不尽人意。

因此,一般首选字符界面做开发,VIM 编辑器是字符界面下的一款神器。

VIM 编辑器在配置好各种插件后,可以媲美 Windows 下功能强大的 IDE 而又不显得臃肿。

本文的配置非常方便快捷,Ubuntu 下只需通过 apt 安装 ctagscscope,再修改 .vimrc 配置文件即可,几分钟内就能将 VIM 配置成 IDE。

本文配置的 VIM 编辑器的最终效果如下图,使用了 NerdTree、TagList、MiniBufExplorer、SourceExplorer 这几个插件。
最终效果

安装 ctags 和 cscope

在命令行输入下面两条命令安装 ctags 和 cscope:

$ sudo apt install ctags
$ sudo apt install cscope

使用 ctags 和 cscope 在代码目录下生成符号库,可以帮助我们在 VIM 编辑器中查找变量、函数等的定义,进行跳转。

上面两条命令执行完毕后,进入代码项目所在目录,执行下面的命令生成 tags 文件:

$ ctags -R .

执行下面的命令生成 cscope 的符号索引数据库:

$ cscope -Rbkq

该命令执行完毕后,在目录下会生成 cscope.out、cscope.in.out、cscope.po.out 这三个文件。

cscope 默认只处理 C/C++ 代码文件,若要处理其它编程语言的代码文件,需要将文件的路径添加到 cscope.files 文件,再生成 scope 符号索引数据库文件,如下:

$ find . -name "*.[c|h|py|java]" > cscope.files 
$ cscope -bkq -i cscope.files

在 .vimrc 中如下配置,打开 VIM 编辑器时可以自动加载当前目录下的符号索引数据库文件:

# ctags
set tags=./tags;,tags " ./tags; 表示递归向上寻找 tags 文件
# cscope
if has("cscope")
    set csprg=/usr/bin/cscope
    set csto=0
    set cst
    set nocsverb
    if filereadable("cscope.out")
        cs add cscope.out
    endif
    set csverb
endif

安装和配置插件

本文通过 vundle 安装和管理插件。

安装 vundle 命令:

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

在 .vimrc 的文件头加入如下配置:

# Vundle 插件管理器
filetype off
set rtp+=~/.vim/bundle/Vundle.vim/
# 要安装的插件列表写在 call vundle#begin() 和 call vundle#end() 中间
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'taglist.vim'
Plugin 'fholgado/minibufexpl.vim'
Plugin 'wesleyche/SrcExpl'
Plugin 'scrooloose/nerdtree'
call vundle#end()
filetype plugin indent on

保存并关闭 .vimrc 文件,打开 VIM 编辑器,键入 :PluginInstall,vundle 就会帮我们安装前一个步骤写在 .vimrc 中的插件,知道 VIM 的左下角显示 “Done” 时,插件安装完成。

随后依次在 .vimrc 文件中配置安装好的插件。

NerdTree

nerdtree 目录树插件可以让我们方便地浏览项目的目录结构。

其不需要太复杂的配置,只需按个人喜好设置打开/关闭的快捷键:

map <C-n> :NERDTreeToggle<CR>

按住 CTRL,再按 n 键即可打开/关闭目录树插件。

MiniBufExplorer

minibufexplorer 插件可以记录打开过的文件。

配置如下:

let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapCTabSwitchWindows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
let g:miniBufExplForceSyntaxEnable = 1
let g:miniBufExplMoreThanOne = 0

SourceExplorer

sourceexplorer 在编辑器下方打开一个窗口,显示光标所指变量、函数等符号的出处。

配置如下:

map <C-e> :SrcExplToggle<CR>
let g:SrcExpl_winHeight = 8
let g:SrcExpl_refreshTime = 100
let g:SrcExpl_gobackKey = "<SPACE>"
let g:SrcExpl_jumpKey = '<ENTER>'
let g:SrcExpl_isUpdateTags = 0

本文配置按住 CTRL,再按下 e 键打开/关闭 sourceexplorer。

TagList

taglist 插件在一个打开的窗口中显示代码文件出现的符号,如函数、结构体等。

配置如下:

map <C-t> :TlistToggle<CR>
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
let Tlist_Show_One_File = 1
let Tlist_Inc_WinWidth = 0
let Tlist_Exit_OnlyWindow = 1
let Tlist_Auto_Open = 0
let Tlist_Use_Right_Window = 1

本文配置按住 CTRL,再按下 t 键打开 taglist。

完整的 .vimrc 文件

" Vundle 插件管理器
filetype off
set rtp+=~/.vim/bundle/Vundle.vim/
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'taglist.vim'
Plugin 'fholgado/minibufexpl.vim'
Plugin 'wesleyche/SrcExpl'
call vundle#end()
filetype plugin indent on

" =================================================================

" NerdTree 插件
" 目录插件快捷键
map <C-n> :NERDTreeToggle<CR>

" =================================================================

" ctags
set tags=./tags;,tags " ./tags; 琛ㄧず閫掑綊鍚戜笂瀵绘壘 tags 鏂囦欢

" =================================================================

" cscope
if has("cscope")
    set csprg=/usr/bin/cscope
    set csto=0
    set cst
    set nocsverb
    if filereadable("cscope.out")
        cs add cscope.out
    endif
    set csverb
endif

" =================================================================

" taglist
map <C-t> :TlistToggle<CR>
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
let Tlist_Show_One_File = 1
let Tlist_Inc_WinWidth = 0
let Tlist_Exit_OnlyWindow = 1
let Tlist_Auto_Open = 0
let Tlist_Use_Right_Window = 1

" =================================================================

" source explorer
map <C-e> :SrcExplToggle<CR>
let g:SrcExpl_winHeight = 8
let g:SrcExpl_refreshTime = 100
let g:SrcExpl_gobackKey = "<SPACE>"
let g:SrcExpl_jumpKey = '<ENTER>'
let g:SrcExpl_isUpdateTags = 0

" =================================================================

" minibufexplorer
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapCTabSwitchWindows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
let g:miniBufExplForceSyntaxEnable = 1
let g:miniBufExplMoreThanOne = 0

" =================================================================

" 常规设置
" 语法高亮
syntax enable
" 开启语法高亮
syntax on
" 检测文件类型
filetype on
" 针对不同的文件,采用不同的缩进方式
filetype indent on
" 允许插件
filetype plugin on
" 设置取消备份,禁止临时文件生成
set nobackup
set noswapfile
" 显示当前行号和列号
set ruler
" 左下角显示当前vim模式
set showmode
" 显示行号
set number
" 设置代码匹配,包括括号匹配情况
set showmatch
" 设置搜索高亮
set hls
" 设置C/C++方式自动对齐
set autoindent
set cindent
set smartindent
" 设置tab宽度
set tabstop=4
" 设置自动对齐空格数
set shiftwidth=4
" 编辑的时候将所有tab设置为空格
set et
" 代码折叠方式
set foldmethod=indent
" 默认不折叠
set foldlevelstart=99
" 代码折叠快捷键
nnoremap <C-a> za
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!