首页 > 其他分享 >Vim配置成类似source insight的IDE

Vim配置成类似source insight的IDE

时间:2024-02-04 17:34:00浏览次数:27  
标签:SrcExpl set tags -- insight vim source let IDE

前言

基本安装

sudo apt-get install vim vim-scripts vim-doc

vim-scripts是vim的一些基本插件,包括语法高亮的支持、缩进等等。

1 ctags + taglist安装配置

1.1 ctag作用

ctags 最先是用来生成C代码的tags文件,后来扩展成可以生成各类语言的tags, 有些语言也有专有的tags生成工具(比如java的jtags, python的 ptags),因此ctag用来进行vim阅读源码时进行函数,变量的快速定位跳转。

1.2 安装ctags

sudo apt-get install ctags

1.3 安装taglist

taglist_46.zip压缩包:解压到~/.vim目录下即可。
https://www.vim.org/scripts/script.php?script_id=273

mkdir ~/.vim
cd ~/.vim
unzip taglist_46.zip

1.4 创建tags文件

$ctags -R --c++-kinds=+p+l+x+c+d+e+f+g+m+n+s+t+u+v --fields=+liaS --extra=+q
如果为了简单,也可以只进行:
$ctags -R *
不过,这种成员变量没有包含在里面。所以可能有些对象的成员时无法跳转。

1.4.1配置选项

  $ ctags -R               #递归的为当前目录及子目录下的所有代码文件生成tags文件 (推荐使用此命令)
  $ ctags filename.c filename1.c file.h  #为当前目录某些源码生成tags文件
  $ ctags *.c *.h              #为当前目录所有.c, .h源码生成tags文件

  为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是:ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
  其中:
	选项c++-kinds 用于指定C++语言的 tags记录类型,  --c-kinds用于指定c语言的,  通用格式是  --{language}-kinds
	选项 fileds 用于指定每条标记的扩展字段域
	extra 选项用于增加额外的条目:   f表示为每个文件增加一个条目,  q为每个类增加一个条目

1.5 配置.vimrc

"--------------display-----------------
set nu                          "行号
syntax on                       "语法高亮
set ruler                       "显示当前行和列
set showcmd                     "显示部分命令
set showmode            "最后一行显示当前模式
"set match                      "显示括号匹配
"--------------display-----------------

"---------------input------------------
set smartindent         "自动缩进
set expandtab           "将tab转化为空格
set smarttab            "插入tab使用shiftwidth
set shiftwidth=4        "缩进列数为4
"---------------input------------------

"---------------search-----------------
set hlsearch            "搜索结果高亮显示
"set inccase                    "预览搜索结果
set ignorecase          "不区分大小写
set smartcase           "当有大写字母时区分大小写
"---------------search-----------------

"---------------encoding----------------
set encoding=utf-8              "设置编码格式
set fileencodings=utf-8,gb18030,gbk,gb2312,big5
set termencoding=utf-8


"--------------ctags----------------
set tags=tags;
set autochdir        "通用方式,如果没有找到tags文件,或者没有找到对应的目标,就到父目录中查找,一直向上递归。
"--------------ctags----------------


"--------------taglist----------------
let Tlist_Use_Left_Window=1             "vim左侧窗口显示Taglist
let Tlist_Exit_OnlyWindow=1             "Taglist是最后一个窗口是退出vim
let Tlist_WinWidth=60           "设置Taglist窗口宽度为60
nmap <F2> :Tlist<CR>                    "设置快捷键<F2>打开Taglist
"--------------taglist----------------

2 ctags + taglist使用

2.1 ctags使用

book@100ask:~/ftp/openedv/uboot-2016$ vi drivers/usb/gadget/f_fastboot.c

image

2.1.1 ctrl + ]可以进行函数跳转

image

2.1.2 ctrl + T可以返回跳转之前位置

image

2.1.3 加载tags

默认从创建tags的目录去启动vim打开文件会自动加载当前目录的tags文件,因此可以直接跳转:
如我是从uboot根目录建立的tags文件,然后:

book@100ask:~/ftp/openedv/uboot-2016$ vi drivers/usb/gadget/f_fastboot.c

这样自动加载tags文件,能够进行跳转。
如果进入其他目录:可以看到就无法打开tags文件。

