Linux江湖02:打造属于自己的Vim

  Linux系统中很多东西都是以脚本代码、配置文件的形式存在,使用Linux系统时,需经常对这些文件进行编辑。很显然,如果没有文本编辑器,江湖之路寸步难行。

  我的选择是Vim。Vim是Linux系统上的最著名的文本/代码编辑器,也是早年的Vi编辑器的加强版,被誉为文本/代码编辑器之中最为优秀经典的上古神器。
它之所以会获得如此美誉,我想主要有以下原因:1.它古老而神秘,学习曲线陡峭,难以驾驭,但是一旦学会则受益匪浅。如今被看作是高手、Geek们专用的编辑器。所以尽管
Vim 已经是古董级的软件,但还是有无数新人迎着困难去学习使用。
2.轻便,无需多言,当仅仅只需要对某一文本文件(比如脚本代码、配置文件)进行简单的编辑的时候,所使用的工具当然是越轻便越好。Vim同时也是阅读文本文件的利器。
3.经典巧妙的编辑方式及强大的功能。它全程使用键盘操作,用户必须记住一堆快捷键、按键组合以及各种命令才能开始使用,一旦使用熟练则编辑效率远超其余编辑器,而且具有各种插件、语法高亮、代码补全、配色方案等极其丰富的资源以及灵活的配置;

  我主要在以下情况下使用Vim: 1.用来修改服务器系统的配置文件; 很多时候, Linux
作为服务器是不会开启图形界面的,当需要远程操作时,只能利用 SSH“命令字符式”的 Shell 界面对其进行操作,这种情况下,Vim自然是首选。
2.用来阅读内核源代码和系统的脚本; 理由同上。
3.用来写简单的程序,一般都是单文件的程序,或多文件但是只有少数几个文件的项目,比如学习一门编程语言的时候做练习题,喜欢看到文件夹内干干净净,不喜欢一大堆类似.project的文件;
4.装B,花花绿绿的全文本字符界面,很酷。

  不适合Vim使用的场景:
1.大的编程项目,大的项目还是最好使用IDE,如果要远程连接没有图形界面的服务器写大项目,最好还是在服务器上建立代码仓库;理由:VIM没有好的项目管理功能,VIM的自动补全只建立在文本匹配上,没有程序语言的语义分析功能。
2.对内容的输入要求不高,但是经常需要设置显示格式,且每个动作之间本身就有很多的停顿的工作,用其他GUI编辑器(如LibreOffice
Writer)效率反而比VIM高。

  有人说,Vim是“成也插件、败也插件”。Vim灵活的配置和丰富的插件极大地增强了它的功能,但是也极大地增加了我们管理Vim的难度。首先,在使用Vim之前,必须经过适当的配置,而Vim的配置又极其繁琐。所以网上有很多诸如“万能配置”、“最强配置”的文章,这些都可以参考。但是这些文章中有些存在很多错误,甚至前后内容重复、冲突,而且这些文章是“授人以鱼,而不是授人以渔”,它们给出的配置虽然可以照抄,但是经常会让人不明所以。Vim的插件丰富,在网上不乏使用各种插件将Vim配置成强大IDE的文章,但是Vim的插件管理非常困难,因为每安装一个插件,都需要将该插件的文件分别放到Vim安装路径下的plugin、autoload、syntax、doc等目录下。好在是Vundle横空出世,它不仅解决了Vim插件在文件系统中分散的问题,同时能够自动搜索和下载插件。

安装和配置Vim

  使用Vim之前当然需要先安装,不过在Ubuntu中这都不算个事,一条sudo aptitude
install命令就可以搞定。由于Vundle搜索和下载插件需要git,所以我同时安装vim、gvim和git,如下图:

  在用户的主目录中建立.vim目录,在.vim目录中建立bundle目录,以后Vundle自动下载的插件都保存在这里。然后,进入Bundle目录,使用git
