首页 > 其他分享 >VI改造计划

VI改造计划

时间:2024-09-03 19:25:35浏览次数:11  
标签:文件 插件 tags VI vim 计划 TAB 改造 cscope

本次准备将 Ubuntu 自带的 VI 编辑器打造成适合我们 C 语言及内核开发时的 IDE,先进行基础改造工程,下面是整个改造计划:

0.实践环境
Ubuntu13.10(64 位,Kernel 为自已编译的 3.13.6),涉及工具及插件有:

涉及工具及插件

会用到示例的代码片段:

#include <stdio.h>

void main(void) {
    printf(“Hello World!”);
    exit(0);
}

1.自我改造

由于Ubuntu 默认只安装了 VI,此时我们先将其升级为增强版 VIM,需执行如下命令:

sudo apt-get install vim

升级为 VIM 后,我们可以自由的配置相应的配置文件和安装插件,强壮每一个 VI。对于VIM 工具,默认的配置文件存放在/etc/vim/vimrc 和/usr/share/vim/vimrc 两文件里,两个都可以修改,没有硬性规定哪个能改哪个不能改,两个都是系统级配置,用于 VIM 初始化配置用,后一个与工具包配合在一起,一般不心,我们一般修改全局通用配置则是前一个,这一改会影响到所有的用户,详细说明可使用 man vim 查阅,我们此处需要一个属于自己的个性配置,接下来是配置时间:

先将上面的 vimrc 复制到自己的主目录($HOME)下(也可自行创建一个,但无参考,复制过来的文件里有一些标准的配置未打开,有说明,可根据实际需要修改):

cd ~
cp /etc/vim/vimrc .vimrc

复制过来的文件以隐藏文件形式存在,接下来打开复制过来的文件按需配置了:

a.语法高亮

  在配置文件里有如下内容:

" Vim5 and later versions support syntax highlighting. Uncommenting the next
" line enables syntax highlighting by default.
if has("syntax")
    syntax on
endif

由于我们的 VIM 版本是 7.4,故而只要保证上面的语句没有使用"进行注释就可以,其中主角是 syntax on 一句。

b.显示行数

在配置文件里加入如下一句就可以在左边显示行号:

set number

set nu

c.设置 TAB 缩进

在学习C++时老师告诉我们一个 TAB 占用 8 个字节,而 Linux Kernel 里的 C 风格也是一样,我们在 VIM 里有如下设置缩进的配置项:

set tabstop=8
set softtabstop=8
set shiftwidth=8

上面的配置中 tabstop 表示一个 TAB 占用的字节数,而 softtabstop 则表示我们输入一个TAB 实际占用的字节数。如果 set expandtab 被设置时,即.vimrc 里包含该句时,那么每输入一个TAB 键时会自动将 TAB 键转换为 softtabstop 个空格,如果没被设置(相当于 set noexpandtab),那么 VIM 默认会按 n*softtabstop / tabstop 个 TAB 键+n*softtabstop%tabstop 个空格键的组成形式来缩进,上面 tabstop 和 softtabstop 是一样的,即缩进的都是 n 个 TAB 键,不会再跟空格键。一般不设置expand,该参数在 Android 开发倒是有用,在 Android 里要求将 TAB 转换为 8 个空格。

shiftwidth 一般与 softtabstop 一致,表示在 Normal 模式下使用>>,<<和 Insert 模式下使用<C-t>,<C-d>进行缩进的空格数。

d.设置自动缩进

开启自动缩进:每行的缩进值与上一行相同,如果使用 noautoindent 则取消设置,此处我们设置缩进:

set autoindent

开启 C/C++语言自动缩进支持:

set cindent

设置 C/C++语言的具体缩进方式(仅参考):

set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s

至此,关于 VIM 自身的改造造一段落,已满足基本的需求,接下来使用注入外部工具来扩展功能了。

2.插上翅膀,展翅高飞

a.ctags

ctags 工具用于为源码生成标签索引,以便于 VI 等编辑器或 Taglist 等插件工具使用,其遍历指定工程目录下的源码文件生成相应的符号,为我们检索函数、变量等内容提供指引。接下来先安装它:

sudo apt-get install ctags

安装完后我们使用该工具为我们的 demo 工程生成相应的标签文件,我们在~/demo 目录下有 hello.c 文件,文件内容为我们文章开头提及的代码段,接下来开始生成这万物之基的标签:

cd ~/demo
ctags -R *

执行后会在当前目录下生成 tags 文件,我们可以打开看里面生成的内容:

