前言
我们在服务器上做开发时,可以选择使用字符界面或者GUI界面。
由于远程GUI界面比较吃资源,因此其流畅度和本地操作系统的GUI界面相差甚远,使用体验往往不尽人意。
因此,一般首选字符界面做开发,VIM 编辑器是字符界面下的一款神器。
VIM 编辑器在配置好各种插件后,可以媲美 Windows 下功能强大的 IDE 而又不显得臃肿。
本文的配置非常方便快捷,Ubuntu 下只需通过 apt 安装 ctags 和 cscope,再修改 .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
来源:CSDN
作者:swings_ss
链接:https://blog.csdn.net/zhwenx3/article/details/103914420