book@100ask:~/ftp/openedv/uboot-2016$ cd  drivers/usb/gadget/
book@100ask:~/ftp/openedv/uboot-2016/drivers/usb/gadget$ vi f_fastboot.c

image

vim进入命令模式输入:

:set tags+='/home/book/ftp/openedv/uboot-2016/tags

image
此时就可以正常跳转了。

2.1.4 自动加载tags

在~/.vimrc文件中添加下面两行:

set tags=tags;
set autochdir

通用方式,如果没有找到tags文件,或者没有找到对应的目标,就到父目录中查找,一直向上递归。
这样就可以在不用在tags根路径去使用vim了。如:

book@100ask:~/ftp/openedv/uboot-2016/drivers/usb/gadget$ vi f_fastboot.c

image

2.1.5 ts 列出所有匹配的标签

image
可以看到有2处地方匹配,一个是cmd/bootm.c,一个是include/command.h
image

2.1.5 Ctrl + W + ]分割当前窗口

image
输入:q退出分割窗口。

2.1.6 vi –t tag 找到名为 tag 的变量的定义处

例如stitch_event_handler_th函数位于当前tags目录中的stitch/common/stitch.c的第1212行。只需确保在tags中的子目录中任意位置输入:

robin.lee@WORKSTATION5:/robin.lee/zip/A2/osdrv/interdrv/v2/dwa$ vi -t stitch_event_handler_th
image

2.2 taglist使用

2.2.1 F2键打开关闭Taglist

image

2.2.2 ctrl w w键taglist和vim窗口光标切换

image

例如光标位置处于vim窗口的第1211行,按下ctrl w w键(w按2次),光标会跳到左边taglist窗口。按上下左右方向键可以查找宏定义,符号,函数等。再次按ctrl w w又会跳到vim的窗口。

2.2.3 回车键taglist跳转到具体位置

image
比如现在光标位于taglist界面的stitch_src_qbuf位置,按下回车会跳转到函数定义的具体位置:
image

3 NERDTree插件

NERDTree是Vim界面显示树形目录的文件管理器插件,可在vim操作界面进行文件打开、目录浏览操作。

3.1 安装配置NERDTree

3.1.1 安装

https://www.vim.org/scripts/script.php?script_id=1658
下载后放到~/.vim目录,解压即可完成安装。

3.1.2 配置

vi ~/.vimrc
添加如下配置:

"--------------NERDTree---------------
let NERDTreeWinPos='right'		"设置窗口在右侧
nmap <F8> :NERDTree<CR>			"设置快捷键F8打开
let NERDTreeWinSize=40		 	"窗口大小为40
"--------------NERDTree---------------

3.2 使用NERDTree

3.2.1 F8键开启关闭右图文件列表

image

3.2.2 ctrl w w键NERDTree和vim窗口光标切换

image
光标原本再右边窗口,输入ctrl w w(w按2次)切换到左边vim窗口。

3.2.3 回车键NERDTree跳转到具体位置

同理,和taglist一样,也是光标移动到具体文件后回车即可跳转到具体文件。方向键上下移动选择具体文件。跳转到stitch_ctx.h:
image

3.2.3 返回上一层目录

选择‘up a dir’,按回车:
image
返回上一层目录的结果如下:
image

4 SrcExpl插件(功能鸡肋先不介绍)

SrcExpl(源资源管理器)是一个源代码资源管理器,通过显示函数或类型定义来显示当前选定的关键字或在单独的窗口中声明。该插件旨在重新创建上下文 IDE 中可用的窗口。

结合“Taglist”和“NERD tree”效果更佳。

4.1 SrcExp安装配置

安装:
https://github.com/wenlongche/SrcExpl
https://www.vim.org/scripts/script.php?script_id=2179
下载后放入~/.vim进行解压即可。
配置:
打开~/.vimrc,添加如下配置:

" // The switch of the Source Explorer
nmap <F12> :SrcExplToggle<CR>

" // Set the height of Source Explorer window
let g:SrcExpl_winHeight = 16

" // Set 100 ms for refreshing the Source Explorer
let g:SrcExpl_refreshTime = 500

" // Set "Enter" key to jump into the exact definition context
let g:SrcExpl_jumpKey = "<ENTER>"

" // Set "Space" key for back from the definition context
let g:SrcExpl_gobackKey = "<SPACE>"