clone命令下载vundle。

  下面,开始展示我的配置文件(主目录下的.vimrc文件)。我的配置不同于网上流传的“万能配置”、“最强配置”。我的配置是能够达到我想要的效果的“最简单配置”。下图是第1到17行,这里配置了Vundle,使用Vundle来管理插件。在网上的一些配置中,常把Vundle的配置放到配置文件的最后,这是不对的。Vundle的配置必须放到最前面。(如果不用Vundle,用Pathogen插件也一样要把配置放到最前面。)这是因为,只有Vundle插件运行以后,Vim才会到~/.vim/bundle目录下加载其它的插件,如果Vundle没有先运行,Vim当然找不到下载的插件了。

  第18到44行,如下图,这是在GVim中截的图,顺便展示一下GVim的效果:

  第45到68行:

  第69到86行:

  从截图中可以看出,我的配置文件很简洁,并且将各种设置初略地分了类,并进行了简单的注释。该配置文件只对Vim进行最基本的设置,不包含任何键盘映射,也不包含任何脚本代码。我把Vim和GVim使用了不同的配色方案,Vim使用经典的desert,而GVim则是网上被众多人推崇的solarized,而且该配色方案是使用Vundle自动下载的。

使用Vundle管理插件

  Vundle可以自动下载和安装插件,只需要在“My Bundles
Here”注释后面使用Bundle命令把所需要的插件列出来,每个插件一行,然后运行:BundleInstall命令即可。Vundle支持github.com和Vim的官网vim.org。前面的配置文件中,solarized配色方案就是Vundle从github.com上下载的插件。下面,看看怎么从vim.org下载一个模拟黑客帝国的插件。如下图,在.vimrc中增加一行配置:

  保存该配置文件,并重新启动Vim后,使用:BundleInstall命令,可以看到自动下载和安装插件:

  输入:Matrix命令,可以看到如下效果:

  当然,该插件纯属娱乐。娱乐过后还是删除掉比较好。要删除一个插件,首先要从配置文件中将Bundle
‘matrix.vim--Yang‘这一行删掉或注释掉,如下图:

  然后保存配置文件,重新启动Vim,运行:BundleClean命令,如下图,删除一个插件后的效果:

怎么学习使用Vim

  使用Vim之前必须得先做点功课,否则根本玩不转,Vim只会滴滴滴乱响,让人一头雾水。好在是Vim有一个非常棒的帮助系统,通过该帮助系统,可以非常方便地学习Vim。比如前面展示的配置文件,我并没有做过多的解释,因为如果想了解某条设置的作用,只需要:help一下即可。下面以guioptions设置为例,来了解该帮助系统的用法。从我的截图中可以看到,我的GVim是去掉了工具栏、状态栏、菜单、滚动条的,只保留了编辑界面,要达到该效果,需要使用set
guioptions=...来设置。要想对guioptions有更深入的了解,可以使用:help guioptions命令,如下图:

  弹出的帮助文档:

  如果想对Vim进行系统的学习,可以使用不带参数的:help命令,如下图:

  由于Vim的命令非常多,几乎键盘上的每一个按键都有特定的用途,所以学习Vim的时候一定要做笔记哦。下面,我给大家分享一个Vim的键盘布局图:

  (该图片非常大,可以保存下来观看,或者在新的窗口中打开观看。)

  VIM的使用技巧,看这里http://vim.wikia.com/wiki/Vim_Tips_Wiki

使用Vim浏览Linux内核源代码

  下面来看实战,使用Vim浏览Linux内核源代码。工欲善其事、必先利其器,我前面讲到了使用Vundle可以自动管理插件,但是没有讲到Vim中究竟有哪些插件可用。可以到Vim的官网看看哪些插件的下载率比较靠前。地址这里:http://www.vim.org/scripts/script_search_results.php?order_by=downloads

  上图是排名前15名的插件的截图。如果只是阅读源代码的话,我觉得taglist.vim和The-NERD-tree这两个插件就够了,The-NERD-tree是浏览目录树的利器,taglist.vim是浏览代码的利器,可以非常方便地显示源代码中定义的各种类型、变量、函数等信息,也可以非常方便地在各个符号之间跳转。taglist.vim必须配合tags文件使用,Linux的内核源代码是C语言的,可以使用ctags命令生成tags文件。如果是想把Vim打造成强劲的IDE,还需要别的功能,比如自动补全、自动生成代码块、自动注释、自动Make、自动运行/调试等,以后需要用到相关功能的时候我再介绍相应的插件。在这里,只需要浏览源代码,我觉得taglist.vim和The-NERD-tree足以。

  首先,使用前文《玩转Linux系统的方法论》中介绍的方法,找到Linux的内核源代码,并安装:

  然后找出它们都在文件系统的什么地方:

  taglist.vim需要tags文件的支持,而tags文件需要使用tags命令生成,所以需要安装exuberant-ctags,如下图:

  解压Linux内核源代码,并生成tags文件,如下图:(这两个步骤都需要有点耐心,因为解压和生成tags这两个操作都很花时间。)

  下面,为Vim安装插件。从下面的图中可以看出,除了taglist.vim和The-NERD-tree,我还安装了a.vim,该插件可以方便地实现在.c文件和.h文件之间跳转。当插件名称中含有空格的时候,以“-”代替,如同The-NERD-tree。配置插件如下图:

  安装插件如下图:

  浏览代码前,需要告诉Vim使用哪一个tags文件,在这里,就是刚刚使用ctags生成的文件,可以通过:set
