VIM的一些自己的使用tips(5年前整理的,看到后热泪盈眶)

来源:互联网 发布:淘宝达人是怎么赚钱的 编辑:程序博客网 时间:2024/06/05 17:55

高效利用 VIM,成为编码高手(环境 VIM7.2)

很久以前,接触了 Linux 系统,并且开始在 Linux 系统上开始了我的 C 语言学习历程。最先一般都
是在 gedit 里面像高亮版本的记事本一样写程序。后来知道原来 Linux 下有 2 个历史上很有名的编辑器,
一个是 VIM,一个是 Emacs。而且还有人说过一句话:世界上分为 3 种程序员,一种是用 VIM 的,一种是用
Emacs 的,还有一种是其他的。虽然这句话很片面,但是还是能够说明 VIM 和 Emacs 确实是很经典的,能
够把我们的编码速度提高到极致的编辑器。因为我电脑里面只安装了 VIM,所以我就开始用 VIM 写程序。最
先的时候很不适应,觉得根本不好用。还要分 3 种模式,好麻烦的。于是就开始学习怎么使用 VIM,看汉化
的 VIM 文档,还有网上一些前辈的文章,慢慢的,对这个编辑器熟悉了很多。基本可以完全不用鼠标,完全
用键盘进行编程,平时阅读开源软件或者其他的源代码也是完全用这个甚至些一些文本的文档也是用的这个。
觉得真的用起来太方便了!首先截上几张我的 vim 的截图
这里写图片描述
这个是我在阅读 snort 源代码的时候进行的一些操作。其中安装了很多插件在上面,还设置了函数高亮以及
键盘映射的一些东西。觉得已经很够用了。其实 vim 最经典的还是 h,j,k,l 这 4 个按键。太经典了!手都
不用脱离按键区,确实提高了不少效率。
接下来先教大家我这个 vim 是怎么配置的。
Part1:
1.解压安装插件和配置 tar zxvf vim.tar.gz -C ~/
2.安装 ctags 还有 cscope:
sudo apt-get install ctags cscope
最后的两个工具主要是词法分析的工具,很多插件的功能会依赖这 2 个工具。
就这么简单,插件和配置文件的配置就完成了。当然这钟配置只能够给当前用户使用,如果要给全局的用户
都有效的话,要用 root 把 vimrc 拷贝到/etc/vim/vimrc 文件里面,其他文件放到 vim 的安装根目录
/usr/share/vim/vim72/
PS:下面讲到的所有与 Ctrl 相关的命令都是在 Ctrl 按住的情况下按另外那个键另外,大写字母你可以用
shift+[char]也可以打开大写锁定(capslock)
基本的配置就完成了。现在说说我自己的平时用得最多的一些东西吧。
配置完了估计你不会觉得 vim 差别有多大,就只是可以在左边显示行号了。这个时候,你试试按下 wm 两个
键(先按 w,再 m)是不是奇迹出现了?左边的文件管理窗口,以及 C 文件信息都出现在了 vim 界面上。呵呵。
很神奇吧~那两个界面其实是靠的插件(最后会说到插件)调用的 vim 内置的 split 命令实现的。当我们需要
在 vim 上建立自己的窗口分割时,也可以用这个命令的哦。使用方法
:split 123.txt
即可如果改用 vsplit,可以横着加入一个分割。然后我们如果要在几个 split 之间进行切换操作,在鼠标
的 a 模式下可以用鼠标.但是笔者觉得用鼠标是一种效率很低的操作。所以我一般用快捷键
Ctrl+w
进行切换。Ctrl+w 是一个命令,在正常模式下使用,按下之后,如果按一下方向,即可移动到相应方向的分
割,Ctrl+w+w 是沿着 split 的顺序进行切换就不需要加方向了。
这里写图片描述

另外还有一种标签式的编辑多个文件的方法,就是 tabe 命令使用
方法跟 split 一样的.效果如下
切换窗口可以用鼠标点击(前面的配置里启用了鼠标选项)但是我
一般不用鼠标。因为鼠标确实很不效率。用命令在正常命令模式
下按 gt 则是切换到下一个标签,按下 gT 则是切换到上一个标签。
另外,如果标签很多,可以在前面加上数字 3gt 是切换到下 2 个
标签(包含了自己。呵呵)一般这样切换就很效率了。也有其他切
换方式。感兴趣可以自己搜搜~呵呵(我去,那个年代呵呵还是很正常的)。

