Vim 是什么?

我的vim配置及说明【k-vim】 <!-- h1, h2, h3, h4, h5, h6, p, blockquote {margin:0; padding:0} body {font-family:"Helvetica Neue",Helvetica,"Hiragino Sans GB",Arial,sans-serif; font-size:13px; line-height:18px; color 阅读详情

VIM

 

(Unix及类Unix系统文本编辑器)


   这是第二次听到VIM这个词语了,好奇之下去搜了下百度,复制下,省的不知道别人在说什么,忒尴尬~
Vim是一个类似于 Vi 的著名的功能强大、高度可定制的 文本编辑器 ,在Vi的基础上改进和增加了很多特性。 VIM是 自由软件 。
Vim普遍被推崇为类 Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年 Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳 开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs同样都是非常优秀的文本编辑器。 [1]  
外文名
VIM
类    别
文本编辑器
应用范围
计算机
功    能
代码编写
名称含义
Vi iMproved

发展历程

编辑
Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。 [2]  
使用vim先知道其设计理念是很重要的,有助于记忆,举一反三。
1.vim的设计理念是组合;
命令组合:
Vim强大的编辑能力中很大部分是来自于其普通模式命令。 vim的设计理念是命令的组合。例如普通模式命令"dd"删除当前行,"dj"代表删除到下一行,原理是第一个"d"含义是删除,"j"键代表移动到下一行,组合后"dj"删除 当前行和下一行。另外还可以指定命令重复次数,"2dd"(重复"dd"两次),和"dj"的效果是一样的。"d^","^"代表行首,故组合后含义是删除到光标开始到行首间的内容(不包含光标);"d$" $"代表行尾,删除到行尾的内容(包含光标);用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。
模式间的组合:
在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按"a"(append/追加)键或者"i"(insert/插入)键。
2.很多快捷键设置和正则表达式类似,可以辅助记忆; ^ $ w 等
3. vim针对程序员做了优化;
写代码的时候手需要时刻保持在键盘上,随机定位代码、随机删除代码、移动代码、插入代码的操作大大多于阅读、翻页操作,中间卡顿一下效率就大大降低了;但对普通用户而言,顺序写、设置字体格式、翻页读多于随机写删除操作, 且每个动作之间本身就有很多的停顿,用其他UI编辑器(word, notePad++等)效率反而比VIM高效,使用vim进行操作只会徒增你的疑惑: vim为什么这么流行。(如果你不是一个代码开发者,估计你看完这段话也无法感同身受,建议先去学一门编程语言,新手推荐学C,java入门,做一道50行代码的课后习题,来感受下写代码的过程)
Bram Moolenaar 在 80 年代末购入他的 Amiga计算机时,Amiga 上没有他最常用的 编辑器vi。Bram 从一个开源的 vi 复制 Stevie 开始,开发了 Vim 的 1.0 版本。最初的目标只是完全复制 vi 的功能,那个时候的 Vim 是Vi IMitation(模拟)的简称。1991 年 Vim 1.14 版被 "Fred Fish Disk #591" ——Amiga 用的免费软体集收录了。1992 年 1.22 版本的 Vim 被移植到了 UNIX 和 MS-DOS上。从那个时候开始,Vim 的全名就变成 Vi IMproved(改良)了。
在这之后,Vim 加入了不计其数的新功能。做为第一个里程碑的是 1994 年的 3.0 版本加入了多视窗编辑模式(分割视窗)。从那之后,同一荧幕可以显示的 Vim 编辑文件数可以不止一个了。1996 年发布的 Vim 4.0 是第一个利用图型接口(GUI)的版本。1998 年 5.0 版本的 Vim 加入了 highlight( 语法高亮)功能。2001 年的 Vim 6.0 版本加入了代码折叠、 插件、多国语言支持、垂直分割视窗等功能。2006 年 5 月发布的 Vim 7.0 版更加入了拼字检查、上下文相关补完,标签页编辑等新功能。 2008 年 8 月发布的 Vim 7.2,该版本合并了 vim 7.1 以来的所有修正补丁,并且加入了脚本的浮点数支持,2010年08月15日,历时两年的时间,vim又发布了vim 7.3这个版本,这个版本修复了前面版本的一些bug,以及添加了一些新的特征,这个版本比前面几个版本来的要更加优秀。
4.2016年9月12日 Vim 8.0[1] 
十年以后,Vim 终于发布了一个新的大版本 8.0,结束了从 2006 年 5 月 7 日开始的 7.0 世代。虽然这十年间,Vim 也一直在不断更新,从 7.0 到三年前的 7.4,每隔一两年或两三年就会有个小版本更新,但是这次跨越大版本更新,带来了不少新的特性,据说有一些是从其它的 Vi 流派吸收来的特性。 [3]  

主要功能

编辑
根据设定可以和原始vi完全兼容
多缓冲编辑
任意个数的分割窗口(横,竖)
具备列表和字典功能的脚本语言
可以在脚本中调用 Perl, Ruby, Python, Tcl, MzScheme ,C,C++
单词缩写功能
动态单词补完
多次撤销和重做
对应400种以上文本文件的语法高亮
Lisp,C/C++, Perl, Java, Ruby,  Python 等40种以上语言的自动缩排
利用ctags的标签中跳转
崩溃后文件恢复
光标位置和打开的缓冲状态的保存 复原(session功能)
可以对两个文件进行差分,同步功能的diff模式
远程文件编辑 。 [2]  

vim 8.0新增功能

支持异步 I/O 和通道(channel)
任务
定时器
Partial
Lambda 和闭包
插件包
窗口 ID
折行缩进
Windows:支持 DirectX
支持 GTK+ 3 [3]  

学习方法

编辑
Vim已经有各主流系统的版本,尽管vim较vi已经改良了不少,但是初次使用还是会一头雾水,不知如何操作,所以学习vim要首先过2关。第一关是理解vim的设计思路,vim设计之初就是整个文本编辑都用键盘而非鼠标来完成,键盘上几乎每个键都有固定的用法,且vim的制作者希望用户在普通模式(也就是命令模式,只可输入命令)完成大部分的编辑工作,将此 模式设计为默认模式,初学者打开vim,如果直接输入单词,结果就会滴滴乱响,这是因为vim把用户输入的单词理解为命令了。第二关是命令关,vim有过百条命令对应编辑的需要,如果能熟练使用vim这些命令,编辑速度确实比鼠标要快很多,但是想全都记住它们也是一件难事,我想记住它们最好的方法就是多多来练习,确实把vim用在日常的文本编辑中去,且遇到难题不要放弃,而是查找解决的方法,每解决一个难题,你的vim技能就上升一级。
其实, Vim与其它 编辑器一个很大的区别在于, 它可以完成复杂的编辑与格式化功能. 在这些领域还少有软件能与它分庭抗礼, 但是, 与所有的灵活性的代价一样, 你需要用自己的双手来实现它. 这在事实上造成了用户在使用Vim过程中的几个自然阶段。
一开始, Notepad,  Visual Studio,Microsoft Word等垄断你的大脑, 这些东西根深蒂固, 挥之不去。Vim的使用对你而言是一场噩梦, 它降低而不是提高了你的工作效率. 对三种工作模式的不解甚至使你认为它是一个充满BUG或者至少是一个古怪的与当今友好 用户界面设计严重脱节的软件。 事实上, 这些起初看起来古怪的特性是Vim(或者是vi)的作者和它的用户们在自己漫长的文字编辑和程序设计生涯中总结出来的最快速最实在的操作, 在几乎等于计算机本身历史的成长期中, 历经无数严厉苛刻的计算机用户的批评与检验, 无用的特性或糟糕的设计在Vim用户群面前根本就没有生存的余地. Vim细心而谨慎的作者们也不允许自己精心设计的软件里有这样东西。
第二个阶段,你开始熟悉一些基本的操作, 这些操作足以应付你日常的工作, 你使用这些操作时根本就不假思索. 但这些阶段你仍然很少去碰Vim那晦涩的在线帮助文档. 它在你心里只是Notepad、Visual Studio的勉强合格的替代品。
第三个阶段, 精益求精的你不满足于无休无止的简单操作, 冗长而乏味,有没有更好的办法可以四两拔斤. 于是, 从UNIX参考手册上, 从同事口中, 你渐渐叩开:help xxx的大门. 开始探索里面充满魔力的咒语. 从杂耍般的带有表演性质的技巧开始, 这些技巧令人眩目但少有实用性. 不过这却是你拥有魔力的第一步. 接下来, 你开始认识到这些咒语背后的真经, 开始偷偷修改一些奇怪的符号, 于是, 奇迹产生了, 魔力不但仍然有效, 而且真实地作用于你现实中的文字编辑生活. 你在第二阶段由于熟练操作而尘封已久的大脑突然开始运作. 但这个过程并非是达到某个临界状态后的一路坦途, 不断的挫折, 新的挑战, 看似Mission Impossible的任务永远伴随着任何一个人的任何一个学习过程. 这是你使用Vim的最后一个阶段, 也是最漫长最有挑战性同时也充满无数奇趣的阶段. 这个阶段里你开始定制一些希奇古怪的颜色. 开始以敲入i18n来输入internationalization, 开始让Vim替你纠正经常把the 误敲成teh的毛病, 开始让Vim与系统里各种精悍而强大的兄弟工具进行合作, 开始写越来越长的script, 每一次的文本编辑体验都妙趣横生高潮迭起. 你的头脑因为要用Vim完成高效的编辑而高度紧张. 你开始在Vim邮件列表里提一些确实是问题的问题. 也开始发现你在Vim里做了以前在SHELL里做的几乎一切事. 事实上你已经成了一个无可救药的Vim骨灰级玩家。

高效率移动

编辑
1、在插入模式之外
基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面 VIM 就像一个“哑巴” 编辑器一样。很多新手都会一直呆在插入模式里面,因为这样易于使用。但 VIM 的强大之处在于他的命令模式!你会发现,在你越来越了解 VIM 之后,你就会花越来越少的时间使用插入模式了。
2、使用 h、j、k、l
使用 VIM 高效率编辑的第一步,就是放弃使用 箭头键。使用 VIM,你就不用频繁的在箭头键和字母键之间移来移去了,这会节省你很多时间。当你在命令模式时,你可以用 h、j、k、l 来分别实现左、下、上、右箭头的功能。一开始可能需要适应一下,但一旦习惯这种方式,你就会发现这样操作的高效之处了。
在你编辑你的电子邮件或者其他有段落的文本时,你可能会发现使用方向键和你预期的效果不一样,有时候可能会一次跳过了很多行。这是因为你的段落在 VIM 看来是一个大的长长的行。这时你可以在按 h、j、k 或者 l 之前键入一个 g,这样 VIM 就会按屏幕上面的行如你所愿的移动了。
3、在当前行里面有效的移动光标
很多 编辑器只提供了简单的命令来控制光标的移动(比如左、上、右、下、到行首/尾等)。VIM 则提供了很多强大的命令来满足你控制光标的欲望。当光标从一点移动到另外一点,在这两点之间的文本(包括这两个点)称作被“跨过”,这里的命令也被称作是 motion。(简单说明一下,后面会用到这个重要的概念)
4、常用到的一些命令(motion)
fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。
tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)
Fx:和 fx 类似,不过是往回找。使用 , 来重复上一个F命令。
Tx:和 tx 类似,不过是往回移动到 x 的右边一个位置。
b: 光标往前移动一个词。
w:光标往后移动一个词。
0:移动光标到当前行首。(是数字0)
^:移动光标到当前行的第一个字母位置。
$:移动光标到行尾。
):移动光标到下一个句子。
( :移动光标到上一个句子。
5、在整个文件里面有效移动光标
VIM 有很多命令,可以用来到达文件里面你想到达的地方。下面是一些在文件里面移动的命令:
<Ctrl-f>:向下移动一屏。
<Ctrl-d>:向下移动半屏。
<Ctrl-b>:向上移动一屏。
<Ctrl-u>:向上移动半屏。 [4]  
G:到文件尾
numG:移动 光标到指定的行(num)。(比如 10G 就是到第 10 行)
gg:到文件首
H:移动光标到屏幕上面
M:移动光标到屏幕中间
L:移动光标到屏幕下面
*:读取光标处的字符串,并且移动光标到它再次出现的地方。
#:和上面的类似,但是是往反方向寻找。
/text:从当前 光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n移动到下个 text 处,N 移动到上一个 text 处 。
?text:和上面类似,但是是反方向。
m{a-z}:在当前光标的位置标记一个书签,名字为 a-z 的单个字母。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。
`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
%:在成对的括号等符号间移动,比如成对的 [ ] , { }, ( ) 之间。将 光标放到任意符号上,然后通过 % 来移动到和这个符号匹配的符号上,% 还可以正确的识别括号的嵌套层数,总是移动到真正匹配的位置上。因此这个命令在编辑程序代码的时候非常有用,可以让你方便的在一段代码的头尾间移动。

高效的输入

编辑
1、使用关键词自动完成
VIM 有一个非常漂亮的关键词自动完成系统。这表示,你可以输入一个长词的一部分,然后按一下某个键,然后 VIM 就替你完成了这个长词的输入了。举个例子:你有一个变量名为 iAmALongAndAwkwardVarName 在你写的代码的 某个地方。也许你不想每回都自己一个一个字母的去输入它。
使用关键词自动完成功能,你只需要输入开始几个字母(比如 iAmAL),然后按 <C-N>(按住 Ctrl,再按 N)或者 <C-P>。如果 VIM 没有给出你想要的词,继续按,直到你满意为止,VIM 会一直循环它找到的匹配的字符串。
2、聪明的进入插入模式
很多新手进入插入模式都只是用 i。这样当然可以进入插入模式,但通常不是那么合适,因为 VIM 提供了很多进入插入模式的命令。下面是最常用的一些:
i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行
c{motion}:删除 motion 命令跨过的 字符,并且进入插入模式。比如:c$,这将会删除从 光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
d{motion}:和上面差不多,但是不进入插入模式。
3、有效的移动大段的文本
使用可视选择(visual selections)和合适的选择模式
不像最初的 VI,VIM 允许你高亮(选择)一些文本,并且进行操作。这里有三种可视选择模式:
v:按 字符选择。经常使用的模式,所以亲自尝试一下它。
V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。
<C-V>:按块选择。非常强大,只在很少的 编辑器中才有这样的功能。你可以选择一个矩形块,并且在这个矩形里面的文本会被高亮。
在选择模式的时候使用上面所述的方向键和命令(motion)。比如,vwww,会高亮 光标前面的三个词。Vjj 将会高亮当前行以及下面两行。
4、在可视选择模式下剪切和拷贝
一旦你高亮了选区,你或许想进行一些操作:
d:剪贴选择的内容到剪贴板。
y:拷贝选择的内容到剪贴板。
c:剪贴选择的内容到剪贴板并且进入插入模式。
在非可视选择模式下剪切和拷贝
如果你很清楚的知道你想拷贝或者剪切什么,那你根本就不需要进入可视选择模式。这样也会节省时间:
d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前 光标到下一个 S 之间的字符剪切至剪贴板。
y{motion}:和上面类似,不过是拷贝。
c{motion}:和 d{motion} 类似,不过最后进入插入模式。
dd:剪切当前行。
yy:拷贝当前行。
cc:剪切当前行并且进入插入模式。
D:剪切从光标位置到行尾到剪贴板。
Y:拷贝当前行。
C:和 D 类似,最后进入插入模式。
x:剪切当前字符到剪贴板。
s:和x类似,不过最后进入插入模式。
5、粘贴
粘贴很简单,按 p。
6、使用多重剪贴板
很多 编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM 里面被称为寄存器(Registers)。你可以列出当前定义的所有寄存器名和它们的内容,命令为“:reg”。最好使用小写字母来作为寄存器的名称,因为大写的有些被 VIM 占用了。
使用 寄存器的命令为双引号 “。
比如:我们要拷贝当前行到寄存器 k。你应该按 “kyy。(你也可以使用 V”ky。为什么这样也可以呢?)现在当前行应该已经存在了寄存器 k 里面直到你又拷贝了一些东西进入寄存器 k。你可以使用命令 “kp 来粘贴寄存器 k 里面的内容到你想要的位置。
7、避免重复
令人惊奇的 . 命令
在 VI 里面,输入 . (小数点符号),将会重复你输入的上一个命令。比如,你上个命令为“dw”(删除一个词),VI 将会接着再删除一个词。
8、使用数字
使用数字也是 VIM 强大的而且很节省时间的重要特性之一。在很多 VIM 的命令之前都可以使用一个数字,这个数字将会告诉 VIM 这个命令需要执行几次。比如:
3j 将会把 光标向下移动三行。
10dd 将会删除十行。
y3t″ 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。
数字是扩展 motion 命令作用域非常有效的方法。

高效读代码

编辑
建议在vim上安装Taglist+cscope+c tags 插件有利于高效读代码,有利于学习! [5]  
1、安装
对于小编我来说我使用的是Ubuntu,安装软件一般使用的命令是apt-get install ***!
对于vim+Taglist+cscope+ctags组合 编辑器的创建,vim , cscope , ctags安装起来比较方便使用上述命令即可安装!
(对于不同的Linux发行版本安装软件的命令不太一样,需要根据自己的安装版稍微修改,比如说Fedora即使用yum命令安装)
对于Taglist使用这个方法安装不了,我们需要先下载,然后安装完成:
首先上网下载Taglist插件,下载完成后解压,再将文件下的taglist.vim使用cp命令拷贝到HOME/.vim/plugin文件夹下(cp -r taglist.vim ~/.vim/plugin)
2、vim的配置
vim是一个非常好用的编辑工具,以下介绍几个常用的底行模式命令:
(1). 设置缩进
:set smartindent // 设置缩进
:set smartindent shiftwidth=4 // C语言自动缩进,缩进值为4个字符宽度
(2). 显示光标行列信息
:set ruler // 显示光标信息(右下角)
(3). 查看制表符
:set list // 显示制表符,以^符号显示制表符的位置
(4). 查看行数信息
:set number //显示行号(左边)
(5). 关键字高亮
:syntax on //关键字高亮
(6). 多文件编辑 ,在编写程序时有可能需要同时编辑多个文件,在这种情况下,需要如下设置
: split two.c // 多文件编辑
当然,如果不嫌麻烦,可以在每次打开Vim时 输入如上命令,如我经常用的是:set number :set ruler :syntax on :set smartindent 命令,如果将平时在底行模式下输入的命令直接写入配置文件,则以后使用Vim时不用再次输入这些命令。
首先,试着在Vi的底行模式下输入如下命令,如果不支持的话,去下载一个Vim的全版本,sudo apt-get install vim-full。
以下是修改配置文件的方法:
(1). 找到Vimrc文件。
(2) 查看文件的权限:
ls -l vimrc
shisir@shisir-desktop:/usr/share/vim$ cd /etc/vim
shisir@shisir-desktop:/etc/vim$ ls
gvimrc vimrc vimrc.tiny
shisir@shisir-desktop:/etc/vim$ ls -l vimrc
-r--r--r-- 1 root root 2492 2009-04-10 08:08 vimrc
(3) 如果没有写权限的话,修改权限,使我们可以修改该配置文件
sudo chmod a+w vimrc
(4)根据个人需要将上述命令写入配置文件
比如,我个人的设置是: syntax on , set ruler ,set number , set smartindent shiftwidth=4
下面贴上我的vimrc文件的配置信息:
"显示行号
set number
"检测文件的类型
filetype on
"记录历史的行数
set history=1000
"自动对齐
set autoindent
set cindent
"智能选择对齐方式
set smartindent
"tab为4个空格
set tabstop=4
"当前行之间交错时使用4个空格
set shiftwidth=4
"设置匹配模式,输入左括号会出现右括号
set showmatch
"编辑时显示光标状态
set ruler
"快速匹配
set incsearch
"修改文件自动备份
if has("vms")
set nobackup
else
set backup
endif
"""""""""""""设置开启ctags"""""""""""""
set tags=/home/zhouyl/linux-3.4.7/tags;"这边设置的是你使用ctags -R的目录,后面有介绍!你根据自己的使用修改这个路径
set autochdir
"""""""""""""""""Taglist设置"""""""""""""""""
""let Tlist_Auto_Open = 1
let Tlist_C tags_Cmd = '/usr/bin/ctags'
let Tlist_Show_One_File = 1
let Tlist_Exit_OnlyWindow = 1
""""""""""""""""""""""cscope设置""""""""""""""""""
set cscopequickfix=s-,c-,d-,i-,t-,e-
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
因为我的文档中的原配置文件已经有了语法高亮:
" Vim5 and later versions support syntax highlighting. Uncommenting the next
" line enables syntax highlighting by default.
if has("syntax")
syntax on
endif
所以我就没写了,您如果vimrc文件里面没有此项建议自己加上syntax on 设置语法高亮
PS:在配置文件中"符号后的内容是注释,而且在配置文件中是不需要添加符号的 ,这里关于cscope、c tags和Taglist的设置可以先写上,后面将对这三个 插件有介绍。好了,去开一个Vim,编辑一个程序看看,是不是感觉很不一般呢?
好了,下面顺便演示下,智能补全的用法,我分四种情况:1、前面申明过的变量或者函数名的补全;2、结构体等自建结构的补全;3、STL等标准库的补全;4、括号、引号等自动匹配补全。
对于第一种情况,写程序的过程中,直接用CTRL+p即可选择,对于第二种情况,如果想申明了结构体T,想在输入T.时弹出成员供选择,只需在用之前按一下:CTRL+F12,然后效果如图:
3、Taglist插件的使用
TagList 插件,是一款基于c tags,在vim代码窗口旁以分割窗口形式(如上图所示)显示当前的代码结构概览,增加代码浏览的便利程度的vim插件.
在Vim中加载代码文件后,可以使用以下命令控制taglist
:TlistOpen 打开并将输入焦点至于标签列表窗口,效果如上图所示
:TlistClose 关闭标签列表窗口
:TlistToggle 切换标签列表窗口状态(打开←→关闭),标签列表窗口是否获得焦点取决于其他配置
ctl-w + w 或ctl-w + 方向键 窗口切换(taglist本质上是一个vim分隔窗口,因此可以使用ctl-w系列快捷键对窗口进行切换操作)
在Taglist窗口主要有以下操作
按F1:打开帮助
回车键:跳到光标所在的标记的定义处(如将光标移到main函数,按回车键)
o:新建一个窗口,跳到标记定义处
p:预览标记定义(仍然在taglist窗口)
空格:显示标记的原型(如函数原型)
u:更新标记列表(比如源文件新增了一个函数,并在保存后,可在taglist窗口按u)
s:选择排序字段(暂时我也不知道什么意思)
d:删除光标所在的taglist文件(如用vi打开了两个文件f1.c,f2.c可以删除f1.c的标记)
x:n放大/缩小taglist窗口
+:展开(指标记)
-:折叠
*:全部展开
=:全部折叠
[[:将光标移到前一个文件的起点
]]:将光标移到后一个文件的起点
q:退出taglist窗口
F1:关闭帮助
4、ctags插件的使用
VIM简单易用,大家只要看看VIM自带的vitutor,大约只要20分钟就能掌握VIM的用法,上面也简单介绍了点vim的用法。但是对于Linux下的C/C++的 程序员,使用VIM+C tags的组合来写程序也许是最佳的选择。^_^
尽管ctags也可以支持其它 编辑器,但是它正式支持的只有VIM。并且VIM中已经默认安装了Ctags,它可以帮助程序员很容易地浏览源代码。
熟练的使用ctags仅需记住下面七条命令:(很简单吧,呵呵)
1. $ ctags–R * ($ 为Linux系统Shell提示符)
2. $ vi –t tag (请把tag替换为您欲查找的变量或函数名)
3. :ts (ts 助记字: tagslist, “:”开头的命令为VI中命令行模式命令)
4. :tp (tp 助记字:tagspreview)---此命令不常用,可以不用记
5. :tn (tn 助记字:tagsnext) ---此命令不常用,可以不用记
6. Ctrl + ] 跳到光标所在函数或者结构体的定义处
7. Ctrl + T 返回查找或跳转
下面我们逐条的解释上面的命令:
“$ ctags–R *”:“-R”表示递归创建,也就包括源代码根目录(当前目录)下的所有子目录。“*”表示所有文件。这条命令会在当前目录下产生一个“ tags”文件, 当用户在当前目录中运行vi时,会自动载入此tags文件。Tags文件中包括这些对象的列表:
用#define定义的宏
枚举型变量的值
函数的定义、原型和声明
名字空间(namespace)
类型定义(typedefs)
变量(包括定义和声明)
类(class)、结构(struct)、枚举类型(enum)和联合(union)
类、结构和联合中成员变量或函数
VIM用这个“ tags”文件来定位上面这些做了标记的对象。
剩下的命令就是定位这些对象的方法:
“$ vi –t tag” :在运行vim的时候加上“-t”参数,例如:
[/usr/src]$ vim -t main
这个命令将打开定义“main”(变量或函数或其它)的文件,并把光标定位到这一行。如果这个变量或函数有多处定义,在VI命令行模式“:ts”命令就能 列出一个列表供用户选择。 “:tp”为上一个tag标记文件,“:tn”为下一个tag标记文件。当然,若当前tags文件中用户所查找的变量或函数名只有一 个,“:tp,:tn”命令不可用。 :(
最方便的方法是把光标移到变量名或函数名上,然后按下“ Ctrl+] ”,这样就能直接跳到这个变量或函数定义的源文件中,并把光标定位到这一行。用 “ Ctrl+T ”可以退回原来的地方。即使用户使用了N次“Ctrl+]”查找了N个变量,按N次“Ctrl+t”也能回到最初打开的文件,它会按原路返 回 。 ^_^
注意:运行vim的时候,必须在“ tags”文件所在的目录下运行。否则,运行vim的时候还要用“:settags=”命令设定“tags”文件的路 径,这样vim才能找到“tags”文件。在完成编码时,可以手工删掉tags文件(帚把不到,灰尘不会自己跑掉^_^)。
5、cscope插件的使用
Cscope是一个类似 ctags的工具。 你可以把它想作是超过频的 ctags,因为它功能比ctags 强大很多。 在 Vim 里,通过 cscope 查询结果来跳转就象跳转到其他的标签完全一样;它被保存在标签栈里。这样你就可以象使用 c tags一样在函数等等之间便捷的跳转 [6]   。
在VIM中使用cscope非常简单,首先调用“cscope add”命令添加一个cscope数据库,然后就可以调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,如下:例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:cs find c work”,回车后发现没有找到匹配的功能,可能并没有函数调用work()。我们再输入“:cs find s work”,查找这个符号出现的位置,vim列出了这个符号出现的所有位置。我们还可以进行字符串查找,它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式,这类似于egrep程序的功能。
在源代码目录下打开vim。要使用cscope查找就必须加载cscope.out文件.在vim命令行下执行:(按照上述方法配置好的vimrc中有这一步)
:cs add cscope.out
在vim命令行下执行:
:cs help
cscope commands:
add : Add a new database (Usage: add file|dir [pre-path] [flags])
find : Query for a pattern (Usage: find c|d|e|f|g|i|s|t name)
c: Find functions calling this function //查找调用本函数的函数
d: Find functions called by this function //查找本函数调用的函数
e: Find this egrep pattern //查找egrep模式,相当于egrep功能,但查找速度快多了
f: Find this file //查找并打开文件,类似vim的find功能
g: Find this definition //查找函数、宏、枚举等定义的位置,类似c tags的功能
i: Find files #including this file //查找包含本文件的文件
s: Find this C symbol //查找C语言符号,即查找函数名、宏、枚举值等出现的地方
t: Find assignments to //查找指定的字符串
help : Show this message (Usage: help)
VIM命令 VIM命令
kill : Kill a connection (Usage: kill #)
reset: Reinit all connections (Usage: reset)
show : Show connections (Usage: show)
例如:使用cscope查找do_fork函数的定义:
在vim命令行下执行: :cs f g do_fork

8.0 不再支持的版本

编辑
  • 16 位的DOS、OS/2 和 Amiga 版本
  • 32 位的 MS-DOS/Windows 95/98 的字符界面版
  • 16 位的 MS-Windows 版本 [3]  
参考资料




在 Vim 中使用 graphviz.vim 画图 本文主要介绍 graphviz.vim, fork 自 wmgraphviz.vim,但是除了复用补全数据,我几乎重写了所有内容,并做了很多改进。 可能很多人没用过 graphviz,它是一个开源的图可视化工具,使用 DOT 语言进行绘制,优点是可以自动布局,尤其适用于复杂的流程图,结构图等等。官方有很多示例,使用时也可以参考一些其他的优秀案例,比如: 本文并不会对 graphviz 本身做太多... 阅读详情

相关推荐

MIMIC数据库基本信息分析

一、MIMIC数据库中26张表介绍 数据库中一共有26张表,记录患者入院的各种信息,每张表的介绍如下所示。 表格名 信息 admission 患者基本信息,比如性别、种族、语言、宗教、婚姻、入院和出院时间、死亡时间等 callout 提供病人准备从ICU转出或者已经从ICU转出时相关信息 caregivers 记录医护人员信息(ID、类型、附加...

m0_37520426的博客 1万+

Vim安装与使用详细教程

欢迎关注本人Github:https://github.com/itgoyo Vim 详细Vim快捷键大全 Vim的配置以spf-13为例子 项目地址: https://github.com/spf13/spf13-vim Vim的安装 Linux, *nix, Mac OSX Installation The easiest way to install spf13...

itgoyo的博客 5万+

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

睶 38万+

编辑器之神——vim编辑器(详细、完整)

编辑器之神——vim编辑器的使用,非常详细完整,图文结合易掌握

永不落的梦想 8万+

USB3.0 Type-B连接器SSTX/SSRX信号定义常见错误与硬件设计避坑指南

本文详细解析了USB3.0 Type-B连接器中SSTX/SSRX信号的定义标准与常见设计错误。针对连接器厂商图纸可能出现的信号标识错误,提供了实用的排查方法和硬件设计避坑指南,帮助工程师避免因引脚定义颠倒导致的通信降级或故障,确保USB3.0高速传输的稳定性。

gg901的博客 1263

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 584

vim使用教程

转载 https://blog.youkuaiyun.com/qq_30748863/article/details/84669058 文章目录 一、什么是VIM 二、VIM入门 三、常用命令介绍 移动 选择 复制 粘贴 删除(剪切) 撤销 恢复 查找 替换(修改) 缩进 标记 查看历史 进入插入模式 进入底行模式 其他tips 一、什么是VIM 在说vim之前,先说下什么是vi。vi是visual in...

IDzengkun的博客 2万+

磁传感器技术解析:从霍尔效应到车规级应用,纳芯微的本土第一之路

磁传感器是现代工业与汽车电子中的关键感知元件,其技术演进经历了从分立器件到高集成度SoC的跨越。霍尔效应与磁阻效应构成两大物理基础,其中硅基霍尔方案凭借高性价比与成熟供应链,在车规级应用中占据主流。高精度电流检测、角度与位置感知、磁开关等场景,对传感器的温漂抑制、共模瞬态抗扰与批量一致性提出严苛要求。车规级可靠性体系与系统级集成能力,成为衡量供应商的核心标尺。随着新能源主驱、光伏逆变、工业伺服等应用爆发,具备完整信号链与隔离技术积累的厂商正逐步构建护城河。本文以纳芯微为样本,剖析其从隔离技术延伸至磁传感器平

weixin_34387468的博客 365

vim的使用(超详细)

目录 文章目录一、vim模式二、打开文件三、插入命令四、查找命令五、替换命令六、撤销和重做七、删除命令八、复制粘贴九、剪切粘贴十、退出保存十一、移动命令十二、排版功能十三、注释命令十四、调整视野十五、区域选择十六、窗口控制十七、文档加密十八、执行命令十九、帮助命令二十、宏的使用二十一、vim查找与替换的扩展补充 一、vim模式 回到目录 1、正常模式:按Esc或者Ctrl+[进入 左下角显示文件名...

qq_40650558的博客 2万+

龙腾CMS downloadFile接口任意文件读取漏洞复现 [附POC]

大连网龙网络科技有限公司专注于在信息科技领域中向客户提供商业解决方案,是专业的互联网服务解决方案提供商和网络营销服务专家,为用户提供一体化的网络营销整体解决方案,龙腾CMS downloadFile接口存在任意文件读取漏洞。

薛定谔嘚喵博客 720

Python 爬虫实战:医学临床指南爬取(含 PDF 解析与结构化存储)

在当今数字化时代,医学临床指南作为医生进行科学诊疗的重要参考资料,包含大量经过临床验证的诊疗路径和建议。这些指南通常发布在权威医学网站上,数量庞大且更新频繁。如何自动化地抓取并存储这些指南,成为医疗数据分析、医学研究以及医疗 AI 模型训练等工作的关键第一步。本文将系统讲解如何利用 Python 爬虫技术从权威医学网站爬取临床指南内容,并实现 PDF 解析与结构化存储。

u014481728的博客 449

Linux基础-vim命令详解(理论+实战)

本文主要内容为vim命令介绍、命令模式介绍、vim操作、vim命令可视化模式及用法

qq_27815483的博客 4万+

Dify基础:Dify平台的本地化部署(含windows部署中,常见问题及解决方案)

第一种比较简单,只需要在浏览器中,打入https://dify.ai/就可以。这个指令虽然看起来简单,但实际上涉及到对docker的使用。这个项目既然有github地址,那它一般就是开源的。我们点开这个github地址,便能看到dify的私有化部署方式。我们可以看到,还是上面那个图,有个按钮,是指向该项目的Github地址的。第二步:按照dify的github给出的指令,对dify进行安装。第一步:我们把dify下载到自己的电脑(或者服务器)上。这里,我们只考虑第二种方式,也就是私有化部署。

xiezhipu的博客 1万+

[VIM] VIM 实用插件整理

工欲善其事必先利其器,windows 环境下有诸多好用的 IDE,但在 linux 环境下,可供选择的工具并不多,但是 VIM 作为一款可扩展文本编辑工具,配合丰富的功能插件,同样能满足我们的工作需要,甚至由于其强大的可扩展性,我们能够实现更丰富、更强大的编辑支持。下面是我整理的一些比较常用的插件。 环境:Ubuntu 18.04.2 VIM:vim 8.1.1037(vim ...

似水流年 4万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

vim复制粘贴(从系统粘贴到vim中,以及从vim中粘贴到系统中)

vim与系统剪切板(将vim的内容复制到系统剪切板、或将系统剪切板内容复制到vim中) vim插件检查 要完成vim中的内容复制到系统剪切板,需要vim支持 +clipboard,检查的方法(ubuntu16.04为例): 打开terminal(ctl+alt+t) 输入 vim --version | grep clipboard 你会得到这样的结果 查看clipboard和xterm_c...

EngineerHe的博客 4万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

vim vim-plug .vim插件安装及使用

Table of Contents 第一:检查当前用户下是否有文件夹:~/.vim 1、创建相应的文件夹和文件 2、文件夹解释 第二:首先安装管理器插件管理器vim-plug 第三:安装插件: 第一:检查当前用户下是否有文件夹:~/.vim 1、创建相应的文件夹和文件 如果没有(一般自己创建)mkdir ~/.vim 在~/.vim 下创建plugged 文件夹 在~/...

shenlong1356的博客 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Vim 常用插件安装(vim-plugs, vim-gutentags 等)

vim 插件的安装

qq_35575868的博客 6291

ubuntu安装VIM

工具/原料 LINUX操作系统(ubuntu/Centos) VIM的安装方法/步骤1: 在命令行敲入“vi”后按"tab"键,可以看到目前系统中只安装了vi和vim.tiny。 vim是从VI发展而来的一个文本编辑器,功能更强大。而vim.tiny是vim的精简版,所以,安装vim势在必行。 方法/步骤2: ubuntu系统: 普通用户下输入命令:sudo apt-get install vim-gtk centos系统: 普通用户下输入命令:yum -y install vim*

qq_27006271的博客 3万+

【Vim】Vscode 配置 Vim

文章目录Vscode 配置 vim一、Vim 简介二、Vscode 配置 vim1. 安装2. 配置- mac系统- Windows三、配置项说明四、参考链接五、总结 Vscode 配置 vim 强烈建议安装后查看参考链接中的指尖飞舞:vscode + vim 高效开发(系列视频) 一、Vim 简介 Vim 是 Vi Mproved(改进) 是一款强大的编辑器,基于 Linux 平台下的 Vi 开发。因为操作是基于命令方式,所以能够跨平台安装,功能强大,具有以下特点: 内存占用低 以命令为中心,可

weixin_44746306的博客 6173

VIM — vim-go

目录 文章目录目录前文列表vim-go 前文列表 《快速搭建你的编程环境:VIM + dotfiles》 vim-go vim-go 是当前使用最为广泛的 Golang VIM 插件。利用 gmarik/Vundle.vim 插件管理器即可安装。 vimrc Plugin 'fatih/vim-go'3 执行 :PluginInstall 自动安装。 安装好 vim-go 之后,执行 ::GoInstallBinaries 开始交互式安装下列辅助工具: gocode:自动补全工具,装了 YouCompl

烟云的计算 5073

让你的vim更加强大,vim-plug安装插件实战!

前言:在掌握了vim的基本配置和操作,经过一段时间的使用后,vim逐渐展示它作为编辑器的强大,但是有时候我们又有些不满,尤其是希望vim能够变得更加smart,并且能够扩展它的功能,于是我们开始使用vim插件。 vim的插件实际上是一些脚本,大多数是vimscript,如果vim在编译时被合适地配置,也可以使用lua、ruby、python、go等语言编写的插件。vim插件的主要作用是拓展vim的功能,通过合理地配置插件,可以让vim更加顺手。 下面,本文将分享如何在vim/neovim上使用插件管理器.

weixin_45859128的博客 1万+

Centos7升级Vim7至Vim8

Centos7升级Vim7至Vim8 起因   本人因为工作的需要,要在Centos上安装Vim-Go进行Go的开发;但是安装了Vim-Go之后发现Vim的版本不对,Vim-Go需要使用Vim的版本是Vim8,,但yum上镜像的版本最新也是7.4。因此,我在网上查看了一些升级Vim8的教程。   网上升级的教程有一部分是已经过时的,升级的包已经不存在了,还有一部分是要卸载原先的vim之后再重新安装...

qq_37903963的博客 7431

[VIM] VIM 更新与配置

1、vim 更新 Ubuntu 已经自带了 vim,但不一定是最新版本,如果需要使用最新版本,可以自助升级。 查看 vim 的安装版本: vim --version 更新 vim sudo add-apt-repository ppa:jonathonf/vim sudo apt update sudo apt upgrade 附:vim...

似水流年 8473

vim 插件之 vim-plug安装

使用主要是因为vim-plug安装插件是并行的,比vundle要快得多,而且提示信息也更加丰富。 1.安装vim-plug curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 2. 修改 ~/.vimrc文件...

mr_legeek的博客 6867

UBUNTU中可用的不同VIM包之间有什么区别?vim-gtk和vim-gnome,vim-nox,vim-athena

https://ubuntu.dovov.com/3857/ubuntu%E4%B8%AD%E5%8F%AF%E7%94%A8%E7%9A%84%E4%B8%8D%E5%90%8Cvim%E5%8C%85%E4%B9%8B%E9%97%B4%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.html

二进制模----细微行动改变影响世界 4594

Vim插件之ack.vim

与ctrlp一样,ack.vim也是Vim上的一个搜索工具,主要用于项目内搜索,比如搜索某个函数之类的非常方便,ack还有一个基于The Silver Searcher的fork版本ag,速度比ack更快,但功能不如ack丰富,而且ack也允许调用ag进行搜索,因此更推荐用ack,要使用ag必须先在系统中安装The Silver Searcher,在Debian上只需执行$ sudo aptitud

Sorel的博客 8974
上一篇: Java 字符串处理的一些小细节
下一篇: VIM 必看操作知识!
Footloose_
博客等级 码龄10年 254粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值