" // In order to avoid conflicts, the Source Explorer should know what plugins except
" // itself are using buffers. And you need add their buffer names into below list
" // according to the command ":buffers!"
let g:SrcExpl_pluginList = [
		\ "__Tag_List__",
		\ "_NERD_tree_",
		\ "Source_Explorer"
	\ ]

" // The color schemes used by Source Explorer. There are five color schemes
" // supported for now - Red, Cyan, Green, Yellow and Magenta. Source Explorer
" // will pick up one of them randomly when initialization.
let g:SrcExpl_colorSchemeList = [
		\ "Red",
		\ "Cyan",
		\ "Green",
		\ "Yellow",
		\ "Magenta"
	\ ]

" // Enable/Disable the local definition searching, and note that this is not
" // guaranteed to work, the Source Explorer doesn't check the syntax for now.
" // It only searches for a match with the keyword according to command 'gd'
let g:SrcExpl_searchLocalDef = 1

" // Workaround for Vim bug @https://goo.gl/TLPK4K as any plugins using autocmd for
" // BufReadPre might have conflicts with Source Explorer. e.g. YCM, Syntastic etc.
let g:SrcExpl_nestedAutoCmd = 1

" // Do not let the Source Explorer update the tags file when opening
let g:SrcExpl_isUpdateTags = 0

" // Use 'Exuberant Ctags' with '--sort=foldcase -R .' or '-L cscope.files' to
" // create/update the tags file
let g:SrcExpl_updateTagsCmd = "ctags --sort=foldcase -R ."

" // Set "<F12>" key for updating the tags file artificially
let g:SrcExpl_updateTagsKey = "<F12>"

" // Set "<F3>" key for displaying the previous definition in the jump list
let g:SrcExpl_prevDefKey = "<F3>"

" // Set "<F4>" key for displaying the next definition in the jump list
let g:SrcExpl_nextDefKey = "<F4>"

4.2 SrcExpl使用

4.2.1 F12启动和禁用SrcExpl

5 YouCompleteMe代码补齐插件

5.1 安装配置

先安装编译依赖工具:

sudo apt install build-essential cmake python-dev python3-dev clang

下载YouCompleteMe源码:

git clone https://github.com/Valloric/YouCompleteMe.git ~/.vim/bundle/
cd .vim/bundle/YouCompleteMe
git submodule update --init --recursive

编译安装 YouCompleteMe:

./install.py --clang-completer

安装好后打印如下:
image

5.2 YouCompleteMe使用

.vimrc添加配置:

let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
set runtimepath+=~/.vim/bundle/YouCompleteMe
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
imap <silent><leader><TAB> <Plug>(coc-complete)
vmap <silent><leader><TAB> <Plug>(coc-complete)
nmap <silent><leader><TAB> <Plug>(coc-complete)

vim版本比较低达不到插件YCM的要求从而报错【YouCompleteMe unavailable: requires Vim 8.1.2269+.】,这样也好解决,从github上重新下最新版本的vim即可。命令如下所示:

cd /usr/local/share
sudo git clone https://github.com/vim/vim.git
cd vim/src
sudo ./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp=yes \
--enable-pythoninterp=yes \
--enable-python3interp=yes \
--prefix=/usr/local/vim82

之后make和make install一下,命令如下所示:

sudo make
sudo make install

在/usr/bin目录下建立符号链接,命令如下所示:

sudo ln -s /usr/local/vim82/bin/vim /usr/bin/vim82
sudo ln -s /usr/local/vim82/bin/vim /usr/bin/vim
sudo ln -s /usr/local/vim82/bin/vim /usr/bin/vi

补齐效果如下:
image
输入vim --version信息可以看vim版本号,现已经v9.1,默认应该是8.1的。
image

vim配色方案:
https://github.com/flazz/vim-colorschemes
设置函数高亮:

vi /usr/share/vim/vim91/syntax/c.vim

"highlight Functions
syn match cFunctions "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunctions "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunctions gui=NONE cterm=bold  ctermfg=40

6 cscope插件

6.1 安装

sudo apt-get install cscope

6.2 配置产生cscope.out

cscope -Rbqk

-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”–“,表示由标准输入获得文件列表。

image