xinu@slam:~/demo$ cat tags
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHORDarren Hiebert /[email protected]/
!_TAG_PROGRAM_NAME Exuberant Ctags //
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
!_TAG_PROGRAM_VERSION 5.9~svn20110310 //
main hello.c /^void main(void) {$/;" f

接下来要如何使用呢?有如下方法:

第一种,使用 vim 时加-t 参数,如下操作:

xinu@slam:~/demo$ vim -t main

这时 vim 会打开定义 main 这个标签(变量、函数或其它)所在的文件,并把光标定位到该行。

第二种,在 vim 的 normal 模式下使用:ta 命令(ta 是 tag 的缩写),如查找 main 时用到:ta main

第三种,在 vim 的 normal 模式下先将光标定位到要查找的变量名或函数名等想查找的字符上,然后按下组合键“ctrl+]”,此时会跳转到相应的文件,再使用“ctrl+o”或“ctrl+t”跳转回查找时所在的位置。

如果有时候不太清楚操作,还可以找我们的万能大师帮助下,在 vim 的 normal 模式下使用:help tags 命令查看帮助文档,了解 ctags 的用法。

还有点要注意的是运行 vim 时要在生成的 tags 文件所在目录下操作才能生效,如果是在其他目录下,则需要在 normal 模式下使用:set tags=命令来设定使用的 tags 文件路径了。

b.cscope

cscope与 ctags 功能相似,但要更强大些。它并不像 ctags 简单的标签查找,它可以指定要查找的类型(函数、变量)以及函数的调用关系等。说了有这么好,我们先搭好环境再说,把它安装上:

sudo apt-get install cscope

安装好后,我们仍然在 demo 下创建 cscope 需要用到的符号数据库:

cd ~/demo
cscope -Rbq

此时会生成如下文件:

cscope.in.out cscope.out cscope.po.out

接下来需将这生成的 cscope 索引库被 vim 加载使用,使用 vim 打开 hello.c,然后在 normal模式下执行:cs add cscope.out 命令,接下来就可以使用 cscope 来操作工程了,主要用到 cs f,详细的使用说明可以在 normal 模式下执行:cs help 命令查阅。(cs 是 cscope 命令的缩写,f 是 find的缩写)

c.vim-addons

vim的插件管理器 vim-addons,可以帮助我们明明白白管理我们的 vim 里能支持和已使用的插件,还是老样子,先将其安装上:

sudo apt-get install vim-scripts

此时会将 vim-addons 和 vim-addon-manager 等工具安装上,运行这两个命令的任何一个,均可看到插件的开启、支持状况。

由于我们现在要安装的插件只给自己使用,故而先在我们的$HOME 目录下创建相应的目录:

cd ~
mkdir -p .vim/plugin .vim/doc

至此安装插件的基础环境搭好了,接下来是安装需要的插件了。

d.taglist

taglist是标签浏览器,用于列出当前文件中的所有标签(相当于 windows 下的 source insight 左边的内容,包含宏、变量、函数名等)。接下来现炒一个插件,别浪费 vim-addons 的苦心:

xinu@slam:~$ vim-addons install taglist
Info: installing removed addon 'taglist' to /home/xinu/.vim
Info: Rebuilding tags since documentation has been modified ...
Processing /home/xinu/.vim/doc/
Info: done.

安装好后我们采用默认配置,直接用 vim 打开 hello.c 文件,然后在 normal 模式下执行:Tlist 命令,可以在左边再打开一个列表窗显示当前文件包含的符号,再执行相同命令则关闭左边的列表窗。那如何在列表窗和源码窗之间来回切换呢?只需要按住 ctrl 键,再双击 w 键即可切换(即 ctrl-w+w)。

e.code_complete

该插件没有在 vim-addons 列表里,在列表里的是 omnicppcomplete,可以使用 vim-addons install omnicppcomplete 安装,我们在这里还是使用 code_complete 先:

从 http://www.vim.org/scripts/script.php?script_id=1764 下载 2.9(当前最新版)版的code_complete.vim 文件,然后将其复制到我们的插件目录里:

cp ~/Downloads/code_complete.vim ~/.vim/plugin/

接下来要修改下生成 tags 的命令:

ctags -R --c-kinds=+p --fields=+S .

然后在输入关键字后按下 TAB 键就可以进行补全了,如使用 vim 打开文件后,输入 main后再按下 TAB 键,此时会将整个 main 函数的框架都生成好,相关的效果可访问http://files.myopera.com/mbbill/files/code_complete.gif 查看。

3.实例演示

终于搭建好相关环境了,而我们主要还是操作 Linux Kernel 代码,而在源码下刚好 Kbuild有指令可生成 ctags 和 cscope 文件,在 make help 里有如下内容:

tags/TAGS - Generate tags file for editors
cscope - Generate cscope index

于是我们分别执行 make tags 和 make cscope 命令来生成相应的文件。下图是在 Kernel 源码下生成 tags 和 cscope.out 文件后打开 init/main.c 文件并进行操作后的截图:

生成 tags 和 cscope.out 文件后打开 init/main.c 文件并进行操作