这里写图片描述

Part2:
然后我再来和大家说说我平时使用得最多的 vim 命令以及一些自己遇到的问题和解决方法。
一、模式切换
大家知道 vim 有 3 种模式。正常,插入,可视其中,一般是按 i 进入插入模式写代码,但是有时候在行末尾的时候,按 i 却总是在最后个字符之前进 入的编辑,这个时候我们只要按 a 即可在光标字符之后进入插入模式。另外,我最喜欢用的一个命令是 o/O 小写的 o 是往下插入一行,进入插入模式。大写的 O 是向上插入一行进入插入模式另外还有 c/C 我用得不多。 是删除一行内容进入插入模式。至于大小区别,请读者自己去试试。进入可视模式可以用 v 命令。这个 v 是 这个样子的但是如果我们用 Ctrl+v 则是块模式~呵呵。我很喜欢用块模式,当我要注释很多行代码的时候, 我就直接 ctrl+v 先选中要注释的行。然后按 I 大写的 I,进入插入模式光标位于行首。然后写下//最后 ESC 下,效果就出来啦~要删除也很简单,直接再 ctrl+v 选中后按 d 就删除完了。这个确实有用建议大家 可以试试~呵呵
这里写图片描述
二、光标移动
1—h,j,k,l 这几个是最经典的 vi 命令了~经典得确实没有话说。完全摆脱了键盘上的束缚。让 手完全位于键盘关键区。可能刚开始用 vim 会不习惯这种操作方式。但是慢慢的,会发现,原来那么的爽! 这里我做了个键盘映射,在插入模式下,Ctrl+h 也能够左移其他几个都能够在按住 Ctrl 键进行移动
2—w , f , ,0,可 以移动到一行的末尾,0 可以移动到一行的开头。最后那个%和[,]可以移动到括号处。%我用得比较多,在 一个有括号的行按一下即可移动到匹配的括号处去。另外两个是直接移动到相应方向的括号处,试试即可~
3—gg,G,ctrl+f,ctrl+b。要进行大篇幅的移动的时候,这几个命令可以派上用场。gg 是移 动到文本开头,G 是移动到文本尾部。而且如果在前面加上一个数字,比如 121G 或者 121gg 即可移动到 121 行的开头哦。Ctrl+f 屏幕向下移动一页 ,就是 pagedown 那个建 。Ctrl+b 屏幕向上移动一页, 就是page up的作用。另外有ctrl+D(向下移动半屏)ctrl+U(向上移动半屏)这2个我几乎没用过。。。
4—’。单引号,这个命令可以让我们在大场合下进行光标的移动。我一般用的就 2 个。一个是”就 是连续按 2 次单引号。这个可以让我们在两个跨越比较大的地方进行光标的切换。比如我现在在第一行,然 后按 G 移动到最后一行这个时候我们要回到之前的那一行,就直接按 2 次单引号就 OK 啦。另外一个就
是’ ” 先单引号,再双引号。这个可以让我们在重新打开一个文件的时候,光标移动到上次关闭文件的光标 位置处
三、搜索,替换,删除
1—直接/word 或者?word 即可搜索 word 这个单词,前者是光标向下找,后者是向上。另外,vim
支持搜索正则表达式。这样我们就可以很容易的匹配到自己想要的结果啦~
2—按# 。这个是快速搜索,直接找当前光标下的那个单词
3—n / N 。这个就是重复前面一个搜索的意思。比如,前面是搜的/yutao,这个就是再搜
一次yutao ,N和小n的功能刚刚相反,那个是重复前面的,这个是反向搜索~嘿嘿 4—:n1,n2s/word1/word2/g 这个功能是替换。意思是,从n1到n2行间,查找到word1,
替换为 word2,如果我们把 n2 换成来,,gc ,,n1,n25x/X,d/D,c/CxX dcd,cd,cdd5,5dddw,d…..反正按一下 d,然后 按移动的命令,就是从当前光标删除到移动那个位置。这里我要给大家讲一个比较不错的使用技巧 di”你在 一个有 printf(“xxxxxxxxxxx”);这种行试试就可以了~呵呵~是不是变成了 printf(“”);为什么 会成这样原因我也解释不清楚。偶然间发现的~(^__^) 嘻嘻……ci”就可以直接编辑那个地方哟~~
另外要说的就是 vim 的查找和替换都支持正则表达式的。比如,我想要把文本中的所有 fun(a,b,c) 改为 fun(b,a,c)就直接这样:%s/fun(([^,]),([^,]),([^,]*)/fun(\2,\1,\3)/g 这个如果 你看不懂……就搜一下正则表达式吧~不在本文的讲解范围~呵呵
四、撤销,重做
一般的图形界面下的编辑器,CTRL+Z 是撤销的意思。CTRL+Y 是重做。这 2 个我以前用得相当多~但 是到了 vim 下~撤销的命令是 u 重做的命令是 CTRL+R。我不知到为啥设计者要这样设计。
Part3:
vim 与系统剪切版的使用。
在平时的情况下~我们要从网上拷贝一些东西到 vim 里面,在 vim 终端上直接点击右键,就可以直接实现粘 贴功能。但是在我们想从 vim 中复制东西出去的时候,却发现选中后,复制那个选项是灰色的,这个是因为我 之前在配置文件里面写了一个 set mouse=a;这个就是设置鼠标作为 vim 的光标作用。我们只要 set mouse=v 就可以让鼠标像选中终端的文字一样选中 vim 正在编辑的文本了。
Part4:
寻求编程的帮助 谁敢说他一切的代码全部是自己脑壳里面记下来的,那么多库函数,参数,返回值等等~肯定很多记不住或 者记忆模糊,这里我们就要在 vim 里面寻求帮助咯~记得以前很喜欢 TC 编辑器的帮助功能,很不错~我们 vim 也是有很强大的帮助体系哟当我们在某个函数上面的时候,如果我们想要查询它的系统帮助文档,按一下 K 即 可但是有的时候,会发现它出来的是系统命令的说明文档(比如 printf)这就要求我们知道 man 手册的帮助 模式了。每个手册都是有一个区段号的,我们先在bash下man man一下~看下自己的说明文档可以看到它 对每一个号都有说明的。1 是代表用户命令,2 是系统调用,3 是函数库,4 是设备等等像 printf 这种既是用 户命令,同时也是函数库的字眼,我们就要指定索引类型了 man printf 一下,然后对比 man 3 printf。 根据这个规则,我们在 vim 下,要索引特定类型,就直接[number]K 就可以咯。比如我在 printf 上按下
3 K 即可跳到 printf 的函数 man 手册去方便吧~另外吐槽下就是有的 Linux 发行版 man 手册并没有带完所 有的库函数。需要自行安装。比如 POSIX 线程库就没有相应的 manpage。Ubuntu 下 sudo apt-get install manpages-posix-dev 即可。呵呵(我去,又是一个呵呵)~
这里写图片描述
Part5:
语法折叠
相信用过 eclipse 之类 IDE 的朋友肯定都很喜欢它的代码折叠功能作为一个很好的编辑器肯定都是有这个 功能的。下面我来介绍下 vim 的代码折叠。由于我平时只用一种折叠方式,所以我只讲我用的方式。如果有
兴趣可以自己查看下帮助直接输入命令:help fold 我使用的折叠模式是indent(缩进)直接在我们的文本下面输入:set foldmethod=indent开启模式
(我在 vimrc 下写的默认折叠是 manual,你可以根据你的需要更改为 indent) 现在讲讲怎么查看折叠代码和折叠代码
在正常模式下,我们输入 za/zA 命令即可控制折叠了。如果当前处已经折叠,则是打开折叠代码,如果没有折 叠,则是折叠代码,A 是连同子折叠也一起打开了。具体折叠的方式已经顾名思义—缩进.大括号处折叠。
Pary6: 使用vim宏
以前没有怎么用过 vim 的宏,后来去搜了搜,发现真的是经典中的经典!它可以记录我们在 vim 下进行 的操作,然后我要使用这一系列的操作,只调用那一个宏就可以了.而且宏会保存在 vim 寄存器中,只要没有被 覆盖,即使关闭了 vim,重新打开也是存在的这个一般是我们想到了要做一系列连续的事情的时候才用。我这 里就举一个简单的例子吧。把一行注释成为/xxxxxxxxxxxxxxxxxxxxxxxx/的样子。当然你完全可以用 //注释很效率,但是我这里是为了演示宏的强大。具体操作如下:
首先在正常模式下按下 q,然后随便按一个字母(你要记得到哈)我这里就 t 吧。也就是按下 qt 然后 vim 下 面会出现记录中的说明。好了,现在它就开始记录我们的所有的操作了。 然后我们首先到行首—正常模式下按 0。然后进入插入模式—正常模式按 i 然后输入/然后 ESC 回到正 常模式,然后到行尾部—-$然后进入插入模式—-a 然后输入/。这里最后为什么要按 a 进入读者请自己 实验即可知道。
最后按下 ESC 回到正常模式。按下 q 完成记录!
这样,一个叫 t 的宏就制作完成了。我们在想要执行这一系列命令的地方按下 @t(正常模式下按)你应该就 能看到效果咯。如果我们要执行 10 次宏命令,就按 10@t 就 OK。vim 会执行 10 次这种命令哦~
Part7:
源代码阅读
1、ctags。通过这个工具,我们可以创建一个名为 tags 的文件,这个文件里面全是宏和函数的定义等。一 般我们要补全和高亮等,很大程度都得靠这个玩意儿。生成 tags 命令如下:
ctags -R –c-kinds=+p –fields=+S 目录名
这里我已经把我的库生成了一个 tags 放到了.vim/plugin/这个目录里面,而且在 vimrc 上面已经引用了。 现在讲讲用法:
在阅读源码的时候,我们在把光标移动到一个函数或者宏上的时候,按
下 Ctrl+],这个时候你会发现直接跳到了这个函数或者宏的定义的地方。 然后按下 Ctrl+t 跳转回之前编辑的文件。按下 Ctrl+w+]就会直接
split 一个新的窗口出来~十分方便~呵呵。然后我讲讲我下的一个叫
做 tagHighlight(http://www.vim.org/scripts/script.php? script_id=2646)的插件。这个插件要在 python2.6 的基础上使用,使用 命令:UpdateTypesFile 可以让 vim 生成当前目录下的 tags 文件,然后 再生成一个自己的语法文件叫做 types_c.taghl。当然,它支持很多种语 言,不仅仅是C/C++,具体可以help TagHighlight。使用这个插件,我们 可以直接根据 tags 文件让宏和 typedef 高亮起来哦~而且还高亮我们自
定义函数,系统函数是之前配置的颜色~这样代码的阅读更赏心悦目啦。
这里写图片描述
2、cscope。这个和 ctags 有点像,但是比 ctags 定位更加准确。特别是在一个工程比较大的项目中,显 得尤为重要。在 vim 中输入命令:cscope 即可看到系统的帮助
这里写图片描述
一般用得最多的都是 find 命令。用法已经写了比如我要找 main 这个函数定义的位置,就输入如下命令 cscope find g main回车马上光标就会跳到main函数处!命令确实比较麻烦。所以下面介绍下高级 用法。
我安装了一个叫做 cscope_maps.vim(http://cscope.sourceforge.net/cscope_maps.vim),这个插 件可以把 cscope 上面的一些功能映射到键盘按键上面。我们可以直接用按键来快捷的进行查找工作。 把光标放到一个在你程序中多处用到的符号上,连续输入 CTRL+\ s(Control 加反斜线,然后 s),你 会在 Vim 窗口底部看到一个显示出程序中所有引用了该符号的地方的菜单。选择其中一个按 Enter,就会跳 到那 个引用的地方。在 ctags 里,你可以输入 CTRL-t 跳回到搜索之前的位置(还可以嵌套搜索, CTRL-t 会一次回退一层)。
如果想也像之前那样 split 一个窗口出来,也是可以的。我们只用把之前的\换做成为(数字键的最左边那 个) 或者2就可以了。(分析插件发现本来映射的应该是@但是不知到为啥或者2都可以。。)
Part8:
代码补全
有了代码补全,啪拉啪啦代码就出来了。多安逸啊!vim 的代码补全也是很强大的哦!
vim 的代码补全全靠的 tags 文件来实现的。首先是按下 tab 键,即可实现最平常的补全功能。这个是因为 我安装了 supertab(http://www.vim.org/scripts/script.php?script_id=1643)这个插件,平时 的话就是 Ctrl+N。这个叫关键字补全模式。这个就可以实现简单的补全功能但是会发现这个把该出来的和
不该出来的都出来了,点都不智能。所以我们讲讲其他的。(supertab 插件会重复你上一次的补全模式) 我们用得最多的也就是结构体补全吧~一般要求准确。让结构体成员准确无误的出来,我们就用全能补全模 式快捷键:Ctrl+x Ctrl+o
其实在按 Ctrl+x 的时候,应该你就能发现很多选项了。那些选项具体是什么补全模式你就自己去试吧。我 懒得一个一个讲咯。什么文件补全啊,字典补全,全文补全之类的,自己一个一个去试试吧
这里写图片描述
最后得说说函数补全功能。是我下载了的一个插件叫做 codecomplete(http://www.vim.org/scripts/script.php?script_id=1764)实现的。它可以根据 tags 文件里面定义的函数原型,生成函数的参数列表。本来之前的快捷键是 tab,但因为和 supertab 冲突 了,所以我修改成了 Ctrl+p 来补全。我们先输入一个 main,然后按下 Ctrl+p,试试效果?呵呵。 然后我们随便输入一个函数,试试效果 memcpy(然后按下 Ctrl+p(需要注意的是必须要加上’(‘,不然没有 反映。现在就发现函数的原型出来了,再按下 Ctrl+p,就跳到了第一个参数,再按…….. 需要注意的是。由于库的文件错综复杂。所以直接生成的 tags 会造成很多函数补全不出来。或者有多个匹 配项。这个大家可以选择手动在 tags 文件里面去添加或者重新生成 tags 文件。
现在说说我里面的插件之 csupport—-让 VIM 成为 IDE
首先它提供了比较全面的帮助文档:help csupport
大家应该能够发现,在编辑一个.c 或者.cpp 文件的时候,会出现一个模板,没错,这个就是这个插件产生 的。大家可以在~/.vim/c-support/templates/Templates 文件中修改上自己的注释。比如我的就是
这里写图片描述
呵呵。这个插件功能可厉害啦。在插入模式下输入\im 试试。你就能够很明显的看到是不是 main 函数直接 出来啦?而且还带有注释的。输入\ii。是不是一个标准库打开文件的模板就出来啦?当我们写完一个文件 之后输入\rr 试试效果呢?呵呵。编译错误就出来啦,而且在错误上回车一下,就跳到那一行去了哟。。如 果没问题,就直接运行结果出来了。里面的内置命令很多。我们可以输入\ h p (插件帮助)去看看。功能确实 很丰富。但是也很多比较冗余。自己看几个喜欢的记住用就 OK 了吧~~
这里写图片描述

Part9: 几个与我们相关的目 录说明 autoload:插件的函
数库(有点相当于 C 语言里面的动态库的意思)
doc: 说明文档存放目录
syntax:语法文件。定义语法高亮很多就是在这里哦
plugin:插件目录 ftplugin:也是插件目录,但是这个目录下的插件只对自己类型的源文件起作用,不是全局的插件.比如有 个 c.vim 的插件,就只会对.c 的文件进行功能性的操作,其他文件不会有效果 backup:这个目录是我设置的。就是每编辑一个文档,保存后在这里都会有一份保存之前的备份文档。这个 的作用自己去体会吧
c-support:这个是 c.vim 插件的目录,里面有很多它的模板和字典文件。
dist:TagHighlight 插件的目录。具体什么用我也不清楚。
总结:
vim 是一个很个性化的编辑器。我的配置不一定大家都喜欢,而且还有很多插件并没有讲解,比如 php 的函 数补全,python 语法缩进,tagbar(按 F4 看效果)等等。但是可以根据这种配置发现自己的需要以及怎么解 决。我上面的大多都是来源于网上。有一些不喜欢的功能也有些修改。想到自己想要什么功能就去网上搜一 搜,看一看官方文档(可以汉化的哟)就出来啦。当然,等用熟悉之后 vim 的插件编写其实也不难,如果平时 时间有空闲,可以学一学插件的编写方法,键盘映射啊,高亮设置啊,等等。

2 0
原创粉丝点击