6.3 配置.vimrc

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
  set csprg=/usr/bin/cscope
  set csto=1
  set cst
  set nocsverb
  " add any database in current directory
  if filereadable("cscope.out")
	  cs add cscope.out
  endif
  set csverb
endif

nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>

set cscopequickfix=s-,c-,d-,i-,t-,e-

6.5 使用

6.5.1 建立数据库连接

:cs add ./cscope.out

6.5.2 查询数据库连接

:cs show

image

6.5.3 查看引用调用位置

:cs f s symbol #查看symbol和引用的地方, 如:cs find s IDLE_TIMEOUT_MS

image

标签:SrcExpl,set,tags,--,insight,vim,source,let,IDE
From: https://www.cnblogs.com/fuzidage/p/18002309

相关文章

  • EasyExcel读取resources下多个excel文件的解决办法
    最近新的业务是需要读取resources下的excel文件并入库,没有做过类似的所以踩了很多坑话不多说开始:使用ResourcePatternResolver解析该目录下的多个excel文件  读取之后直接使用EasyExcel读取文集文件并且转换为实体对象,这里只需要注意些一个ExcelListener()监听器,具体怎么写这......
  • Idea Jrebel 报错:Cannot reactivate,offline seat in use
    一、问题描述在使用ideaJrebel续期的时候,修改idea激活服务器地址时,遇到报错:Cannotreactivate,offlineseatinuse.ClickWorkonlineinJRebelconfigurationtoreturnofflineseat...二、问题解决找到idea配置文件:jrebel.properties,修改文件属性:rebel.license.......
  • 在idea打包普通项目jar包(入门级含依赖)
    在idea打包普通项目(含依赖)准备一个Mian主方法和数学工具类用来测试,还有一个演示用的依赖jar包第一步选择file下的projectstructure第二步选择具有依赖的打包方式 第三步选择要打包的模块和主函数第四步添加项目依赖的jar包最后点击apply第五步打包测试......
  • CLion 2023: 一款专注于性能和效率的C/C++ IDE mac/win版
    JetBrainsCLion2023是一款专为C和C++开发人员打造的强大集成开发环境。这个版本致力于提供卓越的性能、强大的功能和一流的智能代码编辑支持,帮助您更高效地开发高质量的C和C++应用程序。→→↓↓载CLion2023mac+win版首先,CLion2023提供了对最新C和C++标准的全面支持。无论......
  • 使用IDEA执行单元测试并查看覆盖率
    使用IDEA执行单元测试并查看覆盖率导出会生成多个HTML文件......
  • get and build the qt in open source version
    GettingthesourcecodeFirst,cdintothedirectorywhereyouwantthe"qt5"directorytolive.Then,clonethetop-levelQt5gitrepository:$gitclonegit://code.qt.io/qt/qt5.gitor(ifyou'rebehindafirewallandwanttousethehtt......
  • 【解题报告】CodeForces523D:Statistics of Recompressing Videos
    CF523D解题报告CF523D先上结果:前两次语言选错了,编译一直不过(做这题是因为集训老师让我做我就做了,要不然我都快忘了我有CF账号了(思路省流:STL大法开一个小根堆存目前正在运行的服务器(也可以大根堆,但是存时间进去的时候存负的),如果有空机就直接处理,这个视频处理完的时间就......
  • luogu P2967 [USACO09DEC] Video Game Troubles G
    CSPRP++这道题就是一个背包升级的板子,我不会告诉你,这题我用了半个小时才做完本题的思路是:第一步:先忽略第$i$台主机的价格,只对第$i$款游戏的$G_{i}$款游戏做01背包,此时得到的$f[i][j]$为从前$i$台主机中花费了$j$元购买游戏得到的伪收益。第二步:再考虑第$i$......
  • [BSidesSF2019]zippy
    [BSidesSF2019]zippy附件是一个流量包追踪TCP流发现压缩密码supercomplexpassword和压缩包通过密码解压后得到flagflag{this_flag_is_your_flag}......
  • [BSidesCF 2020]Had a bad day
    [BSidesCF2020]Hadabadday打开网站有两个按钮,点击之后链接后都会加上?category=meowers猜测有文件包含漏洞,尝试?category=php://filter/read=convert.base64-encode/resource=index.php警告中看到.php出现了两次,推测源码中存在.php拼接,于是去掉.php得到PHP源码<?p......