tags=/usr/src/linux-source-3.13.0/tags来设置。为了方便起见,我把该设置放到了.vimrc配置文件中,如下图:

  然后,启动Vim。如果编辑的是一个目录的话(如下面的:e
.命令,表示编辑当前目录),会自动跳出The-NERD-tree的界面,在目录之间导航非常方便,如下图:

  这里以Linux内核中红黑树的实现为例。使用The-NERD-tree定位到lib目录下的rbtree.c文件,按Enter键即可打开代码。输入:TlistToggle命令可以打开Taglist窗口,如下图:

  在源文件中浏览时,使用Ctrl+]快捷键,可以非常方便地在符号的使用和定义之间跳转。上面的截图是将控制台全屏后的效果,是不是很拉风?

  再看看在GVim中浏览代码的效果:

  上图是将GVim窗口最大化后的效果,Solarized的深色主题和Ubuntu自己的紫色主题之间似乎不是很和谐,但是阅读代码还是很舒服。如果在Fedora
20中,那应该是会很清爽的了(Fedora的主题是偏蓝色的)。

  关于The-NERD-tree和taglist.vim这两个插件,如果想知道关于它们的更高级的用法的话,可以使用:help
NERD_tree.txt和:help taglist.txt命令查看它们自己的帮助文档,如下两图:

  以上截图全是图形界面下的效果。如果在全字符界面下会是什么样子的呢?

  在CentOS 5.10的全字符界面下截图,下面两图是在desert主题下的效果:

  主要问题是屏幕太小,经常无法完整地显示一整行代码。

  下面两图是使用solarized主题,background=dark时的效果:

  如果设置background=light,则根本没法看:

  由此可见,solarized是一个专为GUI设计的配色方案。以上截图更进一步证实了我在上一篇文章中所说的“如果想使用全字符界面还是拉倒吧”的观点。

(京山游侠于2014-06-04发布于博客园,转载请注明出处。)

Linux江湖02:打造属于自己的Vim,布布扣,bubuko.com

时间: 2024-10-02 21:13:28

Linux江湖02:打造属于自己的Vim的相关文章

Linux江湖06:感悟GNU C以及将Vim打造成C/C++的半自动化IDE

C语言在Linux系统中的重要性自然是无与伦比.不可替代,所以我写Linux江湖系列不可能不提C语言.C语言是我的启蒙语言,感谢C语言带领我进入了程序世界.虽然现在不靠它吃饭,但是仍免不了经常和它打交道,特别是在Linux系统下. Linux系统中普遍使用的是GNU-C,这里有一份Gnu-C语言手册.pdf.The GNU C Reference Manual的主页在这里:http://www.gnu.org/software/gnu-c-manual/.C语言的内核极其紧凑,该手册总共只有91

Linux第02天

Linux 第02天 1.Linux磁盘和文件系统 VFS————虚拟文件系统 df命令————查看已挂载的分区 df 分区名 du命令————查看文件夹大小 du 文件夹名 ln命令————符号链接 fdisk命令————分区命令 fdisk 硬盘名 partprobe命令————更新分区表 partprobe 硬盘名 mkfs命令————格式化分区(新建分区只有格式化后才能使用) mkfs -t 文件系统类型(ext3.ext4) 分区名 mkfs.文件系统类型(ext3.ext4) 分区名

Linux江湖:Just for 折腾