此处需要配置的是:cs add cscope.out,还有使用:Tlist 打开左边 TAG 列表,暂不需其他配置。接下来就可以使用“ctrl+]”和“:cs f g start_kernel”之类的指令来搜索标签了。这太方便了,在整个Terminal 窗口就可以进行代码的定位阅读了,一个“爽”字了得啊!

4.后记

上面搭建好的环境已满足基本的需求,当然,如果还想尝试新的提升效率的技巧,可以再安装其他插件或修改 vimrc 来配置。

标签:文件,插件,tags,VI,vim,计划,TAB,改造,cscope
From: https://blog.csdn.net/guochongxin/article/details/141650676

相关文章

  • VI改造计划补充篇
    在《VI改造计划》一文中讲述到了ctags和cscope两个工具,在使用LinuxKernel源码进行实操时需要使用:csaddcscope.out去加载cscope数据库,每次这样操作会让我们抓狂,那我们修改下~/.vimrc吧,在该文件里加入如下内容:iffilereadable("cscope.out") csaddcscope.outendif......
  • ServiceStage集成Sermant实现应用的优雅上下线
    作者:聂子雄华为云高级软件工程师摘要优雅上下线旨在确保服务在进行上下线操作时,能够平滑过渡,避免对业务造成影响,保证资源的高效利用。Sermant基于字节码增强的技术实现了应用优雅上下线能力,应用发布与运维平台ServiceStage通过集成Sermant使得应用在进行持续发布时实现无侵入式地......
  • uniapp+uView幸运大转盘
    父组件代码:<template>  <viewclass="almost-lottery":class="popupShow2?'mask':''">    <view class="d-content">      <viewclass="almost-lottery__wheel">  ......
  • Unity面向对象补全计划 之 List<T>与class(非基础)
    C#&Unity面向对象补全计划泛型-CSDN博客关于List,其本质就是C#封装好的一个数组,是一个很好用的轮子,所以并不需要什么特别说明问题描述假设我们有一个表示学生的类 Student,每个学生有姓名和年龄两个属性。我们需要创建一个学生列表,并实现以下功能:添加学生到列表中打印......
  • 《NET CLR via C#》---第十一章(事件)
    事件成员的类型提供了以下功能:方法能等级它对事件的关注方法能注销它对事件的关注事件发生时,登记的方法将收到通知CLR事件模型以委托为基础。委托是调用回调方法的一种类型安全的方式。对象凭借回调方法接受它们订阅的通知。设计要公开事件的类型在某些情况下,当某个事件......
  • Vue3+Vite+Vant-UI+Pinia+VueUse开发双端业务驱动技术栈商用项目
    前言:个人git仓库,全是干货一、本次搭建项目涉及到vue3、vite、pinia、vue-router、typescript、element-plus,下面先简单介绍一下大家比较陌生的框架或库1、vue3vue团队官宣:2022年2月7日,vue3作为vue的默认版本。现在打开vue官网,界面默认显示的是vue3版本的指导文档。vue团队在......
  • Vite2.0+ElementPlus+Koa2+Mongo全栈开发通用后台系统Vue3
    Vite2.0+ElementPlus+Koa2+Mongo全栈开发通用后台系统Vue3前言当前基于NodeJs框架的全栈工程实践非常之火,作为一个很长时间未接触代码的前程序猿。一直有点手痒痒,想尝试一下这种全新的编程体验,于是就重新开始了填坑的不归之路。这一套框架是基于现在的前后台分离的指导原则来......
  • TS4+Vite+Vitest+Vitepress Vue3.3 自主打造媲美ElementPlus的组件库
    TS4+Vite+Vitest+VitepressVue3.3自主打造媲美ElementPlus的组件库这个问题看起来是想要创建一个类似ElementPlus的Vue组件库,并且使用TypeScript、Vite、Vitest和Vitepress进行开发。以下是一个简化的指南,用于创建一个自己的Vue组件库项目框架。安装必要的工具:npm......
  • 海外合规|新加坡网络安全认证计划简介(一)
     新加坡网络安全局(CSA)为组织制定了网络安全认证计划,旨在表彰具有良好网络安全实践的组织。CyberEssentials标志表彰已实施网络卫生措施的组织,而CyberTrust标志则是表彰具有全面网络安全措施和实践的组织的卓越标志。这些标志是可见的指标,表明组织已实施良好的网络安全实践......
  • HivisionIDPhotos :一款开源的轻量级且高效的AI证件照制作工具
    HivisionIDPhotos是一款开源的轻量级且高效的AI证件照制作工具,它通过AI算法实现了对多种用户拍照场景的识别、抠图以及证件照生成。这款工具能够根据不同的尺寸规格生成标准证件照和排版照,适用于护照、签证等多种用途。HivisionIDPhotos的主要特点包括轻量级抠图、生成标准证......