我在博客园开博已经有七年又十个月了.不幸的是,我的博客里一篇东西都没有.我七年又十个月前选择博客园的时候,博客园还不是像现在这样的大杂烩.那时,博客园的内容主要是.net方向的,同时,博客园还有两个分站,一个是www.cppblog.com,一个是www.blogjava.net,分别让用户发布C++和Java方面的文章和随笔.现在,www.cnblogs.com这个主站俨然有一统江湖之势,我在另外两个分站上的博客访客寥寥.So,我又把这个闲置了快八年的博客启用了. 我是非常喜欢博客园的,这么多

Linux江湖01:玩转Linux系统的方法论 (转载)

http://www.blogjava.net/youxia/archive/2015/01/08/linux001.html 2014年上半年,我是在写RCP系列.然后,由于要准备研究生毕业论文和答辩, 所以就中途停了下来.再后来,我又在博客园主站开始写Linux江湖系列.经过大半年的努力,Linux江湖系列已经有十几篇了.在这里,我将把其中的内 容整理后,转发到我的Java博客中.至于RCP系列,我还是会接着写的,不过要等我的心再次沉下来才行. Linus说“Just for fun”,而我

Linux江湖23:使用Eclipse和Gnu Autotools管理C/C++项目

在我该系列的之前的所有随笔中,都是采用 Linux 发行版自带的包管理工具(如 apt-get.yum 等)进行软件的安装和卸载,从来没有向大家展示使用源代码自行编译安装软件的方法.但是长期混迹于 Unix/Linux 世界的童鞋们都知道,从源代码自行编译安装软件并不是那么的难,一般都是这样三个步骤: configure make make install 之所以能够把源代码的构建管理得如此简单,这得益于 Gnu 的 Autotools 工具链.在上面的三个命令中,configure 是一个脚本

Linux江湖17:适合数值计算的语言需要具备什么样的特色

2015年1月,我继续徜徉在数值计算的海洋中.这段时间里,我抽空看了Python科学计算和数值分析方面的书,也仔细研读了Octave的用户手册,甚至连古老的Fortran.新兴的R语言我都去逐一了解.对于数值计算的库,我了解了一下Boost的uBLAS,以前也用过OpenCV,当然,了解最多的还是Python中的NumPy.SciPy和pandas. 前几篇随笔搞了不少工具论,所以今天我就专门来论一论编程语言.我的这个Linux江湖系列是一会儿方法论一会儿工具论,每过一段时间也谈谈编程语言.今天

Linux江湖12:桌面美化那点事儿

各个Linux桌面发行版刚拿到手的时候,都或多或少有点不满意,对它们进行一些改造是必须的.网上不乏各种Linux桌面美化的教程和经验贴,对我们这些Linux爱好者来说都是很好的参考资料.进行桌面美化之前,请谨记以下几点: 1.桌面美化是一个仁者见仁.智者见智的事.有可能你认为很美的界面,别人认为土得掉渣:有可能你认为很炫的特效,别人认为华而不实.就拿我来说,我就不喜欢桌面小部件,不管是在电脑上还是在手机上.所以我的电脑桌面总是光秃秃,除了背景图片啥都没有.但是我喜欢将控制台窗口半透明化.所以,对

Linux江湖07:硬盘分区的陷阱及应对

之所以想到写这篇,是因为本人在折腾Linux系统的过程中,有多次掉入硬盘分区的陷阱的经历.最近几天,再一次掉入坑中,折腾了两天才从坑中爬出来.经过多方查询资料,终于弄明白了硬盘分区的一些概念.下面将其记录下来,以警示来者. 说起我自己掉坑的经历,无不与WinXP和Linux的激烈碰撞有关.多年前,我就开始在一台电脑上同时安装WinXP和Linux,只要遵守先安装WinXP再安装Linux的顺序,就不会出问题,Linux的安装程序会自动识别多系统,安装完成后可顺利启动多系统.有一天,我觉得单用Li

Linux江湖04:Linux桌面系统字体配置要略(上)

字体显示效果测试 这一段是为了测试宋体字的显示效果,包括宋体里面自带的英文字体,“This is english,how does it look like?”.这一行是小字.后面几个字是加粗的宋体.标点符号“,.::!” 这一段是为了测试黑体字的显示效果,包括黑体里面自带的英文字体,“This is english,how does it look like?”.这一行是小字.标点符号“,.::!”.微软雅黑是什么样子的呢“,.:!”? This paragraph shows how doe