﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-CONAN ZONE-文章分类-VIM</title><link>http://www.blogjava.net/conans/category/32374.html</link><description>你越挣扎我就越兴奋</description><language>zh-cn</language><lastBuildDate>Tue, 09 Mar 2010 04:15:34 GMT</lastBuildDate><pubDate>Tue, 09 Mar 2010 04:15:34 GMT</pubDate><ttl>60</ttl><item><title>某人常用vim插件（zz）</title><link>http://www.blogjava.net/conans/articles/314661.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 05 Mar 2010 15:02:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/314661.html</guid><description><![CDATA[Align<br />
一个对齐的插件,用来排版,面对一堆乱七八糟的代码时,用来对齐代码,功能强大,不过用到<br />
的机会不多<br />
http://www.vim.org/scripts/script.php?script_id=521<br />
Mru<br />
http://www.vim.org/scripts/script.php?script_id=521<br />
给vim增加MRU功能,也就是保留最近打开的文件记录,:MRU打开,q退出,很方便,有过一个支持<br />
菜单的类似的插件<br />
不过对于我这样的不用菜单的用户,还是这个命令行的好用一点,因为经常使用,所以我映射<br />
到了F2<br />
功能强大的代码注释工具,用来注释或者取消注释,支持很多语言,可以对文本块操作,写代码<br />
NERD_comments<br />
功能强大的代码注释工具,用来注释或者取消注释,支持很多语言,可以对文本块操作,写代码<br />
离不了,呵呵<br />
最常用到的快捷键是"c<br />
<br />
a.vim<br />
在.c/.h之间切换,写代码必备<br />
<br />
bufexplorer.vim<br />
列出当前打开的buffer,可以很容易的切换到和删除选定的buffer,必备插件之一<br />
<br />
c.vim<br />
c/c++ support,让你用编写c/c++程序时如虎添翼,有很多贴心的功能,每个功能都有快捷键<br />
,不过一部分和NERD_comments冲突<br />
如果经常编写一些单文件的c程序,但是不想写makefile,用这个,他帮你完成,F9编译并链接,<br />
ctrl-F9运行<br />
<br />
calendar.vim<br />
日历插件,有了它,用vim来写日记很方便<br />
<br />
csExplorer.vim<br />
color theme浏览插件,列出所有的vim color theme到一个列表中,选中后按回车即可应用相<br />
应的color theme,试验color theme时再也不用一次次输入:colo theme_name了,从上百个<br />
color theme中选择自己喜欢的theme时有用<br />
<br />
cscope_maps.vim<br />
cscope的vim插件,提供快捷键操纵cscope,好东东,如果你在用cscope的话<br />
<br />
favex.vim<br />
FavEx : Favorite file and directory explorer ,可以添加目录和文件到收藏夹，可以把<br />
经常编辑的文件添加到收藏夹来，在文件打开以后，"ff新增文件到收藏夹，"fd新增目录到<br />
收藏夹<br />
<br />
lookupfile.vim<br />
五星级推荐的好插件!我觉得它是vim上最伟大的插件之一,提供多种方式查找文件,让你在复<br />
杂的目&#188;树中也能轻松自如找到你要的文件<br />
<br />
matchit.vim<br />
扩展了vim的%功能,让%可以匹配的,不再仅仅是括号,支持多种语言.必备插件之一<br />
<br />
parenquote.vim<br />
给选中的文字加上引号,支持( { [ &lt; ' " `,选中后,"加上你想要添加的符号,比如选中abc<br />
后,"(,得到(abc)<br />
<br />
snippetEmu.vim<br />
扩展了vim的abbr缩写功能,支持占位符,支持变量替换,强烈推荐<br />
<br />
taglist.vim<br />
vim的代码浏览器,生成函数列表,支持跳转,可以根据光标&#955;置查询到当前的函数名,使用<br />
vim的程序员必备!个人认为是最伟大的插件之一<br />
<br />
utl.vim<br />
给vim增加url的识别功能,但是功能远不只是支持url,还有更多,详情见utl的帮助<br />
<br />
vcscommand.vim<br />
给vim整合了cvs/subversion功能,不用离开vim环境也能执行常用的cvs/subversion操作了<br />
<br />
viki.vim<br />
vim的wiki,没怎么用过,据说很好用,详情可以看滇狐的主页<br />
http://edyfox.codecarver.org/html/viki.html<br />
<br />
vis.vim<br />
可以对选中的文本块执行ex操作,尤其是visual block模式下,vim自己是不支持的.选中后,<br />
:B 加上ex命令<br />
<br />
visincr.vim<br />
给vim增加生成递增或者递减数列的功能,支持十进制,十六进制,日期,星期等,功能强大灵活<br />
<br />
winmanager.vim<br />
给vim增加IDE的功能,提供目录浏览和buffer浏览功能,因为显示器太小,感觉太占空间,所以<br />
单独使用bufexplorer,而且现在vim7的netrw功能也够强大,所以感觉比较鸡肋,而且貌似很<br />
久没有更新,所以基本不用<br />
<br />
yankring.vim<br />
类似emacs的king ring,给vim的yank也增加缓冲,vim本身只缓冲删除的字符串,不缓冲yank<br />
的内容<br />
<br />
Posted by 1+1=2 at 6:24 AM 0 comments &nbsp;<br />
<br />
Labels: vim<br />
<br />
Tuesday, October 10, 2006<br />
VIM 新手指南(zz)<br />
<br />
术语约定： 如果没有特殊说明， 本文中提到的 VIM 指的是图形界面的 gvim 与字符界面的 vim 的统称， gvim 专指图形界面， vim 专指字符界面。<br />
<br />
1.从官方网站（http://www.vim.org/download.php）下载windows版本的gvim安装。<br />
<br />
2.下载中文帮助文档安装文件（http://vimcdoc.sourceforge.net/），这个（http://vcd.gro.clinux.org/）是简体中文的镜像站点。<br />
<br />
注意：如果安装vim的中文帮助，安装完成后第一次自动启动时可以使用中文的，但退出后又还原为英文了，如果出现这种情况，只要把"vim"vimfiles"doc下的tags-cn另存为tags，再试试吧，中文出现了。<br />
1 让 gvim 正常工作<br />
<br />
VIM 是一个非常强大的编辑器， 可惜的是， 无论是 Windows 还是 Linux， gvim
都存在一些小故障，令第一眼看到它的初学者感到非常不愉快。 为了不让更多的初学者在第一次接触 gvim 时被它吓跑， 我在这份教程中首先解决
gvim 令人感到不快的一些小问题， 希望能让更多的用户平滑地过渡到 gvim 的环境中来。<br />
<br />
VIM 的安装很简单， Windows 下只要双击安装程序， 一路 next 下去就可以了 (注意到选择安装组件的时候请选择全部组件，
默认安装方式下会少装几个有用的小东西)。 Linux 下各个发行版安装方式都不一样， 但总体来说都不难装。 因此，
本文假设你已经成功地安装了一份 VIM， 不再介绍 VIM 的安装步骤。<br />
1.1 屏蔽系统自带的 .vimrc<br />
<br />
VIM 是一个高度可定制的编辑器， 它通过配置文件 .vimrc (Windows 下是 _vimrc)来定制程序的各种行为。 如果你没有编写
.vimrc 的话， 它会使用系统自带的一份默认配置文件。 可惜的是， 系统默认的配置文件存在种种很令人不快的问题。 例如 Windows
下加载 mswin.vim 带来的困惑， 和 Linux 下无法处理中文等等故障。 因此， 我们在安装了 VIM 之后，
第一件要做的事情就是创建自己的 .vimrc。 只要编写一份你自己的配置文件， VIM 便不会再加载系统自带的配置文件。<br />
<br />
如果你是 Linux 用户， 请在你的 $HOME 目录下放置一个空文件， 文件名叫 .vimrc， 方法如下：<br />
<br />
$ cd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 使用不带参数的 cd 命令，切换到 $HOME 目录<br />
$ touch .vimrc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 使用 touch 命令创建一个空白文件<br />
<br />
如果你是 Windows 用户， 请在你的 %HOME% 目录下放置一个空文件， 文件名叫 _vimrc。 步骤如下：<br />
<br />
&nbsp;&nbsp; 1. 在资源管理器中切换到 %HOME% 目录；<br />
&nbsp;&nbsp; 2. 右键单击文件列表的空白位置， 选择&#8220;新建&#8221;&#8594;&#8220;文本文件&#8221;；<br />
&nbsp;&nbsp; 3. 将&#8220;新建文本文件.txt&#8221;重命名为&#8220;_vimrc&#8221;， 注意显示扩展名的问题。 <br />
<br />
现在， 我们已经创建了一份自己的 .vimrc。 在之后的部分里， 我们将逐渐往 .vimrc 里添加一些属于我们自己的内容， 得到一份真正属于自己的配置。<br />
1.2 Linux 下的中文处理<br />
<br />
这一节是为 Linux 用户准备的， 如果你是 Windows 用户， 请直接跳过这一节。<br />
<br />
在 许多 Linux 发行版里， gvim 默认是不支持汉字的， 这给许多初学者留下了非常不好的印象。 其实， VIM
支持的语言非常之多，远远超乎我们想象。 之所以不能处理中文， 只是因为我们没有正确地配置它。 在正式开始工作以前，
我们首先将中文处理问题解决。这段里面会出现一些如&#8220;Normal 模式&#8221;、 &#8220;Insert 模式&#8221;等术语， 看不明白也不要紧， vimtutor
里面会详细解释，在这章内只要照着做就可以了， 不用深究这些词的含义。<br />
<br />
打开 gvim， 在键盘上按&#8220;i&#8221;进入 Insert 模式，然后试着输入一段中文。 如果正常的话， 恭喜， 你可以跳过本段， 直接进入下一段。
如果不能正常输入， 也不要气馁， 先按 ESC， 回到 Normal 状态。 然后在键盘上输入&#8220;:set encoding=cp936&#8221;，
然后回车。 注意， 当你按下&#8220;:&#8221;的时候， VIM 就会自动切换到&#8220;Command 模式&#8221;， 光标会跳到窗口最下方。
冒号&#8220;:&#8221;之后的部分就是命令的正文。 回车之后， 这条命令就被 VIM 执行了。 这时再按下字母 i 进入 Insert 模式，
输入一段汉字， 如果不出意外的话， 汉字显示应该已经正常。 如果还不正常的话，请与滇狐联系。<br />
<br />
现在你的 gvim 应该能够正常输入汉字了， 接下来请看一下 gvim 的菜单能不能正常地显示汉字，如果能的话， 恭喜， 请继续跳过这一节。
如果不能的话， 我们继续进行下面的操作。 首先按三次 ESC 键， 确认 VIM 已经处在 Normal 模式下， 然后在键盘上输入&#8220;:so
$VIMRUNTIME/delmenu.vim&#8221;， 回车后会发现， gvim 的菜单没有了。继续输入&#8220;:so
$VIMRUNTIME/menu.vim&#8221;， 回车， 这时 gvim 的菜单又回来了， 而且菜单中文显示也正常了。<br />
1.3 选择自己喜欢的字体<br />
<br />
如果觉得 gvim 的字体显示效果不好的话， 不妨重新选择一个你喜欢的字体。
点&#8220;编辑&#8221;&#8594;&#8220;选择字体&#8221;，然后在字体列表中选择一个你最中意的字体和字号， 确认后就可以了。 由于 gvim
只能使用等宽字体，因此对话框中列出的字体可能比你系统里安装的字体要少得多， 请慢慢选择， 耐心选， 直到选出最满意的字体为止。 选择完毕后，
先按几下 ESC 确认处在 Normal 模式下， 然后输入这条命令：&#8220;:set guifont?&#8221; (这里的问号代表询问， 不要漏写)，
回车后 gvim 屏幕最下方会显示出你当前所用的字体的名称， 例如在滇狐这里输入这条命令后出来的结果如下：<br />
<br />
&nbsp; guifont=Courier 9<br />
<br />
请记住这里输出的字体名称， 如果必要的话请先暂时把它写下来备用， 之后我们需要将它写入配置文件。<br />
1.4 将配置写入 .vimrc<br />
<br />
之 前我们通过一系列命令， 将 gvim 调整为一个比较适合我们使用的编辑环境。 然而， gvim
是不会自动记住我们这次所做的调整的。下次再打开 gvim 时， 它又变回了原先的模样。 如果我们能够把刚才所输入的命令记录下来， 下次再打开
gvim 的时候把那些命令再执行一遍， 不就可以让 gvim 每次都保持我们调整过的最佳工作状态了么？ 对， 这就是配置文件 .vimrc
的作用。<br />
<br />
刚才我们已经创建了一 个全空的配置文件 .vimrc， 现在我们往配置文件中写下我们的自己的配置代码。 .vimrc
的格式很简单，只要将刚才输入的所有冒号开头的命令， 依次写入 .vimrc 即可， 写到配置文件里的时候就不要写冒号了。 VIM
启动的时候会依次执行这些命令。 另外， 配置文件中双引号开头的行表示注释， 在 VIM 读入 .vimrc 的时候，
这些行不会被执行。因此你可以使用注释在 .vimrc 中写上一些说明文字， 为自己将来阅读配置文件提供方便。 再次复习一下前几节的内容，
然后写下自己的 .vimrc， 你现在的 .vimrc 可能是这个样子的：<br />
<br />
" Windows 下建议也加上这句<br />
set encoding=cp936<br />
<br />
" 这两句只在 Linux 下需要<br />
so $VIMRUNTIME/delmenu.vim<br />
so $VIMRUNTIME/menu.vim<br />
<br />
" 设置字体。<br />
" 字体名称可以通过前一节介绍的语句获得，<br />
" 如果字体名称中含有空格，<br />
" 需要在空格前面加上一个反斜杠，如下：<br />
set guifont=Courier" 9<br />
<br />
提示： 如果对 VIM 的基本操作一无所知的话， 现在你可以不妨先使用其它文本编辑器编写 .vimrc， 如记事本等。 当然， 如果你愿意现在就尝试着使用 gvim 编辑这个文件的话， 也是非常值得鼓励的。<br />
2 入门学习<br />
2.1 vimtutor<br />
<br />
vimtutor 是一个非常适合初学者学习 VIM 的简易教程。 教程中说阅读一遍这个教程需要 25 到 30 分钟，
其实很少有人需要这么长时间。一般情况下， 如果精力集中的话， 15 到 20 分钟足以将这份教程从头到尾阅读一遍。 每天花 15
分钟时间将这份教程从头到尾看一遍，平时进行纯文本编辑的时候， 尽量&#8220;逼迫&#8221;自己多使用 gvim， 花一周时间， 就可以比较熟悉 gvim，
能够用它完成普通的编辑工作了。<br />
<br />
Linux 下的 vimtutor 是在终端中打开的， 如果终端字体配置正常， 一般情况下不会出现什么太大问题。 Windows 下的
vimtutor 会弹出一个 gvim 窗口， 大部分情况下也没有什么大问题， 在少部分机器上汉字会出现乱码。 如果 vimtutor
在你机器上显示不正常的话， 请先输入&#8220;:set encoding=cp936&#8221;， 回车，
然后再点击&#8220;编辑&#8221;&#8594;&#8220;选择字体&#8221;，选择一个支持中文的字体， 如&#8220;新宋体&#8221;等， 确认后， 教程的显示应该就恢复正常了。<br />
<br />
如果你以前从来没有使用过 VIM 的话， 请先花 15 分钟时间阅读一遍 vimtutor， 然后再继续往后阅读滇狐教程。 之后的部分再出现 vimtutor 里介绍过的术语时， 滇狐将不再作解释。<br />
<br />
注意： 为了保证 vimtutor 在任何机器上运行效果都相同， 不会被本地设置的键绑定所干扰， vimtutor 运行时不会读取任何用户自定义的配置文件 .vimrc。 因此如果你之前做的设置在 vimtutor 里没有效果的话， 请不要太过于惊慌。<br />
2.2 VIM 快速编辑示例<br />
<br />
学习 VIM 其实是一件比较辛苦的事情， 刚开始的时候可能比用记事本还慢。 因此， 在学会 VIM 之前， 我们有必要先通过一些例子坚定一下信心。<br />
<br />
VIM 的一大特点就是&#8220;快&#8221;。 这里列举了一些使用 VIM 能够快速完成， 而一些其它编辑器难以胜任的功能， 体现 VIM 的优越性。<br />
3 编写自己的 .vimrc<br />
<br />
作为一个高度可定制的编辑器， 为 VIM 编写适合自己使用的 .vimrc 是有必要的。 这里给出了一个适合初学者使用的 .vimrc 框架， 以及每一项设置的详细解释， 希望能给大家带来一些帮助。<br />
<br />
这里是滇狐自己的 .vimrc， 里面有很多根据滇狐自己的习惯所做的设置。 如果你希望在自己机器上使用的话， 需要根据你的习惯做一些修改。<br />
4 VIM 进阶<br />
<br />
通 过一个星期的努力， 把 vimtutor 中的基本命令都熟练掌握后， 使用 VIM 进行简单快速的编辑应该已经没有什么问题了。
接下来，可以每天抽出半个小时时间， 在半个月左右内把 VIM 用户手册大概阅读一遍。 在 VIM 中 Normal 模式下输入&#8220;:help
usr_toc&#8221;即可看到用户手册， 如果更习惯看中文版的话， 可以到这里下载。<br />
<br />
记住， 没有必要记住手册中的所有命令， 只要大概知道有哪些命令， 需要用的之后知道到哪一章去查就可以了。 常用的命令查过几次之后自然而然就能够记住， 不常用的命令记下来也没有什么意义。<br />
<br />
另外， 可以根据自己的需要， 下载一些常用的 VIM 插件， 方便自己的日常生活与工作。 这里有滇狐整理的 VIM 常用插件推荐， 感兴趣的话可以看看。<br />
<br />
如果对 VIM 还有更加浓厚的兴趣的话， 可以试着自己编写 VIM 插件， 不过那些内容就不是这篇文章能够涉及的了。 祝大家好运！ Happy VIMming~<br />
<br />
VIM参数解释<br />
<br />
VIM 中可供用户定制的选项非常非常多， 作为初学者， 我们没有必要了解这么多东西。<br />
下面， 滇狐简单列出了一些最常用的配置项， 大家可以根据自己的需要将这些内容添加到自己的<br />
.vimrc 中。<br />
<br />
<br />
<br />
1 基本设置<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set nocp<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该命令指定让 VIM 工作在不兼容模式下。 在 VIM 之前， 出现过一个非常流行的编辑器叫<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vi。 VIM 许多操作与 vi 很相似， 但也有许多操作与 vi 是不一样的。 如果使用&#8220;:set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cp&#8221;命令打开了兼容模式开关的话， VIM 将尽可能地模仿 vi 的操作模式。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也许有许多人喜欢&#8220;最正统的 vi&#8221;的操作模式， 对于初学者来说， vi 里许多操作是比较不方便的。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 举一个例子， VIM 里允许在 Insert 模式下使用方向键移动光标， 而 vi 里在<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Insert 模式下是不能移动光标的， 必须使用 ESC 退回到 Normal 模式下才行。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 再举一个例子， vi 里使用 u 命令可以撤消一次先前的操作， 再次按下 u<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 时， 将撤消&#8220;撤消&#8221;这个动作本身， 也就是我们常说的&#8220;重复&#8221;(redo)。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而 VIM 里可以使用 u 命令撤消多步操作， &#8220;重复&#8221;使用的快捷键是 Ctrl<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + R。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用兼容模式后， VIM 将放弃这些新的功能， 尽量模仿 vi 的各种操作方式。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 只有在不兼容模式下， 才能更好地发挥 VIM 自身的特点。 Bram 爷爷强烈推荐大家使用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VIM 的不兼容模式， 滇狐也是这样推荐的。 请务必在你的 .vimrc 中的第一行写上：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;set nocp&#8221;。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set ru<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该命令打开 VIM 的状态栏标尺。 默认情况下， VIM 的状态栏标尺在屏幕底部，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它能即时显示当前光标所在位置在文件中的行号、列号， 以及对应的整个文件的百分比。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开标尺可以给文件的编辑工作带来一定方便。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set hls<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 搜索时高亮显示被找到的文本。 该指令的功能在 vimtutor 中已经有过介绍，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里就不多说了。 其实似乎许多人并不喜欢这个功能。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set is<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 搜索时在未完全输入完毕要检索的文本时就开始检索。 vimtutor 对该命令也有过介绍，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 滇狐并不喜欢这个功能， 因此滇狐自己的配置文件里是没有这条命令的。 但是周围有朋友很喜欢这个，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此滇狐还是将它列在这里。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; syntax on<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开关键字上色。 进行程序设计的朋友应该都知道关键字上色是什么东西，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此这里就不多说了。 不进行程序设计的朋友不妨也打开这个功能， 虽然不一定能够用得着，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但这个功能其实也是很好玩的。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set backspace=indent,eol,start<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设想这样一个情况： 当前光标前面有若干字母， 我们按下 i 键进入了 Insert<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模式， 然后输入了 3 个字母， 再按 5 下删除(Backspace)。 默认情况下，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VIM 仅能删除我们新输入的 3 个字母， 然后喇叭&#8220;嘟嘟&#8221;响两声。 如果我们&#8220;set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; backspace=start&#8221;， 则可以在删除了新输入的 3 个字母之后， 继续向前删除原有的两个字符。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 再设想一个情况： 有若干行文字， 我们把光标移到中间某一行的行首， 按<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i 键进入 Insert 模式， 然后按一下 Backspace。 默认情况下， 喇叭会&#8220;嘟&#8221;一声，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后没有任何动静。 如果我们&#8220;set backspace=eol&#8221;， 则可以删除前一行行末的回车，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也就是说将两行拼接起来。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当我们设置了自动缩进后， 如果前一行缩进了一定距离， 按下回车后， 下一行也会保持相同的缩进。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认情况下， 我们不能在 Insert 模式下直接按 Backspace 删除行首的缩进。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果我们&#8220;set backspace=indent&#8221;， 则可以开启这一项功能。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上述三项功能， 你可以根据自己的需要， 选择其中一种或几种， 用逗号分隔各个选项。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建议把这三个选项都选上。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set whichwrap=b,s,&lt;,&gt;,[,]<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认情况下， 在 VIM 中当光标移到一行最左边的时候， 我们继续按左键，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 光标不能回到上一行的最右边。 同样地， 光标到了一行最右边的时候， 我们不能通过继续按右跳到下一行的最左边。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是， 通过设置 whichwrap 我们可以对一部分按键开启这项功能。 如果想对某一个或几个按键开启到头后自动折向下一行的功能，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以把需要开启的键的代号写到 whichwrap 的参数列表中， 各个键之间使用逗号分隔。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以下是 whichwrap 支持的按键名称列表：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Normal 或 Visual 模式下按删除(Backspace)键。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Normal 或 Visual 模式下按空格键。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; h<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Normal 或 Visual 模式下按 h 键。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Normal 或 Visual 模式下按 l 键。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Normal 或 Visual 模式下按左方向键。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Normal 或 Visual 模式下按右方向键。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Normal 模式下按 ~ 键(翻转当前字母大小写)。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Insert 或 Replace 模式下按左方向键。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Insert 或 Replace 模式下按右方向键。<br />
<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=cp936<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置当前字符编码为简体中文。 这里还有一段能够自动判断文件的 encoding，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自动选择合适的编码的 .vimrc 代码， 感兴趣的话可以放到自己的配置文件中使用：<br />
<br />
<br />
<br />
<br />
" Encoding settings<br />
if has("multi_byte")<br />
&nbsp;&nbsp;&nbsp; " Set fileencoding priority<br />
&nbsp;&nbsp; if getfsize(expand("%")) &gt; 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1<br />
&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencodings=cp936,big5,euc-jp,euc-kr,latin1<br />
&nbsp;&nbsp; endif<br />
<br />
&nbsp;&nbsp;&nbsp; " CJK environment detection and corresponding setting<br />
&nbsp;&nbsp; if v:lang =~ "^zh_CN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Use cp936 to support GBK, euc-cn == gb2312<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=cp936<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set termencoding=cp936<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencoding=cp936<br />
&nbsp;&nbsp; elseif v:lang =~ "^zh_TW"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " cp950, big5 or euc-tw<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Are they equal to each other?<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=big5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set termencoding=big5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencoding=big5<br />
&nbsp;&nbsp; elseif v:lang =~ "^ko"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Copied from someone's dotfile, untested<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=euc-kr<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set termencoding=euc-kr<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencoding=euc-kr<br />
&nbsp;&nbsp; elseif v:lang =~ "^ja_JP"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Copied from someone's dotfile, unteste<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=euc-jp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set termencoding=euc-jp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencoding=euc-jp<br />
&nbsp;&nbsp; endif<br />
&nbsp;&nbsp;&nbsp; " Detect UTF-8 locale, and replace CJK setting if needed<br />
&nbsp;&nbsp; if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=utf-8<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set termencoding=utf-8<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencoding=utf-8<br />
&nbsp;&nbsp; endif<br />
else<br />
&nbsp;&nbsp; echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"<br />
endif<br />
<br />
<br />
<br />
<br />
2 文本编辑设置<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set sw=4<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自动缩进的时候， 缩进尺寸为 4 个空格。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set ts=4<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tab 宽度为 4 个字符。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set et<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编辑时将所有 Tab 替换为空格。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该选项只在编辑时将 Tab 替换为空格， 如果打开一个已经存在的文件， 并不会将已有的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tab 替换为空格。 如果希望进行这样的替换的话， 可以使用这条命令&#8220;:retab&#8221;。<br />
<br />
<br />
<br />
<br />
3 断行设置<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set lbr<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不在单词中间断行。 设置了这个选项后， 如果一行文字非常长， 无法在一行内显示完的话，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 它会在单词与单词间的空白处断开， 尽量不会把一个单词分成两截放在两个不同的行里。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fo+=mB<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开断行模块对亚洲语言支持。 m 表示允许在两个汉字之间断行， 即使汉字之间没有出现空格。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B 表示将两行合并为一行的时候， 汉字与汉字之间不要补空格。 该命令支持的更多的选项请参看用户手册。<br />
<br />
<br />
<br />
<br />
4 C/C++ 编码设置<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set sm<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示括号配对情况。 打开这个选项后， 当输入后括号 (包括小括号、中括号、大括号)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的时候， 光标会跳回前括号片刻， 然后跳回来， 以此显示括号的配对情况。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set cin<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开 C/C++ 风格的自动缩进。 打开了自动缩进后， 在编码的时候我们可以使用&#8220;V&#8221;命令选中一段文本后，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按&#8220;=&#8221;将这段文本重新调整缩进格式， 在一定程度上起到代码美化的作用。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外， 打开了自动缩进后， 在使用 TERM 下的 vim 的时， 粘贴代码时常常会出现版式混乱的现象。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那是因为 TERM 并不知道你现在正在粘贴代码， 它直接&#8220;粘贴&#8221;动作向 vim<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解释为键入， 因此 vim 便按照设置的自动缩进格式为你的代码调整了缩进。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不幸的是， 粘贴进去的代码中本身已经包含了缩进， 因此便出现了版式混乱的情况。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 gvim 中就不会出现这个问题， 因为它能够知道你现在正在粘贴。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 知道了这个症状的来由， 解决方案也就显而易见了： 在粘贴的时候把所有自动缩进都关闭，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 粘贴完毕之后再打开。 一个个手工关闭自动缩进未免过于繁琐， vim 为我们提供了一个很好用的命令，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 只要输入&#8220;:set paste&#8221;， 就可以关闭所有自动缩进。 粘贴完毕后再输入&#8220;:set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nopaste&#8221;就可以重新打开原有的自动缩进设置了。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set cino=:0g0t0(sus<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设定 C/C++ 风格自动缩进的选项， 这里简要介绍一下这段代码里用到的选项的含义，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cino 支持的选项还很多， 更多选项请看用户手册。<br />
<br />
<br />
<br />
<br />
// :0<br />
//<br />
// switch 语句之下的 case 语句缩进 0 个空格，也就是说不缩进，与 switch 块平<br />
// 齐，使用这样风格：<br />
switch (x)<br />
{<br />
case 1:<br />
&nbsp;&nbsp; a = b;<br />
&nbsp;&nbsp; break;<br />
default:<br />
}<br />
<br />
// g0<br />
//<br />
// class、struct 等之下的访问权限控制语句，如 public、protected、private 等，<br />
// 相对 class、struct 等所在的块缩进 0 个空格，与 class 等块平齐，使用这样的<br />
// 风格：<br />
class foo<br />
{<br />
public:<br />
&nbsp;&nbsp; int a;<br />
private:<br />
&nbsp;&nbsp; int b;<br />
};<br />
<br />
// t0<br />
//<br />
// 如果函数返回值与函数名不在同一行，则返回值缩进 0 个空格，也就是说不缩进，如<br />
// 下所示：<br />
<br />
// set cino=t4<br />
&nbsp;&nbsp; int<br />
func1()<br />
{<br />
}<br />
<br />
// set cino=t0<br />
int<br />
func()<br />
{<br />
}<br />
<br />
// (sus<br />
//<br />
// 当一对括号跨越多行时，其后的行缩进前面 sw 指定的距离，效果如下：<br />
int a = (1 + 2 + 3<br />
&nbsp;&nbsp; + 4 + 5 + 6<br />
&nbsp;&nbsp; + 7 + 8) * 9;<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set ai<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开普通文件类型的自动缩进。 该自动缩进不如 cindent 智能， 但它可以为你编辑非<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C/C++ 文件提供一定帮助。<br />
<br />
<br />
<br />
<br />
5 其它设置<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set selectmode=<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不使用 selectmode。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set mousemodel=popup<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当右键单击窗口的时候， 弹出快捷菜单。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set keymodel=<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不使用&#8220;Shift + 方向键&#8221;选择文本， &#8220;Shift + 方向键&#8221;代表向指定方向跳一个单词。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你喜欢这项功能的话， 可以使用&#8220;set keymodel=startsel,stopsel&#8221;打开它。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set selection=inclusive<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定在选择文本时， 光标所在位置也属于被选中的范围。 如果指定 selection=exclusive<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的话， 可能会出现某些文本无法被选中的情况。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; colo torte<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择 torte 配色方案。 VIM 里内置了许多关键字上色的配色方案， 另外你还可以到网上下载更多配色方案，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或是自己编写。 点击&#8220;编辑&#8221;&#8594;&#8220;调色板&#8221;， 就能列出所有支持的配色方案。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 你可以把&#8220;调色板&#8221;子菜单剪下来， 然后慢慢选择， 挑出一个你最喜欢的配色方案来。<br />
<br />
<br />
<br />
<br />
6 图形界面设置<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set nowrap<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定不折行。 如果一行太长， 超过屏幕宽度， 则向右边延伸到屏幕外面。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果使用图形界面的话， 指定不折行视觉效果会好得多。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set guioptions+=b<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加水平滚动条。 如果你指定了不折行， 那为窗口添加一个水平滚动条就非常有必要了。<br />
&nbsp;&nbsp;&nbsp; *<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set guifont=Courier" 9<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置图形界面下的字体。 你可以点&#8220;编辑&#8221;&#8594;&#8220;选择字体&#8221;， 然后在对话框中选出你喜欢的字体与字号，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择完毕后， 先按几下 ESC 确认处在 Normal 模式下， 然后输入这条命令：&#8220;:set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guifont?&#8221; 回车后 gvim 屏幕最下方会显示出你当前所用的字体的名称与字号。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将获得的结果写到配置文件里面就可以了， 需要注意一点， 如果字体名称里面含有空格的话，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在抄的时候需要在所有空格前面加一个斜杠。<br />
<br />
<br />
<br />
<br />
7 条件选择<br />
<br />
<br />
同一个配色方案， 在 gvim 下和字符界面的 vim 下效果大相径庭， 滇狐个人的习惯是，<br />
在 gvim 下使用 torte 配色方案， 在 vim 下使用 ron 配色方案。 因此我们有必要针对<br />
gvim 和 vim 进行不同的设置。<br />
<br />
<br />
另外， 前面我们在 gvim 下不使用折行， 开启水平滚动条， 但在 vim 下，<br />
是没有滚动条可用的， 因此还是有必要为 vim 保留自动折行。<br />
<br />
<br />
条件选择设置的格式如下：<br />
<br />
<br />
<br />
if (has("gui_running"))<br />
" 图形界面下的设置<br />
&nbsp;&nbsp; set nowrap<br />
&nbsp;&nbsp; set guioptions+=b<br />
&nbsp;&nbsp; colo torte<br />
else<br />
" 字符界面下的设置<br />
&nbsp;&nbsp; set wrap<br />
&nbsp;&nbsp; colo ron<br />
endif<br />
<br />
<br />
以下是滇狐自己的 .vimrc， 有许多根据滇狐自己的习惯做的设置， 如果你要在自己机器上使用的话，<br />
请根据你自己的习惯作出相应修改。<br />
<br />
<br />
另外， 这份 .vimrc 里面有许多设置是针对插件的， 只有安装了相应插件后，<br />
这些配置才会起作用。 这里有滇狐使用的全部插件打包，<br />
如果需要的话可以直接下载， Linux 用户将该压缩包解压到 $HOME 目录下即可使用，<br />
Windows 用户可以将压缩包解压后， 将解压得到的 .vim 文件夹改名为 vimfiles，<br />
然后复制到 VIM 的安装路径下， 覆盖原有文件。<br />
<br />
<br />
<br />
"=============================================================================<br />
" General settings<br />
"=============================================================================<br />
<br />
set nocp<br />
set ru<br />
set cin<br />
set sm<br />
set ai<br />
set sw=4<br />
set ts=4<br />
set et<br />
set cino=:0g0t0(sus<br />
set lbr<br />
set hls<br />
set backspace=indent,eol,start<br />
set whichwrap=b,s,&lt;,&gt;,[,]<br />
set fo+=mB<br />
set selectmode=<br />
set mousemodel=popup<br />
set keymodel=<br />
set selection=inclusive<br />
set matchpairs+=&lt;:&gt;<br />
<br />
" for gdbvim<br />
set noshowcmd<br />
<br />
" Encoding settings<br />
if has("multi_byte")<br />
&nbsp;&nbsp;&nbsp; " Set fileencoding priority<br />
&nbsp;&nbsp; if getfsize(expand("%")) &gt; 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1<br />
&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencodings=cp936,big5,euc-jp,euc-kr,latin1<br />
&nbsp;&nbsp; endif<br />
<br />
&nbsp;&nbsp;&nbsp; " CJK environment detection and corresponding setting<br />
&nbsp;&nbsp; if v:lang =~ "^zh_CN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Use cp936 to support GBK, euc-cn == gb2312<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=cp936<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set termencoding=cp936<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencoding=cp936<br />
&nbsp;&nbsp; elseif v:lang =~ "^zh_TW"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " cp950, big5 or euc-tw<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Are they equal to each other?<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=big5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set termencoding=big5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencoding=big5<br />
&nbsp;&nbsp; elseif v:lang =~ "^ko"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Copied from someone's dotfile, untested<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=euc-kr<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set termencoding=euc-kr<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencoding=euc-kr<br />
&nbsp;&nbsp; elseif v:lang =~ "^ja_JP"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Copied from someone's dotfile, unteste<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=euc-jp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set termencoding=euc-jp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencoding=euc-jp<br />
&nbsp;&nbsp; endif<br />
&nbsp;&nbsp;&nbsp; " Detect UTF-8 locale, and replace CJK setting if needed<br />
&nbsp;&nbsp; if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set encoding=utf-8<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set termencoding=utf-8<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set fileencoding=utf-8<br />
&nbsp;&nbsp; endif<br />
else<br />
&nbsp;&nbsp; echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"<br />
endif<br />
<br />
" Cursor movement<br />
nnoremap &lt;Down&gt; gj<br />
nnoremap &lt;Up&gt; gk<br />
vnoremap &lt;Down&gt; gj<br />
vnoremap &lt;Up&gt; gk<br />
inoremap &lt;Down&gt; &lt;C-o&gt;gj<br />
inoremap &lt;Up&gt; &lt;C-o&gt;gk<br />
<br />
nnoremap &lt;End&gt; g$<br />
nnoremap &lt;Home&gt; g0<br />
vnoremap &lt;End&gt; g$<br />
vnoremap &lt;Home&gt; g0<br />
inoremap &lt;End&gt; &lt;C-o&gt;g$<br />
inoremap &lt;Home&gt; &lt;C-o&gt;g0<br />
<br />
nmap &lt;C-F4&gt; :confirm bd&lt;CR&gt;<br />
vmap &lt;C-F4&gt; &lt;ESC&gt;:confirm bd<br />
omap &lt;C-F4&gt; &lt;ESC&gt;:confirm bd<br />
map! &lt;C-F4&gt; &lt;ESC&gt;:confirm bd<br />
<br />
" Move lines<br />
nmap &lt;C-Down&gt; :&lt;C-u&gt;move .+1&lt;CR&gt;<br />
nmap &lt;C-Up&gt; :&lt;C-u&gt;move .-2&lt;CR&gt;<br />
<br />
imap &lt;C-Down&gt; &lt;C-o&gt;:&lt;C-u&gt;move .+1&lt;CR&gt;<br />
imap &lt;C-Up&gt; &lt;C-o&gt;:&lt;C-u&gt;move .-2&lt;CR&gt;<br />
<br />
vmap &lt;C-Down&gt; :move '&gt;+1&lt;CR&gt;gv<br />
vmap &lt;C-Up&gt; :move '&lt;-2&lt;CR&gt;gv<br />
<br />
" Toggle line number<br />
nmap &lt;C-F12&gt; :set nu!&lt;CR&gt;<br />
imap &lt;C-F12&gt; &lt;C-o&gt;:set nu!&lt;CR&gt;<br />
<br />
" Toggle spell check<br />
" For VIM7 only<br />
nmap &lt;C-F11&gt; :set spell!&lt;CR&gt;<br />
imap &lt;C-F11&gt; &lt;C-o&gt;:set spell!&lt;CR&gt;<br />
<br />
syntax on<br />
if (has("gui_running"))<br />
&nbsp;&nbsp; set nowrap<br />
&nbsp;&nbsp; set guioptions+=b<br />
&nbsp;&nbsp; colo torte<br />
else<br />
&nbsp;&nbsp; set wrap<br />
&nbsp;&nbsp; colo ron<br />
endif<br />
<br />
" ============================================================================<br />
" Plugins settings<br />
" ============================================================================<br />
<br />
" Sketch<br />
command -nargs=0 ToggleSketch call ToggleSketch()<br />
<br />
" WinManager<br />
" let g:winManagerWindowLayout = "FileExplorer"<br />
<br />
" Tlist<br />
let Tlist_Use_Right_Window=1<br />
let Tlist_File_Fold_Auto_Close=1<br />
<br />
" A<br />
let g:alternateNoDefaultAlternate=1<br />
" VIM7 doesn't support this.<br />
"let g:alternateExtensions_{"aspx"} = "aspx.cs,aspx.CS"<br />
"let g:alternateExtensions_{"aspx.cs"} = "aspx,ASPX"<br />
<br />
" LateXSuite<br />
filetype plugin on<br />
set grepprg=grep" -nH" $*<br />
<br />
" Viki<br />
let g:vikiNameSuffix=".viki"<br />
augr viki<br />
au!<br />
au BufRead,BufNewFile *.viki set filetype=viki<br />
augr END<br />
<br />
"=============================================================================<br />
" Functions<br />
"=============================================================================<br />
<br />
function TextWork()<br />
&nbsp;&nbsp; set nocin<br />
&nbsp;&nbsp; set nosm<br />
&nbsp;&nbsp; set noai<br />
&nbsp;&nbsp; set tw=78<br />
&nbsp;&nbsp; set sw=8<br />
&nbsp;&nbsp; set ts=8<br />
&nbsp;&nbsp; set nowrap<br />
endfunction<br />
<br />
function NoTextWork()<br />
&nbsp;&nbsp; set cin<br />
&nbsp;&nbsp; set sm<br />
&nbsp;&nbsp; set ai<br />
&nbsp;&nbsp; set tw=0<br />
&nbsp;&nbsp; set sw=4<br />
&nbsp;&nbsp; set ts=4<br />
&nbsp;&nbsp; if (!has("gui_running"))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set wrap<br />
&nbsp;&nbsp; endif<br />
endfunction<br />
<br />
function CodeWork()<br />
&nbsp;&nbsp; call NoTextWork()<br />
&nbsp;&nbsp; WManager<br />
&nbsp;&nbsp; Tlist<br />
endfunction<br />
<br />
function TimeStamp()<br />
&nbsp;&nbsp; let curposn= SaveWinPosn()<br />
&nbsp;&nbsp; %s/"$Date: .*"$/"=strftime("$Date: %Y-%m-%d %H:%M:%S$")/ge<br />
&nbsp;&nbsp; %s/Last Change: .*$/"=strftime("Last Change: %Y-%m-%d %H:%M:%S")/ge<br />
&nbsp;&nbsp; %s/Last Modified: .*$/"=strftime("Last Modified: %Y-%m-%d %H:%M:%S")/ge<br />
&nbsp;&nbsp;&nbsp; " Replace once and never update.<br />
&nbsp;&nbsp; %s/Created: *$/"=strftime("Created: %Y-%m-%d %H:%M:%S")/ge<br />
&nbsp;&nbsp; call RestoreWinPosn(curposn)<br />
endfunction<br />
<br />
function AutoTimeStamp()<br />
&nbsp;&nbsp; augr tagdate<br />
&nbsp;&nbsp; au!<br />
&nbsp;&nbsp; au BufWritePre,FileWritePre * call TimeStamp()<br />
&nbsp;&nbsp; augr END<br />
endfunction<br />
call AutoTimeStamp()<br />
<br />
function NoAutoTimeStamp()<br />
&nbsp;&nbsp; augr tagdate<br />
&nbsp;&nbsp; au!<br />
&nbsp;&nbsp; augr END<br />
endfunction<br />
<br />
"=============================================================================<br />
" Commands<br />
"=============================================================================<br />
<br />
command -nargs=0 TextWork call TextWork()<br />
command -nargs=0 NoTextWork call NoTextWork()<br />
command -nargs=0 CodeWork call CodeWork()<br />
command -nargs=0 TimeStamp call TimeStamp()<br />
command -nargs=0 AutoTimeStamp call AutoTimeStamp()<br />
command -nargs=0 NoAutoTimeStamp call NoAutoTimeStamp()<br />
<br />
"=============================================================================<br />
" Platform dependent settings<br />
"=============================================================================<br />
<br />
"-----------------------------------------------------------------------------<br />
" Common<br />
"-----------------------------------------------------------------------------<br />
<br />
" Calender<br />
let g:calendar_diary="/home/edward/document/diary"<br />
<br />
" Spell Check<br />
" VIM7 supports built-in spell check.<br />
"function SpellCheck()<br />
"&nbsp;&nbsp;&nbsp; !aspell --lang=en -c %<br />
"endfunction<br />
"command -nargs=0 SpellCheck call SpellCheck()<br />
<br />
" Mail Template<br />
function MailWork()<br />
&nbsp;&nbsp; 0r ~/document/text/mailtemp.txt<br />
&nbsp;&nbsp; %s/%%date%%/"=strftime("%Y-%m-%d")/ge<br />
&nbsp;&nbsp; %s/%%cursor%%//ge<br />
&nbsp;&nbsp; call TextWork()<br />
endfunction<br />
command -nargs=0 MailWork call MailWork()<br />
<br />
" Use kittiemake as the default compiler<br />
function Kittie()<br />
&nbsp;&nbsp; set makeprg=kittiemake<br />
endfunction<br />
command -nargs=0 Kittie call Kittie()<br />
<br />
" Don't use kittiemake as the default compiler<br />
function NoKittie()<br />
&nbsp;&nbsp; set makeprg=make<br />
endfunction<br />
command -nargs=0 NoKittie call NoKittie()<br />
<br />
"-----------------------------------------------------------------------------<br />
" Win32<br />
"-----------------------------------------------------------------------------<br />
<br />
"if (has("gui_running"))<br />
"&nbsp;&nbsp;&nbsp; set guifont=新宋体:h9:cGB2312<br />
"endif<br />
<br />
" For LaTeX Suite<br />
"let g:Tex_CompileRule_dvi="latex -src-specials -interaction=nonstopmode $*"<br />
"set shellslash<br />
<br />
" For tee<br />
"set shellpipe=2&gt;&amp;1"|" tee<br />
<br />
" VimTweak<br />
"if (has("gui_running"))<br />
"&nbsp;&nbsp;&nbsp; command -nargs=1 SetAlpha call libcallnr("vimtweak.dll", <br />
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ""SetAlpha", )<br />
"&nbsp;&nbsp;&nbsp; command -nargs=0 TopMost call libcallnr("vimtweak.dll",<br />
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ""EnableTopMost", 1)<br />
"&nbsp;&nbsp;&nbsp; command -nargs=0 NoTopMost call libcallnr("vimtweak.dll", <br />
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ""EnableTopMost", 0)<br />
"endif<br />
<br />
"-----------------------------------------------------------------------------<br />
" Linux<br />
"-----------------------------------------------------------------------------<br />
<br />
"For LaTeX Suite<br />
"function RemoteLaTeX()<br />
"&nbsp;&nbsp;&nbsp; let g:Tex_ViewRule_dvi="xdvi -editor 'gvim --servername """<br />
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ".expand("%:p").""" --remote-silent'"<br />
"&nbsp;&nbsp;&nbsp; augr remotelatex<br />
"&nbsp;&nbsp;&nbsp; au!<br />
"&nbsp;&nbsp;&nbsp; augr END<br />
"endfunction<br />
<br />
"augr remotelatex<br />
"au!<br />
"au BufRead * call RemoteLaTeX()<br />
"augr END<br />
<br />
let g:Tex_CompileRule_dvi<br />
&nbsp;&nbsp;&nbsp; "="latex -src-specials -interaction=nonstopmode $*"<br />
let g:Tex_ViewRule_dvi<br />
&nbsp;&nbsp;&nbsp; "="xdvi -editor 'gvim --servername latex-suite --remote-silent'"<br />
<br />
if (has("gui_running"))<br />
&nbsp;&nbsp; set guifont=Bitstream" Vera" Sans" Mono" 9<br />
&nbsp;&nbsp; source $VIMRUNTIME/delmenu.vim<br />
&nbsp;&nbsp; source $VIMRUNTIME/menu.vim<br />
endif<br />
<br />
Posted by 1+1=2 at 10:00 PM 0 comments &nbsp;<br />
<br />
Labels: vim<br />
<br />
Monday, October 09, 2006<br />
标题: vim + ctags + taglist + cscope + cppcomplete + global 使用初探(zz)<br />
<br />
由于本人比较喜欢在终端状态下的vim，所以gvim下的扩展使用的不多。这里介绍的也是我简单的使用以上扩展的一点点体会。请大家指正。 emacs 不会用，也没有比较过拉。<br />
<br />
<br />
<br />
1、大体感觉，（因为使用时间不长，不全面）<br />
总体使用的感觉定位查找类型定义基本可以用，但自动补全类型方面由于ctags的功能有限，感觉在大工程时，不一定很好用。<br />
<br />
大型程序一定要global的参与，它的分析比较全面，但在vim中的提示信息有限。<br />
<br />
taglist 精干，需要ctags的支撑 ，直接可以在左边列出函数列表，全局参数列表。（可以排序）<br />
<br />
cscope 比较强大，可以对函数以及部分类型定义进行跳转，但有些BUG，好像在某些条件下无法正确找到分析枚举的定义。<br />
<br />
cppcomplete 需要ctags的支撑，可以补全类型或者函数名（可不是普通Ctrl+P/N的那种）<br />
<br />
global
新版本可以嵌入vim使用，提供比较完整解析和类型索引，和cscope比，稍微差些的就是对类型引用的打印列表中没有标识这个引用在什么函数中进行的。
其实我的感觉global可能不是为vim所生，它的主要目的是用html的方式进行表达相关的关联关系和索引，使用起来感觉没有cscope的那么贴
切。<br />
<br />
<br />
<br />
2、相关的扩展的安装<br />
代码:<br />
<br />
apt-get install exuberant-ctags cscope global<br />
<br />
cppcomplete 和 taglist 要到www.vim.org的扩展列表中下载。<br />
<br />
taglist 的下载地址:<br />
http://www.vim.org/scripts/script.php?script_id=273<br />
cppcomplete 的下载地址:<br />
http://www.vim.org/scripts/script.php?script_id=527<br />
<br />
然后在 建立目录<br />
代码:<br />
<br />
$HOME/.vim/plugin<br />
<br />
<br />
将下载的cppcomplete.vim 和 taglist.vim拷贝到$HOME/.vim/plugin中。<br />
安装了global后，最新4.8.6 以上版本有带vim的扩展，将它也拷贝到 $HOME/.vim/plugin<br />
<br />
debian sid 版本global安装后扩展文件在<br />
代码:<br />
<br />
/usr/share/doc/global/examples/gtags.vim.gz<br />
<br />
需要拷贝到$HOME/.vim/plugin后解压，解压方法：<br />
代码:<br />
<br />
gzip -d gtags.vim.gz<br />
<br />
<br />
<br />
3、使用这些工具<br />
1）准备工作，先修改一下$HOME/.vimrc文件<br />
<br />
为了更好的使用cscope请添加如下内容，这样Ctrl-]的跳转将由cscope的tags进行分析。<br />
代码:<br />
<br />
if has("cscope")<br />
set csprg=/usr/bin/cscope<br />
set csto=0<br />
set cst<br />
set nocsverb<br />
" add any database in current directory<br />
if filereadable("cscope.out")<br />
cs add cscope.out<br />
" else add database pointed to by environment<br />
elseif $CSCOPE_DB != ""<br />
cs add $CSCOPE_DB<br />
endif<br />
set csverb<br />
set cscopetag<br />
set cscopequickfix=s-,g-,c-,d-,t-,e-,f-,i-<br />
endif<br />
<br />
<br />
2）使用cscope<br />
cscope的tag生成最简单的方法是：<br />
在你的开发工程的最上层目录执行cscope-indexer，它会遍历下面的所有目录，生成两个文件，一个是cscope.files，这个文件记录需要生成tags的文件名，可以手工修改，另一个是cscope格式的tags文件cscope.out。<br />
<br />
完成后，你在生成了cscope.out的目录打开工程的任意文件，就可以使用Ctrl-]跳转查找类型定义了。<br />
代码:<br />
<br />
cs f s xxxx 查找xxxx出现的地方，它能详细列出哪些文件的哪行的哪个函数引用，以及该行的内容，比较不错。 :)<br />
<br />
<br />
它的所有命令的使用请参考：<br />
代码:<br />
<br />
help cscope<br />
<br />
<br />
3）使用taglist<br />
taglist的功能是即时生成当前文件的函数列表和全局变量列表，便于索引。<br />
在vim中命令模式下使用<br />
Tlist 打开或者关闭当前文件的索引；<br />
TlistSync 立即在打开的索引窗口中定位当前的光标所在位置属于哪个函数或者结构定义中。<br />
还有其他命令，请参考它的帮助文件。<br />
<br />
4）ctags的使用<br />
其实cscope是用来替代ctags功能的，ctags的应用广泛，还有其他很多的软件依赖它。<br />
<br />
例如要生成cppcomplete需要的tags文件的话，需要运行下面的命令：<br />
代码:<br />
<br />
ctags -n -f cppcomplete.tags --fields=+ai --C++-types=+p * -L cscope.files<br />
<br />
注意，我在最后使用了参数"-L cscope.files" 这仅仅是借用拉cscope生成的文件索引来帮助ctags去查询相关工程文件生成tags。<br />
<br />
5）使用cppcomplete<br />
cppcomplete的使用我只是简单的发现它可以根据上述方法生成的tags文件来自动补全类型成员。<br />
使用很简单，就是在你需要补全类型成员时，按F8键就可以拉。它一般第一次使用时，需要让你确认是使用已有的tags文件还是再生成一次。一般我们自己控制生成tags文件的时机，它就使用就行拉。<br />
但它也受到ctags的分析能力比较差的限制，可能不是每次都能帮到你。<br />
<br />
6）使用global<br />
在工程的最上层目录执行命令：<br />
gtags<br />
等待它完成所有需要的global自己格式的tags的生成<br />
生成完后，需要的就是在生成tags的目录打开你的工程的任意文件，用如下命令查询相关类型引用和关联关系：<br />
代码:<br />
<br />
Gtags xxxx 查找xxxx的定义<br />
Gtags -r xxxx 查找xxxx的引用<br />
Gtags -s xxxx 查找xxxx出现的地方<br />
<br />
<br />
它的提示信息很有显，不如cscope更直观，但对大型分析的比较完整。<br />
有时它无法正常分析的类型 可以试试用带-s 的参数的方式找找类型定义。再不行，我就不清楚拉<br />
<br />
<br />
4、草草的收尾<br />
我使用它们也是一点一点的摸索的没有系统的完整的使用过，也受限于本人的Linux使用经验和工作关系，所以非常简单的使用体会给大家一个参考，希望能有所帮助。更希望后来者能不断补充相关的使用体会。大家都需要交流提高，呵呵。<br />
<br />
Posted by 1+1=2 at 4:47 AM 0 comments &nbsp;<br />
<br />
Labels: vim<br />
<br />
Ctags with Vim<br />
<br />
标 题: Ctags with Vim<br />
发信站: BBS 水木清华站 (Mon May 24 08:42:57 2004), 站内<br />
<br />
<br />
usage: $ctags [-R] inc_dir/*.h include_dir/*.hpp src_dir/*.c<br />
example: $ ctags -R `find . -name "*.c"` `find . -name "*.h"`<br />
su; cd /usr/include; ctags --c-types=+p+x -sort -R<br />
生成非常完整，巨大而有序的tags<br />
<br />
各用户在 ~/.vimrc中添加set tags= ./tags, tags, /usr/include/tags即可使用<br />
[注1]+p开关会跳到变量声明的地方而不是它的实现，所以还是采用缺省值，<br />
不要--c-types这个选项，或者只要+x(推荐)，其它无所谓。<br />
还有/usr/include并不是/usr/src/linux/include的一个符号链接，<br />
所以如果是看内核中一些变量的定义的话应该到/usr/src/linux上面用ctags<br />
<br />
ctags浏览代码 (有的命令说明可能不准确)<br />
:set tags=/Dir/tags 设置需要的tags文件，<br />
可以多个:set tags=/dir1/tags, /dir2/tags<br />
:tag xxx 转到满足查找代码的定义处，简写为 :ta xxx<br />
:tag /^xxx 转到以xxx为起始的tag处<br />
other find tags :stag/ptag/ts/tj/pts/ptj /<br />
:tag /xxx 列出所有包含xxx的tag<br />
:tag 转到前一个浏览过的tag处<br />
vi -t xxx 直接定位到xxx的定义处<br />
:tn / :tp 转到下/上一个tag代码处，可以使用:5tn的形式<br />
:tr / :tl 转到首/尾tag代码处<br />
, 转到光标所在函数或者变量的定义处 g+左键 (GUI) [注2]<br />
, 回到跳转前的代码处(适用于任何跳转) g+右键 (GUI)<br />
:tags 列出当前tag栈的内容<br />
:ts xxx 列出所有匹配的代码及其所属文件，并提供选择浏览<br />
:sts xxx 列出匹配处提供选择在新窗口中打开文件<br />
:tj xxx 类似 :ts xxx，当只有一个匹配时直接转到代码处<br />
g] 与 :ts xxx 功能相同(tag为光标下的标识符)<br />
g] 等价于 :sts xxx<br />
g 等价于 :tj xxx<br />
:pt? xxx 提供上述命令(?为j，s)的预览功能，退出窗口 :q!<br />
:t?! xxx 当前文件的修改被丢弃转到目标文件中<br />
} 在预览窗口中显示当前光标下的tag<br />
:ptl / ptf / ptn /ptp 类似于 tl，tf，tn，tp<br />
:che 察看没有找到的头文件(checkpath)<br />
makeprg :set makeprg=gcc" yourfile.c 为在线编译设置<br />
:make 在线编译<br />
:cn / :cN 移动到编译的 下/上 一个error处<br />
:stag xxx 查找xxx的声明处并在新窗口中打开<br />
:ta {ident} 跳转到标识符定义处<br />
gd 跳转到局部标识符定义处<br />
<br />
[注2] Ctrl-]碰巧是telnet的终端符，如果远程编辑文件可能会遇到一些问题，<br />
请参考在线帮助:h ^]。多数telnet都允许使用命令telnet -E hostname来打开<br />
或关闭该脱字符，或者用telnet -e escape hostname来指定另外一个脱字符<br />
来代替^]，请man telnet参看-E -e的帮助。
<img src ="http://www.blogjava.net/conans/aggbug/314661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2010-03-05 23:02 <a href="http://www.blogjava.net/conans/articles/314661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VIM设置代码折叠</title><link>http://www.blogjava.net/conans/articles/297732.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Sat, 10 Oct 2009 16:08:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/297732.html</guid><description><![CDATA[<p><strong>1. 折叠方式</strong> <br />
可用选项 'foldmethod' 来设定折叠方式：<font color="#0000ff">set fdm=*****</font>。<br />
有 6 种方法来选定折叠：<br />
<font style="background-color: #ccffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; manual&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 手工定义折叠<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; indent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 更多的缩进表示更高级别的折叠<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; expr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用表达式来定义折叠<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; syntax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用语法高亮来定义折叠<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; diff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对没有更改的文本进行折叠<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; marker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对文中的标志折叠</font><br />
注意，每一种折叠方式不兼容，如不能即用expr又用marker方式，我主要轮流使用indent和marker方式进行折叠。</p>
<p>使用时，用：set fdm=marker 命令来设置成marker折叠方式（fdm是foldmethod的缩写）。<br />
要使每次打开vim时折叠都生效，则在.vimrc文件中添加设置，如添加：set fdm=syntax，就像添加其它的初始化设置一样。</p>
<p><strong>2. 折叠命令</strong><br />
选取了折叠方式后，我们就可以对某些代码实施我们需要的折叠了，由于我使用indent和marker稍微多一些，故以它们的使用为例：<br />
如果使用了indent方式，vim会自动的对大括号的中间部分进行折叠，我们可以直接使用这些现成的折叠成果。<br />
在可折叠处（大括号中间）：<br />
<font style="background-color: #ccffff;">zc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 折叠<br />
zC&nbsp;&nbsp;&nbsp;&nbsp; 对所在范围内所有嵌套的折叠点进行折叠 <br />
zo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 展开折叠<br />
zO&nbsp;&nbsp;&nbsp;&nbsp; 对所在范围内所有嵌套的折叠点展开<br />
[z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到当前打开的折叠的开始处。<br />
]z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到当前打开的折叠的末尾处。<br />
zj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。<br />
zk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向上移动到前一折叠的结束处。关闭的折叠也被计入。</font></p>
<p>当使用marker方式时，需要用标计来标识代码的折叠，系统默认是{{{和}}}，最好不要改动之：）<br />
我们可以使用下面的命令来创建和删除折叠：<br />
<font style="background-color: #ccffff;">zf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建折叠，比如在marker方式下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zf56G，创建从当前行起到56行的代码折叠；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10zf或10zf+或zf10&#8595;，创建从当前行起到后10行的代码折叠。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10zf-或zf10&#8593;，创建从当前行起到之前10行的代码折叠。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在括号处zf%，创建从当前行起到对应的匹配的括号上去（（），{}，[]，&lt;&gt;等）。<br />
zd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除 (delete) 在光标下的折叠。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。<br />
zD&nbsp;&nbsp;&nbsp;&nbsp; 循环删除 (Delete) 光标下的折叠，即嵌套删除折叠。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。<br />
zE&nbsp;&nbsp;&nbsp;&nbsp; 除去 (Eliminate) 窗口里&#8220;所有&#8221;的折叠。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。</font></p>
<img src ="http://www.blogjava.net/conans/aggbug/297732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-10-11 00:08 <a href="http://www.blogjava.net/conans/articles/297732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用VIM开发软件项目8：开启文件类型检测</title><link>http://www.blogjava.net/conans/articles/264533.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Wed, 08 Apr 2009 13:49:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/264533.html</guid><description><![CDATA[<a href="http://www.kuqin.com/developtool/20080601/9144.html" target="_blank">
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">本节所用命令的帮助入口： </span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">:help filetype<br />
:help setfiletype<br />
:help modeline<br />
:help 'modelines'<br />
:help 'shiftwidth'<br />
:help 'expandtab'<br />
:help autocmd</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">打开文件类型检测功能很简单，在你的vimrc中加入下面一句话就可以了：</span></span></span></span></p>
<p><br />
<span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">filetype plugin indent on</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">如果你用的是VIM自带的示例vimrc，那么你已经打开了文件类型检测功能。或者，你也可以输入&#8220;:filetype&#8221;命令查看你的文件类型检测功能有没有打开。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">这条命令究竟做了什么呢？我们在下面详细介绍。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">其实，上面这一条命令，可以分为三条命令：</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">filetype on<br />
filetype plugin on<br />
filetype indent on<br />
我们逐条介绍这三条命令。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">&#8220;filetype on&#8221;命令打开文件类型检测功能，它相当于文件类型检测功能的开关。在执行&#8220;filetype on&#8221;命令时，VIM实际上执行的是$VIMRUNTIME/filetype.vim脚本。这个脚本使用了自动命令(autocmd)来根据文件名来判断文件的类型，如果无法根据文件名来判断出文件类型，它又会调用$VIMRUNTIME/scripts.vim来根据文件的内容设置文件类型。有兴趣可以读一下这两个脚本，以获得更深的认识。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">在上述步骤完成后，绝大多数已知类型的文件，都能被正确检测出文件类型。如果文件的类型未能被正确的检测出来，就需要手工设置文件类型，这可以通过&#8220;set filetype&#8221;完成，例如，如果你把main.c改名为main.c.bak1，那么它就无法被正确检测出文件类型。通过下面的Ex命令，就可以把它的文件类型设为c：</span></span></span></span></p>
<p><br />
<span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">:set filetype=c或者，你可以在文件中加入一个模式行，来指明这个文件的类型。VIM在打开文件时，会在文件首、尾的若干行（行数由'modelines'选项决定，缺省为5行）检测具有VIM特殊标记的行，称为模式行。如果检测到，就使用模式行中定义的选项值，来修改该缓冲区的选项。你可以留意一下VIM的帮助页，每个文件的最后一行都是这样的模式行。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">针对上例，我们可以在main.c.bak1的第一行或最后一行加上下面的内容，要指定这个文件的类型：</span></span></span></span></p>
<p><br />
<span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">/* vim: ft=c */这句话使用&#8220;/* */&#8221;注释起来了，因此不会影响编译。&#8220;ft&#8221;是&#8220;filetype&#8221;的缩写，VIM中很多命令、选项都有缩写形式，以方便使用。注意&#8220;/*&#8221;与&#8220;vim:&#8221;间的空格。在&#8220;*/&#8221;与&#8220;ft=c&#8221;间，也需要有至少一个空格，这是模式行格式的要求，更多信息参阅&#8220;:help modeline&#8221;。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">检测出文件的类型有什么作用呢？我们知道，不同类型的文件具有不同的格式，VIM通过对文件类型的识别，可以为不同类型的文件，设置不同的选项值、定义不同键绑定等。例如，对于c类型的文件，它就和bash脚本有不同的注释格式、不同的缩进格式、不同的关键字等。VIM在设置文件类型后，会触发FileType事件，执行FileType相关的自动命令，对不同类型的文件区别对待。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">上面提到的&#8220;filetype plugin on&#8221;，允许VIM加载文件类型插件。当这个选项打开时，VIM会根据检测到的文件类型，在runtimepath中搜索该类型的所有插件，并执行它们。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">&#8220;filetype plugin on&#8221;命令，实际上是执行$VIMRUNTIME/ftplugin.vim脚本，有兴趣可以读一下这个脚本。这个脚本中会设置自动命令，在runtimepath中搜索文件类型插件。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">runtimepath的定义在不同的系统上不一样，对UNIX系统来说，这些路径包括：$HOME/.vim、$VIM/vimfiles、$VIMRUNTIME、$VIM/vimfiles/after、$HOME/.vim/after。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">举一个例子，当我们对一个c类型的文件打开&#8220;filetype plugin on&#8221;时，它会在上述这几个目录的ftplugin子目录中搜索所有名为c.vim、c_*.vim，和c/*.vim的脚本，并执行它们。在搜索时，它按目录在runtimepath中出现的顺序进行搜索。缺省的，它会执行$VIMRUNTIME/ftplugin/c.vim，在这个脚本里，会设置c语言的注释格式、智能补全函数等等。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">&#8220;filetype indent on&#8221;允许VIM为不同类型的文件定义不同的缩进格式。这条命令也是通过一个脚本来完成加载：$VIMRUNTIME/indent.vim。和&#8220;filetype plugin on&#8221;类似，它也通过设置自动命令，在runtimepath的indent子目录中搜索缩进设置。对c类型的文件来说，它只是打开了cindent选项。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">我们了解了文件类型检测的用途及它是如何工作的之后，就可以根据自己的需要，来对特定的文件类型进行特殊设置。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">例如，我们在上篇文章中介绍过lookupfile插件，在它打开一个缓冲区时，会把缓冲区的filetype设置为lookupfile，我们可以利用这一点，在这个缓冲区里进行一些特殊的配置。例如，我们创建一个名为lookupfile.vim的文件，其内容为：</span></span></span></span></p>
<p><br />
<span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">" close lookupfile window by two &lt;Esc&gt;<br />
nnoremap &lt;buffer&gt; &lt;Esc&gt;&lt;Esc&gt; &lt;C-W&gt;q<br />
inoremap &lt;buffer&gt; &lt;Esc&gt;&lt;Esc&gt; &lt;Esc&gt;&lt;C-W&gt;q它定义了两个局部于缓冲区的键绑定，无论在normal模式还是插入模式，只要连按两次ESC，就关闭当前缓冲区。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">把这个文件保存到你的runtimepath所指向任一目录的ftplugin子目录中（一般是放在~/.vim/ftplugin目录中）。你在下次打开lookupfile窗口时，试试连按两次ESC，是不是lookupfile窗口就关闭了？这样设置，非常适合VIM中按ESC取消命令的习惯，效率也高。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">如果你对VIM缺省文件类型插件的设置不太满意，那么可以把这个全局插件拷贝到$HOME/.vim/plugin目录中，然后更改其中的设置。你可以留意一下VIM缺省的文件类型插件，它们的头部都有这样的代码：</span></span></span></span></p>
<p><br />
<span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">" Only do this when not done yet for this buffer<br />
if exists("b:did_ftplugin")<br />
&nbsp; finish<br />
endif这类似于C语言头文件中的&#8220;#ifndef XXX | #define XXX&#8221;的语句，可以防止该插件被执行多次。因此，把这个插件拷贝到$HOME/.vim/plugin中（这个目录在runtimepath中排在最前面），它将先于VIM的缺省插件被加载；而它加载后，VIM的缺省文件类型插件就不会再被加载了。这就达到了我们修改设置的目的。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">不过我们通常不用这种方法。如果这样做，一旦VIM的缺省插件做了改变，我们也要更新我们改过的插件才行。我们可以在载入全局插件以后否决一些设置。在Unix 上，我们可以把我们的设置放在~/.vim/after/ftplugin/目录中，这个目录中的脚本会在VIM的缺省脚本后执行。这样就可以修改配置，或增加我们自己的定义。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">举个例子，在多人一起开发项目时，为了使代码风格尽量保持一致，一般不允许在代码使用TAB符，而以4个空格代之。我们可以编辑一个文件，包含下面的内容：</span></span></span></span></p>
<p><br />
<span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">set shiftwidth=4<br />
set expandtab把这个文件保存为~/.vim/after/ftplugin/c.vim。这样，每次在编辑c文件时，它的自动缩进为4个空格；当你在插入模式下使用CTRL-D、CTRL-T缩进时，它也会调整4个空格的缩进；当你按TAB键时，它将会插入8个空格&#8230;&#8230;如果你想上面的设置对h文件也生效的话，需要把它另存一份：~/.vim/after/ftplugin/cpp.vim，因为h文件的文件类型被设为cpp。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">我们知道，VIM在设置文件类型时，会触发FileType自动命令，因此，上面的例子可以用下面的自动命令来实现：</span></span></span></span></p>
<p><br />
<span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">autocmd FileType c,cpp set shiftwidth=4 | set expandtab把这个命令放在你的vimrc中，可以起到和上例同样的效果。</span></span></span></span></p>
<p><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">来自：</span></span></span></span></a><a href="http://blog.csdn.net/easwy/archive/2007/03/20/1534580.aspx"><span><span style="color: #000000"><span style="color: #000000"><span style="color: #000000">http://blog.csdn.net/easwy/archive/2007/03/20/1534580.aspx</span></span></span></span></a></p>
<img src ="http://www.blogjava.net/conans/aggbug/264533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-04-08 21:49 <a href="http://www.blogjava.net/conans/articles/264533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用VIM开发软件项目7：lookupfile插件</title><link>http://www.blogjava.net/conans/articles/264532.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Wed, 08 Apr 2009 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/264532.html</guid><description><![CDATA[<p>本节所用命令的帮助入口：</p>
<p><br />
:help lookupfile</p>
<p>前面我们讲过通过&#8221;:find&#8221;命令打开指定的文件，不过使用&#8221;:find&#8221;命令并不是非常的方便：一是如果项目比较大、文件比较多，find查找起来很慢；二是必须输入全部的文件名，不能使用正规表达式查找。</p>
<p>我们也介绍过VIM提供的文件浏览插件，你可以在浏览器中根据目录去查找，但这种方式在浏览目录时比较方便，查找一个已知名字（或知道部分名字）的文件效率就比较低了。</p>
<p>相比之下，在source insight中查找文件非常简单，只要输入部分的文件名，就可以找到符合条件的文件。</p>
<p>我一直被这个问题所困扰，直到有一天，在<a href="http://www.vim.org/">www.vim.org</a>上发现了一个非常出色的插件，才彻底解决了查找文件效率低下的问题，它的功能毫不逊于source insight。在给该插件投票时，我选择了&#8220;Life Changing&#8221;。是的，它改变了我的生活！</p>
<p>这个插件的名字是：lookupfile！</p>
<p>Lookupfile插件可以在下面的链接下载：</p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://www.vim.org/scripts/script.php?script_id=1581">http://www.vim.org/scripts/script.php?script_id=1581</a></p>
<p>它使用VIM 7.0提供的插入模式下的下拉菜单补全功能，因此只能在VIM 7.0及以上版本中使用。</p>
<p>下载该插件后，把它解压到你的~/.vim目录中，就完成了安装。然后在VIM中执行&#8221;:helptags ~/.vim/doc&#8221;命令，生成help文件索引，然后就可以使用&#8221;:help lookupfile&#8221;命令查看lookupfile插件的帮助文件了。</p>
<p>注：windows用户需要把这个插件解压在你的$VIM/vimfiles或$HOME/vimfiles目录。</p>
<p>Lookupfile插件还需要最新的genutils支持，因此，需要下载genutils：</p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://www.vim.org/scripts/script.php?script_id=197">http://www.vim.org/scripts/script.php?script_id=197</a> </p>
<p>这个插件提供了一些通用的函数，可供其它的脚本使用。它的安装方法也是在~/.vim目录解压就可以了。需要注意的是，最新版本的genutils使用了新的自动加载方式，所以和以前的版本不兼容。如果你的其它插件需要使用genutils的旧版本的话，你需要参照genutils的说明进行配置，以便使新旧两个版本能协同工作。</p>
<p>现在我们介绍lookupfile插件。虽然名字为lookupfile，其实这个插件它不仅能用来查找文件，还可以在打开的缓冲区中查找，按目录查找，等等。</p>
<p>[项目文件查找]</p>
<p>Lookupfile在查找文件时，需要使用tag文件。它可以使用前面文章中提到的使用&#8220;ctags&#8221;命令生成的tag文件，不过查找效率会比较低。因此我们会专门为它生成一个包含项目中所有文件名的tag文件。</p>
<p>我编写了下面的shell脚本，为vim70的源代码，生成一个文件名tag文件。</p>
<p><br />
#!/bin/sh</p>
<p># generate tag file for lookupfile plugin<br />
echo -e "!_TAG_FILE_SORTED\t2\t/2=foldcase/" &gt; filenametags<br />
find . -not -regex '.*\.\(png\|gif\)' -type f -printf "%f\t%p\t1\n" | \<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sort -f &gt;&gt; filenametags</p>
<p>回想一下我们在&#8220;使用tag文件和taglist插件 (一)&#8221;一文中介绍的tag文件的格式。再对照脚本命令来看：</p>
<p>- echo命令用来生成filenametags文件中的&#8220;!_TAG_FILE_SORTED&#8221;行，表明此tag文件是经过排序的。</p>
<p>- find命令用来查找所有类型为普通文件，文件后缀名不是.png和.gif的文件，找到的文件按&#8220;文件名\t文件路径\t1&#8221;的格式输出出来。</p>
<p>- sort命令则把find命令的输出重新排序，然后写入filenametags文件中</p>
<p>在~/src/vim70/目录下运行该脚本，会生成一个名为filenametags的文件，包含了vim70目录下的所有文件的名字及其所在目录。</p>
<p>现在我们需要让lookupfile插件知道到哪去找文件名tag文件。我们假定VIM当前工作目录为~/src/vim70/，执行下面的命令：</p>
<p><br />
:let g:LookupFile_TagExpr = '"./filenametags"'</p>
<p>注：如果不设定g:LookupFile_TagExpr的值，那么lookupfile插件会以tags选项定义的文件作为它的tag文件。</p>
<p>现在我们就可以使用lookupfile来打开文件了，按&#8220;&lt;F5&gt;&#8221;或输入&#8220;: LookupFile&#8221;在当前窗口上方打开一个lookupfile小窗口，开始输入文件名（至少4个字符），随着你的输入，符合条件的文件就列在下拉列表中了。文件名可以使用VIM的正则表达式，这大大方便了文件的查找。你可以用&#8220;CTRL-N&#8221;和&#8220;CTRL-P&#8221;（或者用上、下光标键）来在下拉列表中选择你所需的文件。选中文件后，按回车，就可以前一个窗口中打开此文件。</p>
<p>下图是使用lookupfile插件查找文件的一个例子：</p>
<p><span style="font-family: 宋体"><a href="http://www.kuqin.com/upimg/allimg/080601/1250450.jpg" target="_blank"><img alt="" src="http://www.kuqin.com/upimg/allimg/080601/1250450.jpg" /></a></span></p>
<p><br />
在屏幕最上方的窗口就是lookupfile窗口，在这个窗口中输入&#8220;gui.*x11&#8221;几个字符，查找到6个匹配文件，使用CTRL-N选中gui_x11.c文件，然后按回车，就会在前一个窗口中打开src/gui_x11.c文件，lookupfile窗口也自动关闭了。是不是非常方便？</p>
<p>[缓冲区查找]</p>
<p>在开发过程中，我经常会同时打开数十甚至上百个文件。即使是使用BufExplorer插件，想在这么多buffer中切换到自己所要的文件，也不是件容易的事。</p>
<p>Lookupfile插件提供了一个按缓冲区名字查找缓冲区的方式，只要输入缓冲区的名字（可以是正则表达式），它就可以把匹配的缓冲区列在下拉列表中，同时还会列出该缓冲区内文件的路径，当你的buffer中有多个同名文件时，这可以帮你迅速找到你想要的文件。</p>
<p>使用&#8220;:LUBufs&#8221;命令开始在缓冲区中查找，输入缓冲区的名字，在你输入的过程中，符合条件的缓冲区就显示在下拉列表中了，选中所需缓冲区后，按回车，就会切换你所选的缓冲区。下图是一个示例：</p>
<p><a href="http://www.kuqin.com/upimg/allimg/080601/1250451.jpg" target="_blank"><img alt="" src="http://www.kuqin.com/upimg/allimg/080601/1250451.jpg" /></a></p>
<p><br />
[浏览目录]</p>
<p>Lookupfile插件还提供了目录浏览的功能，使用&#8220;:LUWalk&#8221;打开lookupfile窗口后，就可以输入目录，lookupfile会在下拉列表中列出这个目录中的所有子目录及文件供选择，如果选择了目录，就会显示这个目录下的子目录和文件；如果选择了文件，就在VIM中打开这个文件。</p>
<p>下图是使用LUWalk的一个抓图：</p>
<p><span lang="EN-US"><a href="http://www.kuqin.com/upimg/allimg/080601/1250452.jpg" target="_blank"><img alt="" src="http://www.kuqin.com/upimg/allimg/080601/1250452.jpg" /></a></span></p>
<p><br />
Lookupfile插件还提供了LUPath和LUArgs两个功能，这两个功能我用的不多，就不在这里介绍了。感兴趣的朋友读一下lookupfile的帮助页。</p>
<p>[Lookupfile配置]</p>
<p>Lookupfile插件提供了一些配置选项，通过调整这些配置选项，使它更符合你的工作习惯。下面是我的vimrc中关于lookupfile的设置，供参考：</p>
<p><br />
""""""""""""""""""""""""""""""<br />
" lookupfile setting<br />
""""""""""""""""""""""""""""""<br />
let g:LookupFile_MinPatLength = 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "最少输入2个字符才开始查找<br />
let g:LookupFile_PreserveLastPattern = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "不保存上次查找的字符串<br />
let g:LookupFile_PreservePatternHistory = 1&nbsp;&nbsp;&nbsp;&nbsp; "保存查找历史<br />
let g:LookupFile_AlwaysAcceptFirst = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "回车打开第一个匹配项目<br />
let g:LookupFile_AllowNewFiles = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "不允许创建不存在的文件<br />
if filereadable("./filenametags")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "设置tag文件的名字<br />
&nbsp;&nbsp;&nbsp; let g:LookupFile_TagExpr = '"./filenametags"'<br />
endif<br />
nmap &lt;silent&gt; &lt;leader&gt;lk &lt;Plug&gt;LookupFile&lt;cr&gt;&nbsp;&nbsp; "映射LookupFile为,lk<br />
nmap &lt;silent&gt; &lt;leader&gt;ll :LUBufs&lt;cr&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "映射LUBufs为,ll<br />
nmap &lt;silent&gt; &lt;leader&gt;lw :LUWalk&lt;cr&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "映射LUWalk为,lw</p>
<p>有了上面的定义，当我输入&#8221;,lk&#8221;时，就会在tag文件中查找指定的文件名；当输入&#8221;,ll&#8221;时，就会在当前已打开的buffer中查找指定名字的buffer；当输入&#8221;,lw&#8221;时，就会在指定目录结构中查找。</p>
<p>另外，我还在项目相关的配置文件vim70sx.vim（参考本系列第4篇文章）中加入了lookupfile所使用的tag文件的信息：</p>
<p><br />
let g:LookupFile_TagExpr = '"filenametags"'</p>
<p>这样，在恢复前次会话时就给lookupfile插件定义了tag文件。</p>
<p>在用lookupfile插件查找文件时，是区分文件名的大小写的，如果想进行忽略大小写的匹配，可以使用VIM忽略大小写的正则表达式，即在文件名的前面加上&#8220;\c&#8221;字符。举个例子，当你输入&#8220;\cab.c&#8221;时，你可能会得到&#8220;ab.c&#8221;、&#8220;Ab.c&#8221;、&#8220;AB.c&#8221;&#8230;&#8230;。</p>
<p>注：如果想加快lookupfile忽略大小写查找的速度，在生成文件名tag文件时，使用混合大小写排序。这在本系列的第5篇文章中有所提及。</p>
<p>通常情况下我都进行忽略大小写的查找，每次都输入&#8220;\c&#8221;很麻烦。没关系，lookupfile插件提供了扩展功能，把下面这段代码加入你的vimrc中，就可以每次在查找文件时都忽略大小写查找了：</p>
<p><br />
" lookup file with ignore case<br />
function! LookupFile_IgnoreCaseFunc(pattern)<br />
&nbsp;&nbsp;&nbsp; let _tags = &amp;tags<br />
&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let &amp;tags = eval(g:LookupFile_TagExpr)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let newpattern = '\c' . a:pattern<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let tags = taglist(newpattern)<br />
&nbsp;&nbsp;&nbsp; catch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echohl ErrorMsg | echo "Exception: " . v:exception | echohl NONE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ""<br />
&nbsp;&nbsp;&nbsp; finally<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let &amp;tags = _tags<br />
&nbsp;&nbsp;&nbsp; endtry</p>
<p>&nbsp;&nbsp;&nbsp; " Show the matches for what is typed so far.<br />
&nbsp;&nbsp;&nbsp; let files = map(tags, 'v:val["filename"]')<br />
&nbsp;&nbsp;&nbsp; return files<br />
endfunction<br />
let g:LookupFile_LookupFunc = 'LookupFile_IgnoreCaseFunc'</p>
<p>有时在LUBufs时也需要忽略缓冲区名字的大小写，我是通过直接修改lookupfile插件的方法，在LUBufs查找的字符串前都加上&#8220;\c&#8221;，使之忽略大小写。如果你不想这样，可以每次在缓冲区名字前手动加上&#8220;\c&#8221;。</p>
<p>本文关于Lookupfile插件就介绍这么多，请阅读帮助页获取更多的信息。</p>
<p>这是一个非常好的插件，希望能为更多人喜爱！</p>
<p>也欢迎大家多交流使用中的心得和疑问。</p>
<p>来自：<a href="http://blog.csdn.net/easwy/archive/2007/03/12/1527228.aspx">http://blog.csdn.net/easwy/archive/2007/03/12/1527228.aspx</a></p>
<script type="text/javascript"><!-- google_ad_client="pub-9317413389774415" ;
/* 底部广告336x280, 创建于 08-7-23 */ google_ad_slot="9618407928" ; google_ad_width="336;
google_ad_height" = 280;
//-->
</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script>window.google_render_ad();</script>
<img src ="http://www.blogjava.net/conans/aggbug/264532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-04-08 21:48 <a href="http://www.blogjava.net/conans/articles/264532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用VIM开发软件项目6：文件浏览和缓冲区浏览</title><link>http://www.blogjava.net/conans/articles/264531.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Wed, 08 Apr 2009 13:47:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/264531.html</guid><description><![CDATA[<a href="http://www.kuqin.com/developtool/20080601/9142.html" target="_blank">
<p class="MsoNormal"><span style="font-family: 宋体">本节所用命令的帮助入口：</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div>:help netrw-browse<br />
:help bufexplorer<br />
:help winmanager&nbsp;</div>
</div>
<p class="MsoNormal"><strong><span lang="EN-US" style="font-size: 14pt">[</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">文件浏览</span></strong><strong><span lang="EN-US" style="font-size: 14pt">]<O:P></O:P></span></strong></p>
<p class="MsoNormal"><span style="font-family: 宋体">在开发过程中，经常需要查找某个文件。我们前面在介绍</span><span lang="EN-US">path</span><span style="font-family: 宋体">选项时，介绍过使用</span><span lang="EN-US">find</span><span style="font-family: 宋体">命令查找文件的方法。本节介绍</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">的文件浏览插件。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">在</span><span lang="EN-US">VIM 7.0</span><span style="font-family: 宋体">以前，文件浏览功能由</span><span lang="EN-US">explorer.vim</span><span style="font-family: 宋体">插件提供，在</span><span lang="EN-US">VIM 7.0</span><span style="font-family: 宋体">中，这个插件被</span><span lang="EN-US">netrw.vim</span><span style="font-family: 宋体">插件所代替。本文以</span><span lang="EN-US">VIM 7.0</span><span style="font-family: 宋体">为例，主要介绍</span><span lang="EN-US">netrw.vim</span><span style="font-family: 宋体">插件。</span></p>
<p class="MsoNormal"><span lang="EN-US">netrw.vim</span><span style="font-family: 宋体">是</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">的标准插件，它已经伴随</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">发行，不需要安装。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">我们现在试一下</span><span lang="EN-US">VIM的</span><span style="font-family: 宋体">文件浏览功能，当你使用</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">尝试打开目录时，</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">会自动调用</span><span lang="EN-US">netrw.vim</span><span style="font-family: 宋体">插件打开该目录（从操作系统的视角来看，目录其实是一种特殊的文件）。例如，我们在</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">中执行命令&#8220;</span><span lang="EN-US" style="color: blue">:e ~/src/vim70/src/</span><span lang="EN-US">&#8221;</span><span style="font-family: 宋体">，会显示下面的窗口：</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></a><a href="http://www.kuqin.com/upimg/allimg/080601/1246120.jpg" target="_blank"><img alt="" src="http://www.kuqin.com/upimg/allimg/080601/1246120.jpg" /></a><a href="http://www.kuqin.com/developtool/20080601/9142.html" target="_blank"><br />
</O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">这个窗口类似于文件管理器，你可以创建、删除、改名文件或目录；在目录上按回车时，会进入该目录；在文件上按回车时，会使用</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">打开该文件；可以更改排序方式、排序风格；隐藏目录或文件（使之不在上述窗口中显示）等等。</span></p>
<p class="MsoNormal"><span lang="EN-US">Netrw</span><span style="font-family: 宋体">插件中常用键绑定有：</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div>&lt;F1&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示帮助<br />
&lt;cr&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果光标下为目录，则进入该目录；如果光标下是文件，则用VIM打开该文件<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回上级目录<br />
c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 切换VIM的当前工作目录为正在浏览的目录<br />
d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建目录 <br />
D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除文件或目录<br />
i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 切换显示方式<br />
R&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 改名文件或目录<br />
s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择排序方式<br />
x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定制浏览方式，使用你指定的程序打开该文件</div>
</div>
&nbsp;
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">其它常用键，诸如使用书签、隐藏符合条件的文件等，请参阅</span><span lang="EN-US">netrw</span><span style="font-family: 宋体">帮助页。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">上面我们用&#8220;</span><span lang="EN-US" style="color: blue">:e ~/src/vim70/src/</span><span lang="EN-US">&#8221;</span><span style="font-family: 宋体">的方式打开</span><span lang="EN-US">netrw</span><span style="font-family: 宋体">，我们还可以使用&#8220;</span><span lang="EN-US" style="color: blue">:Explore</span><span style="font-family: 宋体">&#8221;等</span><span lang="EN-US">Ex</span><span style="font-family: 宋体">命令来打开文件浏览器。我的</span><span lang="EN-US">vimrc</span><span style="font-family: 宋体">中这样配置：</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div>&nbsp;&nbsp; """"""""""""""""""""""""""""""<br />
&nbsp;&nbsp; " netrw setting<br />
&nbsp;&nbsp; """"""""""""""""""""""""""""""<br />
&nbsp;&nbsp; let g:netrw_winsize = 30<br />
&nbsp;&nbsp; nmap &lt;silent&gt; &lt;leader&gt;fe :Sexplore!&lt;cr&gt;</div>
</div>
&nbsp;
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">这样，在我输入&#8220;</span><span lang="EN-US" style="color: blue">,fe</span><span style="font-family: 宋体">&#8221;时，就会打开一个垂直分隔的窗口浏览当前文件所在的目录，窗口的宽度为</span><span lang="EN-US">30</span><span style="font-family: 宋体">。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">浏览本地文件只是</span><span lang="EN-US">netrw</span><span style="font-family: 宋体">插件的一项小功能，</span><span lang="EN-US">netrw</span><span style="font-family: 宋体">插件最主要的功能是支持远程文件读写。利用该插件，你可以通过</span><span lang="EN-US">ftp</span><span style="font-family: 宋体">，</span><span lang="EN-US">ssh</span><span style="font-family: 宋体">，</span><span lang="EN-US">http</span><span style="font-family: 宋体">等多种协议来编辑远程文件，也可以浏览远程机器的目录。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">在软件开发过程中不常使用此功能，本文中不再介绍。参阅</span><span lang="EN-US">netrw</span><span style="font-family: 宋体">帮助页获取更多信息。</span></p>
<p class="MsoNormal"><strong><span lang="EN-US" style="font-size: 14pt">[</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">缓冲区浏览</span></strong><strong><span lang="EN-US" style="font-size: 14pt">]<O:P></O:P></span></strong></p>
<p class="MsoNormal"><span style="font-family: 宋体">在开发过程中，经常会打开很多缓冲区，尤其是使用</span><span lang="EN-US">tag</span><span style="font-family: 宋体">文件在不同函数间跳转时，会不知不觉打开很多文件。要知道自己当前打开了哪些缓冲区，可以使用</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">的&#8220;</span><span lang="EN-US" style="color: blue">:ls</span><span style="font-family: 宋体">&#8221;</span><span lang="EN-US">Ex</span><span style="font-family: 宋体">命令查看。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">开发过程中，又经常需要在不同文件间跳转。我习惯于使用&#8220;</span><span lang="EN-US">CTRL-^</span><span style="font-family: 宋体">&#8221;来切换文件，这就需要知道文件所在的缓冲区编号。每次都使用&#8220;</span><span lang="EN-US" style="color: blue">:ls</span><span style="font-family: 宋体">&#8221;来找缓冲区编号很麻烦，所以我使用</span><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">插件来显示缓冲区的信息。</span></p>
<p class="MsoNormal"><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">插件在此处下载：</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></a><a href="http://vim.sourceforge.net/scripts/script.php?script_id=42">http://vim.sourceforge.net/scripts/script.php?script_id=42</a><a href="http://www.kuqin.com/developtool/20080601/9142.html" target="_blank"></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">下载后，把该文件在</span><span lang="EN-US">~/.vim/</span><span style="font-family: 宋体">目录中解压缩，这会在你的</span><span lang="EN-US">~/.vim/plugin</span><span style="font-family: 宋体">和</span><span lang="EN-US">~/.vim/doc</span><span style="font-family: 宋体">目录中各放入一个文件：</span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: blue"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>plugin/</span><span lang="EN-US"> <span style="color: blue">bufexplorer.vim - bufexplorer</span></span><span style="color: blue; font-family: 宋体">插件</span><span lang="EN-US" style="color: blue"><O:P></O:P></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: blue"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>doc/</span><span lang="EN-US"> <span style="color: blue">bufexplorer.txt<span>&nbsp;&nbsp;&nbsp; </span>- bufexplorer</span></span><span style="color: blue; font-family: 宋体">帮助文件</span><span lang="EN-US" style="color: blue"><O:P></O:P></span></p>
<p class="MsoNormal"><strong><span style="font-family: 宋体">注</span></strong><span style="font-family: 宋体">：</span><span lang="EN-US">windows</span><span style="font-family: 宋体">用户需要把这个插件解压在你的</span><span lang="EN-US">$VIM/vimfiles</span><span style="font-family: 宋体">或</span><span lang="EN-US">$HOME/vimfiles</span><span style="font-family: 宋体">目录。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">使用下面的命令生成帮助标签（下面的操作在</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">中进行）：</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div>:helptags ~/.vim/doc</div>
</div>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">然后，就可以使用&#8220;</span><span lang="EN-US" style="color: blue">:help bufexplorer</span><span style="font-family: 宋体">&#8221;命令查看</span><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">的帮助文件了。</span></p>
<p class="MsoNormal"><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">功能比较简单，这里就不做介绍了。我的</span><span lang="EN-US">vimrc</span><span style="font-family: 宋体">里这样设置</span><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">插件：</span></p>
<p class="MsoNormal"></p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div>&nbsp;&nbsp; """"""""""""""""""""""""""""""<br />
&nbsp;&nbsp; " BufExplorer<br />
&nbsp;&nbsp; """"""""""""""""""""""""""""""<br />
&nbsp;&nbsp; let g:bufExplorerDefaultHelp=0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Do not show default help.<br />
&nbsp;&nbsp; let g:bufExplorerShowRelativePath=1&nbsp; " Show relative paths.<br />
&nbsp;&nbsp; let g:bufExplorerSortBy='mru'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Sort by most recently used.<br />
&nbsp;&nbsp; let g:bufExplorerSplitRight=0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " Split left.<br />
&nbsp;&nbsp; let g:bufExplorerSplitVertical=1&nbsp;&nbsp;&nbsp;&nbsp; " Split vertically.<br />
&nbsp;&nbsp; let g:bufExplorerSplitVertSize = 30&nbsp; " Split width<br />
&nbsp;&nbsp; let g:bufExplorerUseCurrentWindow=1&nbsp; " Open in new window.</div>
</div>
&nbsp;
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"></p>
<p class="MsoNormal"><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">已经映射了几个键绑定，例如，使用&#8220;</span><span lang="EN-US" style="color: blue">,bv</span><span style="font-family: 宋体">&#8221;就可以打开一个垂直分割窗口显示当前的缓冲区。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">有一个称为</span><span class="txth1"><span lang="EN-US">minibufexpl.vim</span></span><span class="txth1"><span style="font-family: 宋体">的插件，也可以把缓冲区列表显示出来，这个插件在此处下载：</span><span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><span class="txth1"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></span></span><span lang="EN-US"></a><a href="http://vim.sourceforge.net/scripts/script.php?script_id=159">http://vim.sourceforge.net/scripts/script.php?script_id=159</a><a href="http://www.kuqin.com/developtool/20080601/9142.html" target="_blank"></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">使用这个插件后，屏幕截图看起来是这样，最上面一个窗口就是</span><span lang="EN-US">minibuffer</span><span style="font-family: 宋体">窗口，列出了当前打开的缓冲区：</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></a><a href="http://www.kuqin.com/upimg/allimg/080601/1246121.jpg" target="_blank"><img alt="" src="http://www.kuqin.com/upimg/allimg/080601/1246121.jpg" /></a><a href="http://www.kuqin.com/developtool/20080601/9142.html" target="_blank"></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">这个插件没有帮助文件，参考下载页上的说明，以及脚本代码中的注释来配置。</span></p>
<p class="MsoNormal"><strong><span lang="EN-US" style="font-size: 14pt">[winmanager</span></strong><strong><span style="font-size: 14pt; font-family: 宋体">插件</span></strong><strong><span lang="EN-US" style="font-size: 14pt">]<O:P></O:P></span></strong></p>
<p class="MsoNormal"><span lang="EN-US">winmanager</span><span style="font-family: 宋体">插件可以把前面介绍的</span><span lang="EN-US">Explorer</span><span style="font-family: 宋体">插件</span><span lang="EN-US">(VIM 7.0</span><span style="font-family: 宋体">以前的文件浏览插件</span><span lang="EN-US">)</span><span style="font-family: 宋体">和</span><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">插件集成在一起，我们上篇文章中介绍过的</span><span lang="EN-US">taglist</span><span style="font-family: 宋体">插件也提供了对</span><span lang="EN-US">winmanager</span><span style="font-family: 宋体">插件的支持。</span></p>
<p class="MsoNormal"><span lang="EN-US">Winmanager</span><span style="font-family: 宋体">插件在这里下载：</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span></a><a href="http://vim.sourceforge.net/scripts/script.php?script_id=95">http://vim.sourceforge.net/scripts/script.php?script_id=95</a><a href="http://www.kuqin.com/developtool/20080601/9142.html" target="_blank"> </span></p>
<p class="MsoNormal"><span style="font-family: 宋体">下载后，把该文件在</span><span lang="EN-US">~/.vim/</span><span style="font-family: 宋体">目录中解压缩，这会把</span><span lang="EN-US">winmanager</span><span style="font-family: 宋体">插件解压到</span><span lang="EN-US">~/.vim/plugin</span><span style="font-family: 宋体">和</span><span lang="EN-US">~/.vim/doc</span><span style="font-family: 宋体">目录中：</span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: blue"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>plugin/winmanager.vim &#8211; winmanager</span><span style="color: blue; font-family: 宋体">插件</span><span lang="EN-US" style="color: blue"><O:P></O:P></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: blue"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>plugin/winfileexplorer.vim <span>&nbsp;</span>- </span><span style="color: blue; font-family: 宋体">改良的</span><span lang="EN-US" style="color: blue">Explorer</span><span style="color: blue; font-family: 宋体">插件</span><span lang="EN-US" style="color: blue"><O:P></O:P></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: blue"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>plugin/wintagexplorer.vim &#8211; winmanager</span><span style="color: blue; font-family: 宋体">提供的</span><span lang="EN-US" style="color: blue">tag</span><span style="color: blue; font-family: 宋体">插件，用处不大</span><span lang="EN-US" style="color: blue"><O:P></O:P></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: blue"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>doc/winmanager.txt &#8211; </span><span style="color: blue; font-family: 宋体">帮助文件</span><span lang="EN-US" style="color: blue"><O:P></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">仍然用&#8220;</span><span lang="EN-US" style="color: blue">:helptags ~/.vim/doc</span><span style="font-family: 宋体">&#8221;命令来生成帮助标签，然后就可以使用&#8220;</span><span lang="EN-US" style="color: blue">:help winmanager</span><span style="font-family: 宋体">&#8221;来查看帮助了。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">使用</span><span lang="EN-US">winmanager</span><span style="font-family: 宋体">插件可以控制各插件在</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">窗口中的布局显示。我的</span><span lang="EN-US">vimrc</span><span style="font-family: 宋体">中这样设置：</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div>&nbsp;&nbsp; """"""""""""""""""""""""""""""<br />
&nbsp;&nbsp; " winManager setting<br />
&nbsp;&nbsp; """"""""""""""""""""""""""""""<br />
&nbsp;&nbsp; let g:winManagerWindowLayout = "BufExplorer,FileExplorer|TagList"<br />
&nbsp;&nbsp; let g:winManagerWidth = 30<br />
&nbsp;&nbsp; let g:defaultExplorer = 0<br />
&nbsp;&nbsp; nmap &lt;C-W&gt;&lt;C-F&gt; :FirstExplorerWindow&lt;cr&gt;<br />
&nbsp;&nbsp; nmap &lt;C-W&gt;&lt;C-B&gt; :BottomExplorerWindow&lt;cr&gt;<br />
&nbsp;&nbsp; nmap &lt;silent&gt; &lt;leader&gt;wm :WMToggle&lt;cr&gt;&nbsp;</div>
</div>
<p class="MsoNormal"><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: blue">g:winManagerWindowLayout</span><span style="font-family: 宋体">变量的值定义</span><span lang="EN-US">winmanager</span><span style="font-family: 宋体">的窗口布局，使用上面的设置，我们的窗口布局看起来是这样的：</span></p>
<p class="MsoNormal"><span lang="EN-US"><O:P><img alt="" src="http://www.kuqin.com/upimg/allimg/080601/1246122.jpg" /></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">左边有两个窗口，上面的是</span><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">窗口，下面是</span><span lang="EN-US">taglist</span><span style="font-family: 宋体">窗口。</span><span lang="EN-US">FileExplorer</span><span style="font-family: 宋体">窗口和</span><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">共用一个窗口，在</span><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">窗口中使用&#8220;</span><span lang="EN-US">CTRL-N</span><span style="font-family: 宋体">&#8221;可以切换到</span><span lang="EN-US">FileExplorer</span><span style="font-family: 宋体">窗口，再使用一次则又切换回</span><span lang="EN-US">BufExplorer</span><span style="font-family: 宋体">窗口。也就是说，在变量</span><span lang="EN-US" style="color: blue">g:winManagerWindowLayout</span><span style="font-family: 宋体">中，使用&#8220;</span><span lang="EN-US">,</span><span style="font-family: 宋体">&#8221;分隔的插件，在同一个窗口中显示，使用&#8220;</span><span lang="EN-US">CTRL-N</span><span style="font-family: 宋体">&#8221;在不同插件间切换；使用&#8220;</span><span lang="EN-US">|</span><span style="font-family: 宋体">&#8221;分隔的插件，则在另外一个窗口中显示。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">在屏幕右边的窗口则是主编辑区。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">在上面的</span><span lang="EN-US">vimrc</span><span style="font-family: 宋体">中，还定义了三个键绑定，分别用于跳到左上窗口、左下窗口，以及显示</span><span lang="EN-US">/</span><span style="font-family: 宋体">关闭</span><span lang="EN-US">winmanager</span><span style="font-family: 宋体">窗口。</span></p>
<p class="MsoNormal"><strong><em><span style="font-family: 宋体">注</span></em></strong><em><span style="font-family: 宋体">：安装后，如果未设置</span><span lang="EN-US">g:winManagerWindowLayout</span></em><em><span style="font-family: 宋体">变量，</span><span lang="EN-US">winmanager</span></em><em><span style="font-family: 宋体">插件需要与</span><span lang="EN-US">BufExplorer</span></em><em><span style="font-family: 宋体">插件一起才能使用。所以需要下载</span><span lang="EN-US">BufExplorer</span></em><em><span style="font-family: 宋体">。</span><span lang="EN-US"><O:P></O:P></span></em></p>
<p class="MsoNormal"><span style="font-family: 宋体">在</span></a><a href="http://vim.sourceforge.net/scripts/script.php?script_id=1440" target="_blank"><span lang="EN-US">http://vim.sourceforge.net/scripts/script.php?script_id=1440</span></a><a href="http://www.kuqin.com/developtool/20080601/9142.html" target="_blank"><span style="font-family: 宋体">有一个</span><span lang="EN-US">winmanager</span><span style="font-family: 宋体">插件的修改版本，如果在</span><span lang="EN-US">FileExplorer</span><span style="font-family: 宋体">中打开文件时，它会使用与该文件相关联的程序来打开该文件，而不是使用</span><span lang="EN-US">VIM</span><span style="font-family: 宋体">。我没有使用过这个插件，有兴趣你可以试试。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">来自：</a><a href="http://blog.csdn.net/easwy/archive/2007/03/09/1525554.aspx">http://blog.csdn.net/easwy/archive/2007/03/09/1525554.aspx</a><a href="http://www.kuqin.com/developtool/20080601/9142.html" target="_blank"></span></p>
<script type="text/javascript"><!-- google_ad_client="pub-9317413389774415" ;
/* 底部广告336x280, 创建于 08-7-23 */ google_ad_slot="9618407928" ; google_ad_width="336;
google_ad_height" = 280;
//-->
</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script>window.google_render_ad();</script></a>
<img src ="http://www.blogjava.net/conans/aggbug/264531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-04-08 21:47 <a href="http://www.blogjava.net/conans/articles/264531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用VIM开发软件项目5：使用tag文件和taglist插件</title><link>http://www.blogjava.net/conans/articles/264530.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Wed, 08 Apr 2009 13:46:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/264530.html</guid><description><![CDATA[<p><strong>第一节：</strong></p>
<p>本节所用命令的帮助入口：</p>
<p><br />
:help &#8216;tags&#8217;<br />
:help :tag<br />
:help :tags<br />
:help CTRL-]<br />
:help CTRL-T<br />
:help vimgrep<br />
:help cw<br />
:help pattern</p>
<p>尽管相关的文章已经很多了，但tag文件实在是太有用了，所以还是啰嗦一次。</p>
<p>Tag文件(标签文件)无疑是开发人员的利器之一，有了tag文件的协助，你可以在VIM查看函数调用关系，类、结构、宏等的定义，可以在任意标签中跳转、返回&#8230;&#8230;相信使用过Source Insight的人对这些功能并不陌生，而在VIM中，此功能的实现依赖于tag文件。</p>
<p>对于程序来说，Tag文件中保存了诸如函数、类、结构、宏等的名字，它们所处的文件，以及如何通过Ex命令跳转到这些标签。它是一个纯文本文件，因此你可以手工的编辑它，也可以使用脚本对其进行操作。</p>
<p>通常我们使用名为ctags的程序来生成这样的tag文件。VIM能直接使用ctags程序所生成的tag文件。在UNIX系统下的ctags功能比较少，所以一般我们使用Exuberant Ctags（在大多数Linux系统上，它是缺省的ctags程序），它能够支持多达33种程序语言，足以满足我们开发的需要了。如果你的系统上未安装此程序，请到<a href="http://ctags.sourceforge.net/">http://ctags.sourceforge.net</a>下载。</p>
<p>EMACS则使用etags来生成tag文件，如果希望VIM也能支持etags的tag文件格式，需要在编译VIM时加入&#8221; +emacs_tags&#8221;选项。</p>
<p>Tag文件需要遵循一定的格式，由Exuberant Ctags生成的tag文件，缺省是如下格式：</p>
<p><br />
{tagname} {TAB} {tagfile} {TAB} {tagaddress} {term} {field} ..</p>
<p><br />
{tagname}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 标识符名字，例如函数名、类名、结构名、宏等。不能包含制表符。</p>
<p>{tagfile}&nbsp; 包含 {tagname} 的文件。它不能包含制表符。</p>
<p>{tagaddress}&nbsp;&nbsp; 可以定位到 {tagname}光标位置的 Ex 命令。</p>
<p>{term}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设为&#8220;;"&#8221;。这是为了兼容Vi编辑器，使Vi忽略后面的{field}字段。</p>
<p>{field} ..&nbsp; 此字段可选，通常用于表示此{tagname}的类型是函数、类、宏或是其它。</p>
<p>在{tagname}、{tagfile}和{tagaddress}之间，采用制表符（TAB符，即C语言中的&#8221;\t&#8221;）分隔，也就是说{tagname}、{tagfile}中不能包含制表符。</p>
<p>Tag文件的开头可以包含以&#8220;!_TAG_&#8221;开头的行，用来在tag文件中加入其它信息。VIM能够识别两种这样的标记，经常用到的是&#8220;_TAG_FILE_SORTED&#8221;标记，例如：</p>
<p><br />
!_TAG_FILE_SORTED&lt;Tab&gt;1&lt;Tab&gt;{anything}</p>
<p><br />
上面这个标记说明tag文件是经过排序的，并且排序时区分了大小写，对排序的tag，VIM会使用二分法来进行查找，大大加快了查找速度；如果值为0，则表示tag文件未经排序；如果值为2，则表示tag文件是忽略大小写排序的。</p>
<p>之所以在这里介绍tag文件的格式，是因为我们在后面提到的lookupfile插件中，会自己生成tag文件。</p>
<p>&nbsp;</p>
<p>虽然ctags有为数众多的选项，但通常我们所使用的非常简单。还是以VIM 7.0的代码为例，我们执行：</p>
<p><br />
cd ~/src/vim70<br />
ctags &#8211;R src</p>
<p><br />
上面这条命令会在~/src/vim70/目录下生成一个名为tags的文件，这个文件中包含~/src/vim70/src/目录下所有.c、.h文件中的标签。它一个文本文件，你可以用VIM打开它看一下。此文件缺省按区分字母大小写排序，所以直接可以被VIM使用。</p>
<p><br />
现在我们进入VIM，执行下面的命令：</p>
<p>:cd ~/src/vim70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "切换当前目录为~/src/vim70<br />
:set tags=tags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "设置tags选项为当前目录下的tags文件</p>
<p>现在，我们设置好了tags选项，接下来我们使用它：</p>
<p><br />
:tag VimMain</p>
<p><br />
你会看到VIM打开了src/main.c文件，并把光标定位到第167行VimMain上。</p>
<p>我们知道，一般主程序的函数名为main，如果你尝试下面的命令：</p>
<p><br />
:tag main<br />
&nbsp; # pri kind tag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file<br />
&nbsp; 1 F&nbsp;&nbsp; f&nbsp;&nbsp;&nbsp; main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/xxd/xxd.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main(argc, argv)<br />
&nbsp; 2 FS&nbsp; d&nbsp;&nbsp;&nbsp; main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/if_python.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 46<br />
Choice number (&lt;Enter&gt; cancels):</p>
<p><br />
这里并没有src/main.c文件，怎么回事呢？这是因为ctags并不是编译器，它在处理编译预处理指令受到局限，因此并没有生成src/main.c中main()函数的标签。你可以在生成tag文件时给ctags指定参数来解决这个问题。</p>
<p>或者你可以用&#8221;:grep&#8221;或&#8221;:vimgrep&#8221;来查找main（这已经超出本文的范围了，因此只给出例子，在后续的文章再做讲解）：</p>
<p><br />
:cd ~/src/vim70<br />
:vimgrep /\&lt;main\&gt;/ src/*.c<br />
:cw</p>
<p><br />
这时下面的窗口将显示出来，在quickfix窗口中找到我们想跳转的位置（本例中是src/main.c），按回车，就可以跳到对应的位置了。</p>
<p><a href="http://www.kuqin.com/upimg/allimg/080601/1236440.jpg" target="_blank"><img alt="" src="http://www.kuqin.com/upimg/allimg/080601/1236440.jpg" /></a></p>
<p><br />
如果你只记得部分的标签名，那么可以使用&#8220;tag&#8221;命令的搜索模式，你可以输入一个VIM正则表达式来表示你所查找的名字，如：</p>
<p><br />
:tag /\C\&lt;\k\+ain\&gt;<br />
&nbsp; # pri kind tag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file<br />
&nbsp; 1 F&nbsp;&nbsp; f&nbsp;&nbsp;&nbsp; VimMain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/main.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VimMain<br />
&nbsp; 2 F&nbsp;&nbsp; d&nbsp;&nbsp;&nbsp; bindtextdomain&nbsp;&nbsp;&nbsp; src/vim.h<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 483<br />
&nbsp; 3 F&nbsp;&nbsp; d&nbsp;&nbsp;&nbsp; bindtextdomain&nbsp;&nbsp;&nbsp; src/vim.h<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 502<br />
&nbsp; 4 F&nbsp;&nbsp; d&nbsp;&nbsp;&nbsp; bindtextdomain&nbsp;&nbsp;&nbsp; src/vim.h<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 504<br />
&nbsp; 5 F&nbsp;&nbsp; f&nbsp;&nbsp;&nbsp; main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/xxd/xxd.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main(argc, argv)<br />
&nbsp; 6 F&nbsp;&nbsp; d&nbsp;&nbsp;&nbsp; textdomain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/vim.h<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 488<br />
&nbsp; 7 F&nbsp;&nbsp; d&nbsp;&nbsp;&nbsp; textdomain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/vim.h<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 510<br />
&nbsp; 8 F&nbsp;&nbsp; d&nbsp;&nbsp;&nbsp; textdomain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/vim.h<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512<br />
&nbsp; 9 FS&nbsp; d&nbsp;&nbsp;&nbsp; bindtextdomain&nbsp;&nbsp;&nbsp; src/gui_gtk.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 54<br />
&nbsp;10 FS&nbsp; d&nbsp;&nbsp;&nbsp; bindtextdomain&nbsp;&nbsp;&nbsp; src/gui_gtk_x11.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 37<br />
&nbsp;11 FS&nbsp; f&nbsp;&nbsp;&nbsp; cmdsrv_main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/main.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmdsrv_main(argc, argv, serverName_arg, serverStr)<br />
&nbsp;12 FS&nbsp; d&nbsp;&nbsp;&nbsp; main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/if_python.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 46<br />
&nbsp;13 FS&nbsp; d&nbsp;&nbsp;&nbsp; textdomain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/gui_gtk.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51<br />
&nbsp;14 FS&nbsp; d&nbsp;&nbsp;&nbsp; textdomain&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src/gui_gtk_x11.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 34<br />
Choice number (&lt;Enter&gt; cancels):</p>
<p><br />
这表示我想查找一个以一个或多个keyword开始的标签，此标签以ain做为结尾，在查找时区分大小写。要读懂这个正则表达式，请&#8220;:help pattern&#8221;。</p>
<p>&nbsp;<br />
VIM会保存一个跳转的标签栈，以允许你在跳转到一个标签后，再跳回来，可以使用&#8220;:tags&#8221;命令查找你处于标签栈的哪个位置。</p>
<p>我们经常用到的tag跳转命令见下（一般只需要知道CTRL-]和CTRL-T就可以了）：</p>
<p><br />
:tag {ident}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "跳转到指定的标签<br />
:tags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "显示标签栈<br />
CTRL-]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "跳转到当前光标下的标签<br />
CTRL-T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "跳到标签栈中较早的标签</p>
<p>&nbsp;</p>
<p>如果想了解更多命令，可以&#8220;:help 29.1&#8221;（强烈建议程序员完整的阅读usr_29.txt和usr_30.txt）。</p>
<p>如果想更深入了解tag命令和相关知识，可以&#8220;:help tagsrch&#8221;。</p>
<p>我之前写的一篇关于ctags和cscope的文章，参见：<a href="http://blog.csdn.net/easwy/archive/2006/08/31/1150909.aspx" target="_blank">Vim + Cscope/Ctags</a> </p>
<p>第二节：</p>
<p>本节所用命令的帮助入口：</p>
<p><br />
:help helptags<br />
:help taglist.txt <br />
上篇文章介绍了在VIM中如何使用tag文件，本文主要介绍如何使用taglist插件。</p>
<p>想必用过Source Insight的人都记得这样一个功能：SI能够把当前文件中的宏、全局变量、函数等tag显示在Symbol窗口，用鼠标点上述tag，就跳到该tag定义的位置；可以按字母序、该tag所属的类或scope，以及该tag在文件中出现的位置进行排序；如果切换到另外一个文件，Symbol窗口更新显示这个文件中的tag。</p>
<p>在VIM中的taglist插件所实现的就是上述类似的功能，有些功能比SI弱，有些功能比SI更强。而且，taglist插件仍在不断完善中！</p>
<p>要使用taglist插件，必须满足：</p>
<p>1. 打开VIM的文件类型自动检测功能；<br />
2. 系统中装了Exuberant ctags工具，并且taglist能够找到此工具（因为taglist需要调用它来生成tag文件）；<br />
3. 你的VIM支持system()调用； <br />
在本系列第3篇文章(vimrc初步)中，我们使用了VIM自带的示例vimrc，这个vimrc中已经打开了文件类型检测功能；在上篇文章中，我们也已用到了Exuberant ctags；system()调用在一般的VIM版本都会支持(只有suse Linux发行版中出于安全考虑，关闭了此功能)，所以我们已经满足了这三个条件。</p>
<p>&nbsp;现在我们到<a href="http://www.vim.org/scripts/script.php?script_id=273">http://www.vim.org/scripts/script.php?script_id=273</a>下载最新版本的taglist plugin，目前版本是4.3。</p>
<p>下载后，把该文件在~/.vim/目录中解压缩，这会在你的~/.vim/plugin和~/.vim/doc目录中各放入一个文件：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plugin/taglist.vim &#8211; taglist插件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc/taglist.txt&nbsp;&nbsp;&nbsp; - taglist帮助文件</p>
<p>注：windows用户需要把这个插件解压在你的$VIM/vimfiles或$HOME/vimfiles目录。</p>
<p>&nbsp;<br />
使用下面的命令生成帮助标签（下面的操作在VIM中进行）：</p>
<p><br />
:helptags ~/.vim/doc </p>
<p>生成帮助标签后，你就可以用下面的命令查看taglist的帮助了：</p>
<p><br />
:help taglist.txt </p>
<p>Taglist提供了相当多的功能，我的vimrc中这样配置：</p>
<p><br />
&nbsp;&nbsp; """"""""""""""""""""""""""""""<br />
&nbsp;&nbsp; " Tag list (ctags)<br />
&nbsp;&nbsp; """"""""""""""""""""""""""""""<br />
&nbsp;&nbsp; if MySys() == "windows"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "设定windows系统中ctags程序的位置<br />
&nbsp;&nbsp;&nbsp;&nbsp; let Tlist_Ctags_Cmd = 'ctags'<br />
&nbsp;&nbsp; elseif MySys() == "linux"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "设定linux系统中ctags程序的位置<br />
&nbsp;&nbsp;&nbsp;&nbsp; let Tlist_Ctags_Cmd = '/usr/bin/ctags'<br />
&nbsp;&nbsp; endif<br />
&nbsp;&nbsp; let Tlist_Show_One_File = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "不同时显示多个文件的tag，只显示当前文件的<br />
&nbsp;&nbsp; let Tlist_Exit_OnlyWindow = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "如果taglist窗口是最后一个窗口，则退出vim<br />
&nbsp;&nbsp; let Tlist_Use_Right_Window = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "在右侧窗口中显示taglist窗口 </p>
<p>这样配置后，当你输入&#8220;:TlistOpen&#8221;时，显示如下窗口：</p>
<p><a href="http://www.kuqin.com/upimg/allimg/080601/1236441.jpg" target="_blank"><img alt="" src="http://www.kuqin.com/upimg/allimg/080601/1236441.jpg" /></a></p>
<p><br />
在屏幕右侧出现的就是taglist窗口，你从中可以看到在main.c文件中定义的所有tag：宏、定义、变量、函数等；你也可以双击某个tag，跳到该tag定义的位置；你还可以把某一类的tag折叠起来（使用了VIM的折行功能），方便查看，就像图中macro和variable那样。更多的功能，请查看taglist的帮助页，本文也会介绍一些常用功能。</p>
<p>&nbsp;<br />
下面介绍常用的taglist配置选项，你可以根据自己的习惯进行配置：</p>
<p><br />
- Tlist_Ctags_Cmd选项用于指定你的Exuberant ctags程序的位置，如果它没在你PATH变量所定义的路径中，需要使用此选项设置一下；</p>
<p>- 如果你不想同时显示多个文件中的tag，设置Tlist_Show_One_File为1。缺省为显示多个文件中的tag；</p>
<p>- 设置Tlist_Sort_Type为&#8221;name&#8221;可以使taglist以tag名字进行排序，缺省是按tag在文件中出现的顺序进行排序。按tag出现的范围（即所属的namespace或class）排序，已经加入taglist的TODO List，但尚未支持；</p>
<p>- 如果你在想taglist窗口是最后一个窗口时退出VIM，设置Tlist_Exit_OnlyWindow为１；</p>
<p>- 如果你想taglist窗口出现在右侧，设置Tlist_Use_Right_Window为１。缺省显示在左侧。</p>
<p>- 在gvim中，如果你想显示taglist菜单，设置Tlist_Show_Menu为１。你可以使用Tlist_Max_Submenu_Items和Tlist_Max_Tag_Length来控制菜单条目数和所显示tag名字的长度；</p>
<p>- 缺省情况下，在双击一个tag时，才会跳到该tag定义的位置，如果你想单击tag就跳转，设置Tlist_Use_SingleClick为１；</p>
<p>- 如果你想在启动VIM后，自动打开taglist窗口，设置Tlist_Auto_Open为1；</p>
<p>- 如果你希望在选择了tag后自动关闭taglist窗口，设置Tlist_Close_On_Select为1；</p>
<p>- 当同时显示多个文件中的tag时，设置Tlist_File_Fold_Auto_Close为１，可使taglist只显示当前文件tag，其它文件的tag都被折叠起来。</p>
<p>- 在使用:TlistToggle打开taglist窗口时，如果希望输入焦点在taglist窗口中，设置Tlist_GainFocus_On_ToggleOpen为1；</p>
<p>- 如果希望taglist始终解析文件中的tag，不管taglist窗口有没有打开，设置Tlist_Process_File_Always为1；</p>
<p>- Tlist_WinHeight和Tlist_WinWidth可以设置taglist窗口的高度和宽度。Tlist_Use_Horiz_Window为１设置taglist窗口横向显示；</p>
<p>在taglist窗口中，可以使用下面的快捷键：</p>
<p><br />
&lt;CR&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 跳到光标下tag所定义的位置，用鼠标双击此tag功能也一样<br />
o&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在一个新打开的窗口中显示光标下tag<br />
&lt;Space&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示光标下tag的原型定义<br />
u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 更新taglist窗口中的tag<br />
s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 更改排序方式，在按名字排序和按出现顺序排序间切换<br />
x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; taglist窗口放大和缩小，方便查看较长的tag<br />
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开一个折叠，同zo<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将tag折叠起来，同zc<br />
*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开所有的折叠，同zR<br />
=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将所有tag折叠起来，同zM<br />
[[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 跳到前一个文件<br />
]]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 跳到后一个文件<br />
q&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭taglist窗口<br />
&lt;F1&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示帮助<br />
可以用&#8220;:TlistOpen&#8221;打开taglist窗口，用&#8220;:TlistClose&#8221;关闭taglist窗口。或者使用&#8220;:TlistToggle&#8221;在打开和关闭间切换。在我的vimrc中定义了下面的映射，使用&#8220;,tl&#8221;键就可以打开/关闭taglist窗口：</p>
<p><br />
map &lt;silent&gt; &lt;leader&gt;tl :TlistToogle&lt;cr&gt;<br />
Taglist插件还提供了很多Ex命令，你甚至可以用这些命令创建一个taglist的会话，然后在下次进入VIM时加载此会话。</p>
<p>来自：<a href="http://blog.csdn.net/easwy/archive/2007/03/01/1518468.aspx">http://blog.csdn.net/easwy/archive/2007/03/01/1518468.aspx</a></p>
<script type="text/javascript"><!-- google_ad_client="pub-9317413389774415" ;
/* 底部广告336x280, 创建于 08-7-23 */ google_ad_slot="9618407928" ; google_ad_width="336;
google_ad_height" = 280;
//-->
</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script>window.google_render_ad();</script>
<img src ="http://www.blogjava.net/conans/aggbug/264530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-04-08 21:46 <a href="http://www.blogjava.net/conans/articles/264530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用VIM开发软件项目4：保存项目相关配置</title><link>http://www.blogjava.net/conans/articles/264529.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Wed, 08 Apr 2009 13:45:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/264529.html</guid><description><![CDATA[<p class="MsoNormal"><span style="font-family: 宋体">本节所用命令的帮助入口：<br />
&nbsp; </span></p>
<p class="MsoNormal"><span style="font-family: 宋体">:help 'path'<br />
:help mksession<br />
:help find<br />
:help gf<br />
:help CTRL-W_f</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">我们在前面介绍了vimrc，vimrc定义了VIM通常的行为。每个项目都有其特殊的定义，虽然我们也可以在vimrc中对每个项目进行定制，但这样一来，vimrc会变得很大，使VIM启动速度变慢；另外也会使vimrc变得难以维护。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">因此，我们使用其它的方法来保存项目相关的信息，这就是本文的主要内容。我们将以path选项的设置为例进行讲解。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">path选项定义了一个目录列表，在使用gf，find，以及CTRL-W f等命令时，如果使用的是相对路径，那么就会在path选项定义的目录列表中查找相应的文件。path选项以逗号分隔各目录名。我们依旧以VIM 7.0的源代码为例（源代码放在~/src/vim70/目录中）。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体">对于这个项目，我们的path选项设置如下：</span></p>
<span style="font-family: 宋体">
<p class="MsoNormal"><br />
set path=.,/usr/include,,~/src/vim70/**</p>
<p class="MsoNormal">稍微解释一下各项的含义，更详细的信息，请查看path选项的帮助页：</p>
<p class="MsoNormal"><br />
.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在当前文件所在目录中搜索<br />
/usr/include&nbsp;&nbsp;&nbsp;&nbsp; 在/usr/include目录中搜索<br />
,,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在当前工作路径中搜索<br />
~/src/vim70/**&nbsp;&nbsp; 在~/src/vim70的所有子目录树中进行搜索</p>
<p class="MsoNormal">设置了path选项后，怎么用呢？</p>
<p class="MsoNormal">我们还是回到序章中的屏幕抓图，我们把光标定位到src/main.c文件第22行的&#8221;fcntl.h&#8221;单词上，然后在Normal模式下按&#8221;gf&#8221;。咦，VIM打开了/usr/include/fcntl.h文件！</p>
<p class="MsoNormal">现在我们按&#8221;CTRL-^&#8221;回到刚才的位置，光标仍旧定位在第22行的&#8221;fcntl.h&#8221;单词上，然后按&#8221;CTRL-W f&#8221;。啊哈，这次VIM打开了一个水平分隔窗口，在此窗口中打开了/usr/include/fcntl.h。</p>
<p class="MsoNormal">尽管在src/main.c中未指定fcntl.h的路径，但VIM会在path选项定义的路径中搜索此文件，方便吧！</p>
<p class="MsoNormal">现在我们看一下find命令，输入：</p>
<p class="MsoNormal"><br />
:find netrw.vim</p>
<p class="MsoNormal"><br />
VIM打开了~/src/vim70/runtime/autoload/netrw.vim文件。用这种方法打开文件真是太方便了，你不用输入文件的路径，VIM会自动在path选项定义的路径中搜索。不过&#8221;find&#8221;命令也有缺陷，如果你只记得文件名的一部分，那么就没有办法用find命令打开这个文件了。而且find命令也不允许使用正则表达式。没关系，我们还有更好的方法来打开文件，我将在后续文章中介绍这些方法。</p>
<p class="MsoNormal">path选项介绍完了，我们进入正题，如何把本项目相关的配置保存起来，下次打开本项目时自动恢复这些配置呢？</p>
<p class="MsoNormal">我们有两种方法做到这一点。</p>
<p class="MsoNormal">[方法1]<br />
&nbsp;</p>
<p class="MsoNormal">我们在~/src/vim70/目录下建立一个文件，假定文件名为workspace.vim，文件内容为：<br />
&nbsp; </p>
<p class="MsoNormal">"set project path<br />
set path+=~/src/vim70/**</p>
<p class="MsoNormal"><br />
这个文件中保存了项目相关的信息，例如选项值，键映射，函数定义，自动命令，等等。我们的例子中只定义的path选项，我们没有使用&#8221;set path=&#8230;&#8221;语句，在VIM帮助页中建议使用&#8221;set path+=&#8230;&#8221;和&#8221;set path-=&#8230;&#8221;格式。</p>
<p class="MsoNormal">&nbsp;<br />
接下来，在你的vimrc文件中加入下面的语句：<br />
&nbsp; </p>
<p class="MsoNormal">" execute project related configuration in current directory<br />
if filereadable("workspace.vim")<br />
&nbsp;&nbsp;&nbsp; source workspace.vim<br />
endif</p>
<p class="MsoNormal"><br />
以后，每次你在~/src/vim70/目录中启动VIM时，VIM都会自动载入workspace.vim，恢复项目的配置信息。</p>
<p class="MsoNormal">[方法2]</p>
<p class="MsoNormal">还记得本系列文章的第二篇&#8220;使用会话和viminfo&#8221;吗？那篇文章中，我们介绍了使用会话和viminfo保存项目环境的方法。如果你使用了会话，那么选项值，键映射，和其它很多信息都已经保存了。但会话的功能毕竟有限，不能把项目相关的配置全部保存下来，怎么办呢？</p>
<p class="MsoNormal">VIM的开发者已经想到了这个问题，并提供了解决办法。</p>
<p class="MsoNormal">在VIM载入会话文件的最后一步，它会查找一个额外的文件并执行其中的ex命令。查找的规则是，把会话文件名的后缀去掉，然后在后面加上&#8220;x.vim&#8221;，。假设你的会话文件名为example.session，VIM就会查找是否有examplex.vim，如果找到，就会执行此文件中的ex命令。</p>
<p class="MsoNormal">&nbsp;<br />
好了，我们先创建我们的会话文件：<br />
&nbsp; </p>
<p class="MsoNormal">:cd ~/src/vim70<br />
:set sessionoptions-=curdir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '在session option中去掉curdir<br />
:set sessionoptions+=sesdir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '在session option中加入sesdir<br />
:mksession vim70s.vim&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '创建一个会话文件</p>
<p class="MsoNormal"><br />
然后再编辑一个名为~/src/vim70/vim70sx.vim的文件，文件的内容为（当然，你可以在这个文件中加入更多内容）：</p>
<p class="MsoNormal"><br />
"set project path<br />
set path+=~/src/vim70/**</p>
<p class="MsoNormal"><br />
退出vim后，在命令行下执行&#8221;gvim &amp;&#8221;，再次进入VIM，这时看到的是一个空白窗口。然后执行下面的命令：</p>
<p class="MsoNormal"><br />
:source ~/src/vim70/vim70s.vim&nbsp; '载入会话文件</p>
<p class="MsoNormal"><br />
太棒了！原来的会话环境已经恢复，并且项目相关的配置也设置好了！</p>
<p class="MsoNormal"><span style="font-family: 宋体">来自：<a href="http://blog.csdn.net/easwy/archive/2007/02/27/1515803.aspx">http://blog.csdn.net/easwy/archive/2007/02/27/1515803.aspx</a></span></p>
</span><script type="text/javascript"><!-- google_ad_client="pub-9317413389774415" ;
/* 底部广告336x280, 创建于 08-7-23 */ google_ad_slot="9618407928" ; google_ad_width="336;
google_ad_height" = 280;
//-->
</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script>window.google_render_ad();</script>
<img src ="http://www.blogjava.net/conans/aggbug/264529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-04-08 21:45 <a href="http://www.blogjava.net/conans/articles/264529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用VIM开发软件项目3：vimrc初步</title><link>http://www.blogjava.net/conans/articles/264528.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Wed, 08 Apr 2009 13:45:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/264528.html</guid><description><![CDATA[<p>本节所用命令的帮助入口：</p>
<p><br />
&nbsp;:help compatible<br />
:help mapleader<br />
:help map<br />
:help autocmd<br />
&nbsp;</p>
<p><br />
为什么我的VIM这么难用？不能语法高亮，没有折行，不能打开多个窗口多个buffer，不能&#8230;&#8230;</p>
<p>为什么别人用几个键就可以完成一个很复杂的功能，而我不能？</p>
<p>为什么别人的VIM看起来和我的很不一样？</p>
<p>&#8230;&#8230;</p>
<p>当你开始问这些问题的时候，是时候去检查一下你的vimrc了。</p>
<p>当VIM在启动时，如果没有找到vimrc或gvimrc，它缺省工作VI兼容的模式。这意味着，你只能使用VI所具备的功能，而VIM中的大量扩展功能将无法使用。也许这就是你的VIM如此难用的原因。</p>
<p>VIM中自带了一个vimrc例子，让我们从这个例子开始吧。</p>
<p>下面我以Linux下的VIM为例，windows版本的VIM，会在后面提到。</p>
<p>示例的vimrc(名为vimrc_example.vim)通常位于/usr/share/vim/vimXXX/目录下，其中vimXXX与你所使用的VIM版本有关。</p>
<p>首先把这个示例的vimrc拷贝到相应的目录，在Linux下，应该把它拷贝到你的home目录下，名字为&#8221;.vimrc&#8221;，下面是shell命令：</p>
<p><br />
cp /usr/share/vim/vim70/vimrc_example.vim ~/.vimrc</p>
<p>或者你在VIM中执行下面的命令，和上面的shell命令完成相同的功能：</p>
<p>:!cp $VIMRUNTIME/vimrc_example.vim ~/.vimrc</p>
<p>现在，你退出VIM后再进入，你的VIM和刚才已经不一样了。 </p>
<p>你可以先读一下你的vimrc，看看它都设定了什么：</p>
<p>:e ~/.vimrc</p>
<p>这是一个注释良好的文件，不需要多解释。</p>
<p>对windows版本的VIM，它已经缺省的有了一个vimrc，你可以在VIM在使用下面的命令来查看它：</p>
<p><br />
:e $VIM/_vimrc</p>
<p><br />
在这个文件中，它包含了上面提到的vimrc_example.vim。同时，它会把VIM设置的更符合windows的操作习惯。比如，支持CTRL-C拷贝，CTRL-V粘贴等等。Windows下的用户，可以使用$VIM/_vimrc来做为你的第一个vimrc。</p>
<p>顺便提一句，在unix/linux中，文件名可以以&#8221;.&#8221;开头，表明此文件是隐藏的。而在windows中，不允许文件名以&#8221;.&#8221;开头，所以，windows版本的VIM，将读取_vimrc来做为自己的配置文件。</p>
<p>在今后使用VIM的日子里，你会频繁的更改你的vimrc。所以我们需要设置一些快捷方式，使我们能快速的访问vimrc。</p>
<p>把下面这段内容拷贝到你的vimrc中：</p>
<p><br />
1&nbsp;&nbsp;&nbsp; "Set mapleader<br />
2&nbsp;&nbsp;&nbsp; let mapleader = ","<br />
3<br />
4&nbsp;&nbsp;&nbsp; "Fast reloading of the .vimrc<br />
5&nbsp;&nbsp;&nbsp; map &lt;silent&gt; &lt;leader&gt;s :source ~/.vimrc&lt;cr&gt;<br />
6&nbsp;&nbsp;&nbsp; "Fast editing of .vimrc<br />
7&nbsp;&nbsp;&nbsp; map &lt;silent&gt; &lt;leader&gt;e :e ~/.vimrc&lt;cr&gt;<br />
8&nbsp;&nbsp;&nbsp; "When .vimrc is edited, reload it<br />
9&nbsp;&nbsp;&nbsp; autocmd! bufwritepost .vimrc source ~/.vimrc</p>
<p>为了方便解释，我给每一行都加了一个行号。</p>
<p>在vimrc中，双引号开头的行，将被当作注释忽略。</p>
<p>第2行，用来设置mapleader变量，当mapleader为未设置或为空时，使用缺省的&#8220;\&#8221;来作为mapleader。</p>
<p>mapleader变量是作用是什么呢？我们先看下面。</p>
<p>第5行定义了一个映射，这个映射把&#8220;&lt;leader&gt;s&#8221;，映射为命令&#8220;:source ~/.vimrc&lt;cr&gt;&#8221;。当定义一个映射时，可以使用&lt;Leader&gt;前缀。而在映射生效时，VIM会把&lt;Leader&gt;替换成mapleader变量的值。也就是说，我们这里定义的&#8220;&lt;leader&gt;s&#8221;，在使用时就变成了&#8220;,s&#8221;，当输入这一快捷方式时，就会source一次~/.vimrc文件（也就是重新执行一遍.vimrc文件）。</p>
<p>第7行，定义了&#8220;&lt;leader&gt;e&#8221;快捷键，当输入&#8220;,e&#8221;时，会打开~/.vimrc进行编辑。</p>
<p>第9行，定义了一个自动命令，每次写入.vimrc后，都会执行这个自动命令，source一次~/.vimrc文件。</p>
<p>有了上面的快捷键，我们就能快速的打开vimrc文件编辑，快速重新source vimrc文件，方便多了。<br />
&nbsp;</p>
<p>无论在windows还是在linux中，我都使用VIM作为我的缺省编辑器。并且，我想使用同一个vimrc文件。因此，我定义了一个MySys()函数，用来区分不同的平台，以进行不同的配置。</p>
<p>另外，在编辑vimrc文件时，我更喜欢新开一个标签页来编辑，而不是在当前窗口中。因此，我定义了SwitchToBuf()函数，它在所有标签页的窗口中查找指定的文件名，如果找到这样一个窗口，就跳到此窗口中；否则，它新建一个标签页来打开vimrc文件。</p>
<p>下面是我的vimrc中使用的设定，希望能够抛砖引玉：</p>
<p>&nbsp; </p>
<p>" Platform<br />
function! MySys()<br />
&nbsp; return "linux"<br />
endfunction</p>
<p>" Switch to buffer according to file name<br />
function! SwitchToBuf(filename)<br />
&nbsp;&nbsp;&nbsp; let fullfn = substitute(a:filename, "^\\~/", $HOME . "/", "")<br />
&nbsp;&nbsp;&nbsp; " find in current tab<br />
&nbsp;&nbsp;&nbsp; let bufwinnr = bufwinnr(fullfn)<br />
&nbsp;&nbsp;&nbsp; if bufwinnr != -1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec bufwinnr . "wincmd w"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " find in each tab<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tabfirst<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let tab = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while tab &lt;= tabpagenr("$")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let bufwinnr = bufwinnr(fullfn)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if bufwinnr != -1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec "normal " . tab . "gt"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec bufwinnr . "wincmd w"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tabnext<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let tab = tab + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endwhile<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " not exist, new tab<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec "tabnew " . fullfn<br />
&nbsp;&nbsp;&nbsp; endif<br />
endfunction</p>
<p>"Fast edit vimrc<br />
if MySys() == 'linux'<br />
&nbsp;&nbsp;&nbsp; "Fast reloading of the .vimrc<br />
&nbsp;&nbsp;&nbsp; map &lt;silent&gt; &lt;leader&gt;s :source ~/.vimrc&lt;cr&gt;<br />
&nbsp;&nbsp;&nbsp; "Fast editing of .vimrc<br />
&nbsp;&nbsp;&nbsp; map &lt;silent&gt; &lt;leader&gt;e :call SwitchToBuf("~/.vimrc")&lt;cr&gt;<br />
&nbsp;&nbsp;&nbsp; "When .vimrc is edited, reload it<br />
&nbsp;&nbsp;&nbsp; autocmd! bufwritepost .vimrc source ~/.vimrc<br />
elseif MySys() == 'windows'<br />
&nbsp;&nbsp;&nbsp; "Fast reloading of the _vimrc<br />
&nbsp;&nbsp;&nbsp; map &lt;silent&gt; &lt;leader&gt;s :source ~/_vimrc&lt;cr&gt;<br />
&nbsp;&nbsp;&nbsp; "Fast editing of _vimrc<br />
&nbsp;&nbsp;&nbsp; map &lt;silent&gt; &lt;leader&gt;e :call SwitchToBuf("~/_vimrc")&lt;cr&gt;<br />
&nbsp;&nbsp;&nbsp; "When _vimrc is edited, reload it<br />
&nbsp;&nbsp;&nbsp; autocmd! bufwritepost _vimrc source ~/_vimrc<br />
endif</p>
<p>注意：我在windows中也定义一个&#8220;HOME&#8221;环境变量，然后把_vimrc放在&#8220;HOME&#8221;环境变量所指向的目录中。如果你打算在windows中使用上面的设定，也需要这样做！</p>
<p>VIM自带的示例vimrc中，只定义最基本的配置。</p>
<p>在<a href="http://www.amix.dk/vim/vimrc.html">http://www.amix.dk/vim/vimrc.html</a>有一个非常强大的vimrc，有人戏称为&#8220;史上最强的vimrc&#8221;，或许有些言过其实。不过，如果你通读了这个vimrc，相信能从中学到很多很多&#8230;&#8230;</p>
<p>我的vimrc也是基于此模板，然后自已做了很多修改。</p>
<p>建议：不要照拷这个vimrc！可能这个文件的设定并不符合你的习惯。另外，这个文件的设定，可能也不能在你的工作环境中运行。</p>
<p>在<a href="http://blog.csdn.net/redguardtoo/archive/2006/09/03/1172136.aspx">http://blog.csdn.net/redguardtoo/archive/2006/09/03/1172136.aspx</a>，有一个redguardtoo修改过的版本，可以对照参考一下。</p>
<p>&nbsp;[参考文档]</p>
<p>1. VIM帮助文件<br />
2. <a href="http://vimcdoc.sourceforge.net/">http://vimcdoc.sourceforge.net/</a> <br />
3. <a href="http://www.amix.dk/vim/vimrc.html">http://www.amix.dk/vim/vimrc.html</a> </p>
<p>来自：<a href="http://blog.csdn.net/easwy/archive/2007/02/26/1514639.aspx">http://blog.csdn.net/easwy/archive/2007/02/26/1514639.aspx</a></p>
<script type="text/javascript"><!-- google_ad_client="pub-9317413389774415" ;
/* 底部广告336x280, 创建于 08-7-23 */ google_ad_slot="9618407928" ; google_ad_width="336;
google_ad_height" = 280;
//-->
</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script>window.google_render_ad();</script>
<img src ="http://www.blogjava.net/conans/aggbug/264528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-04-08 21:45 <a href="http://www.blogjava.net/conans/articles/264528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用VIM开发软件项目2：会话和viminfo</title><link>http://www.blogjava.net/conans/articles/264527.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Wed, 08 Apr 2009 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/264527.html</guid><description><![CDATA[<p>本节所用命令的帮助入口：</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div>:help mksession<br />
:help 'sessionoptions'<br />
:help source<br />
:help wviminfo<br />
:help rviminfo<br />
:help 'viminfo</div>
</div>
<br />
<br />
很多软件都具有这样一种功能：在你下一次启动该软件时，它会自动为你恢复到你上次退出的环境，恢复窗口布局、所打开的文件，甚至是上次的设置。<br />
<br />
那么，VIM有没有这种功能呢？<br />
<br />
答案当然是肯定的！这需要使用VIM的会话(session)及viminfo的保存和恢复功能。<br />
<br />
这里所说的会话和viminfo，包括了你在本次使用VIM过程中的编辑环境，VIM可以把这个编辑环境保存下来，然后你在下次启动VIM后，可以再恢复回这个环境。我们在开发软件项目时，其周期不是一两天。如果你在中途退出了VIM而不能恢复原先的编辑环境的话，你又要重新打开你所打开的文件，重新定义你的映射、缩写，重新定位你所设定的标记的位置，重新设置项目相关设置&#8230;&#8230;不是一般的麻烦！<br />
<br />
要恢复上次的编辑环境，我们需要保存两种不同的信息，一种是会话信息，另外一种是viminfo信息。<br />
<br />
-&nbsp;&nbsp;&nbsp; 会话信息中保存了所有窗口的视图，外加全局设置。<br />
-&nbsp;&nbsp;&nbsp; viminfo信息中保存了命令行历史、搜索字符串历史、输入行历史、非空的寄存器内容、文件的位置标记、最近搜索/替换的模式、缓冲区列表、全局变量等信息。<br />
<br />
我们在下面分别对其进行介绍。<br />
<br />
<font style="font-weight: bold" size="2">[会话]</font><br />
<br />
我们可以使用&#8221;<span style="color: rgb(0,0,255)">:mksession [file]&#8221;</span>命令来创建一个会话文件，如果省略文件名的话，会自动创建一个名为Session.vim的会话文件。会话文件，其本质上是一个VIM脚本，你可以使用上述命令生成一个会话文件，然后再查看其中的内容，就会对会话文件有一个深入的认识。<br />
<br />
会话文件中保存哪些信息，是由<span style="color: rgb(0,0,255)">'sessionoptions'</span>选项决定的。缺省的<span style="color: rgb(0,0,255)">'sessionoptions'</span>选项包括"blank,buffers,curdir,folds,help,options,tabpages,winsize"，意为会话文件会恢复当前编辑环境的空窗口、所有的缓冲区、当前目录、折叠相关的信息、帮助窗口、所有的选项和映射、所有的标签页、窗口大小。<br />
<br />
如果你使用windows上的VIM，并且希望你的会话文件可以同时被windows版本的VIM和UNIX版本的VIM共同使用的话，在<span style="color: rgb(0,0,255)">'sessionoptions'</span>中加入<span style="color: rgb(0,0,255)">'slash'</span>和'<span style="color: rgb(0,0,255)">unix'</span>，前者把文件名中的&#8217;\&#8217;替换为&#8217;/&#8217;，后者会把会话文件的换行符保存成unix格式。<br />
<br />
如果你不希望在会话中保存当前路径，而是希望会话文件所在的目录自动成为当前工作目录，那么，需要在<span style="color: rgb(0,0,255)">'sessionoptions'</span>去掉<span style="color: rgb(0,0,255)">'curdir'</span>,加入<span style="color: rgb(0,0,255)">'sesdir'</span>，这样每次载入会话文件时，这个文件所在的目录，就被设为VIM的当前工作目录。在你通过网络访问其它项目时，或者你的项目有多个不同版本（位于不同的目录），而你想始终使用一个会话文件时，这个选项比较有用：你只需要把会话文件拷贝到不同的目录，然后使用就可以了。会话文件中保存的是文件的相对路径，而不是绝对路径。<br />
<br />
我们在上面使用<span style="color: rgb(0,0,255)">&#8221;:mksession&#8221;</span>命令创建了会话文件，那么怎么使用会话文件恢复编辑环境呢？很简单，你只需要使用<span style="color: rgb(0,0,255)">&#8221;source {file}&#8221;</span>来导入会话文件。因为会话文件是一个脚本，里面保存的是Ex命令，所以<span style="color: rgb(0,0,255)">&#8221;source&#8221;</span>命令只是把会话文件中的Ex命令执行一遍。<br />
<br />
<font style="font-weight: bold" size="2">[viminfo]</font><br />
<br />
使用&#8221;:<span style="color: rgb(0,0,255)">wviminfo [file]</span>&#8221;命令，可以手动创建一个viminfo文件。<br />
<br />
其实，在VIM退出时，每次都会保存一个.viminfo文件在用户的主目录。我们使用&#8221;<span style="color: rgb(0,0,255)">:wviminfo</span>&#8221;命令则是手动创建一个viminfo文件，因为缺省的.viminfo文件会在每次退出VIM时自动更新，谁知道你在关闭当前软件项目后，又使用VIM做过些什么呢？这样的话，.viminfo中的信息，也许就与你所进行的软件项目无关了。还是手动保存一个保险。<br />
<br />
&#8221;<span style="color: rgb(0,0,255)">:wviminfo</span>&#8221;命令保存哪些内容，以及保存的数目，由'<span style="color: rgb(0,0,255)">viminfo'</span>选项决定，这个选项的值在windows上和在linux上的缺省值不同，具体含义参阅手册。<br />
<br />
要读入你所保存的viminfo文件，使用&#8221;<span style="color: rgb(0,0,255)">:rviminfo [file]</span>&#8221;命令。<br />
<br />
<br />
现在，回到我们的例子，依旧是上篇文章中的抓图，先看一下我们当前目录，执行&#8221;<span style="color: rgb(0,0,255)">:pwd</span>&#8221;，显示&#8220;<span style="color: rgb(0,0,255)">/home/easwy/src/vim70</span>&#8221;，接下来，执行下面的命令：<br />
<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div>:cd src&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,128,128)">'切换到/home/easwy/src/vim70/src目录</span><br />
:set sessionoptions-=curdir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,128,128)">'在session option中去掉curdir</span><br />
:set sessionoptions+=sesdir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,128,128)">'在session option中加入sesdir</span><br />
:mksession vim70.vim&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,128,128)">'创建一个会话文件</span><br />
:wviminfo vim70.viminfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,128,128)">'创建一个viminfo文件</span><br />
:qa&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,128,128)">'退出vim</span></div>
</div>
<br />
退出vim后，在命令行下执行&#8220;<span style="color: rgb(0,0,255)">gvim &amp;</span>&#8221;，再次进入VIM，这时看到的是一个空白窗口。然后执行下面的命令：<br />
<br />
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: rgb(230,230,230) 0% 50%; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; padding-top: 4px; border-bottom: windowtext 0.5pt solid; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">
<div>:source ~/src/vim70/src/vim70.vim&nbsp;<span style="color: rgb(0,128,128)"> '载入会话文件</span><br />
:rviminfo vim70.viminfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: rgb(0,128,128)"> '读入viminfo文件</span></div>
</div>
<p><br />
<br />
太棒了，又恢复到昨天退出时的状态了！继续工作~~~~</p>
<img src ="http://www.blogjava.net/conans/aggbug/264527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-04-08 21:44 <a href="http://www.blogjava.net/conans/articles/264527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用VIM开发软件项目1：序章</title><link>http://www.blogjava.net/conans/articles/264526.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Wed, 08 Apr 2009 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/264526.html</guid><description><![CDATA[<p>从初次接触VIM，到现在已经有好些年时间了。在软件开发中使用VIM，不过是近两年的事情。对VIM的了解远远算不上深入，不过还是把自己使用VIM的一些经验写出来，希望对VIM的推广做一份贡献。</p>
<p>　　本系列文章主要介绍我自己在使用VIM开发软件项目的一些经验。本篇是序章，务虚为主。</p>
<p>　 　在使用VIM进行软件开发之前，我使用的工具是Source Insight，相信大家并不陌生。Source Insight是一个比较不错工具，特别是在浏览代码方面。在面对成百上千个文件组成的陌生源代码时，使用Source Insight可以让你很快的了解软件的主体流程、调用关系、类型定义&#8230;&#8230;。使用Source Insight写代码也不错，它的自动补全功能很强，似乎使用拷贝、粘贴，加上自动补全，就可以完成代码了。不再使用Source Insight的原因有二，一是Source Insight只支持windows，不能在Linux上用；二是不想再用盗版的Source Insight。</p>
<p>　　在决定使用VIM前，也在VIM和EMACS犹豫了很久，最终懒惰的天性让我放弃了EMACS：实在是不习惯在移动光标时，也要用两只手按住CTRL/ALT/SHIFT再加个什么键；我的天性喜欢偷懒，能用一个手指做的事，不想用两个手指完成。所以最终选择了使用VIM。现在感觉，VIM和EMACS在文本编辑方面不分伯仲。EMACS的优势，在于它的可扩展性，使它可以完成很多和文本编辑无关的事情；不过这也造成了它的过于庞大。</p>
<p>　　刚改用VIM，最不适应的是不能再用鼠标&#8220;指哪儿打哪儿&#8221;了（VIM当然支持鼠标，只是双手在键盘、鼠标间切换，很是影响效率），然 后是拷贝、粘贴，然后是查看调用关系，函数间跳转，再然后&#8230;&#8230;总之，刚开始的一段时间非常痛苦，效率也非常的低，甚至总是想着放弃。经过这段时间以后，逐 渐摸到一些窍门，也渐渐的知道到哪里去寻求帮助，在哪儿可以找到VIM的资源，工作效率一点点提升了上来。到现在，工作中已经离不开VIM了，VIM成了 计算机中缺省的文本编辑工具！</p>
<p>　　其实，对VIM和EMACS这样的工具来说，它们最强大之处，在于它们的可定制性。由于它们的可定制性，你完全 可以定制出一个符合你自己编辑习惯的编辑器，在这样一个编辑器里，你的工作效率将达到最高。当然，要达到这样的境界，你需要付出非常坚苦的努力！如果你的 工作是以文本编辑为主，例如，你是一个程序员，那么付出这种努力是值得的，也是有回报的。如果你没有很多文本编辑工作要做，那么也没有必要耗费这么大的力 气，来学习这些工具。</p>
<p>最后对VIM的初学者提一些建议：</p>
<p>1.&nbsp;&nbsp;&nbsp; 如果你的工作以文本编辑(不是指Microsoft word中的文本编辑)为主，那么学习VIM或EMACS是值得的；</p>
<p>2.&nbsp;&nbsp;&nbsp; 刚开始使用VIM或EMACS的经历是很痛苦的，因为它们可能完成不同于你已经习惯的windows编辑器。我的建议是：坚持下去！咬牙坚持下去！你会获得回报的。</p>
<p>3.&nbsp;&nbsp;&nbsp; VIM的帮助文件，是学习如何高效使用VIM的重要资源，一定要多读帮助文件。如果你是因为害怕读英文的帮助文件而不肯学习VIM的话，那么，到<a href="http://vimcdoc.sourceforge.net/" target="_blank">http://vimcdoc.sourceforge.net/</a>去看一下，那里有翻译好的VIM 7.0的帮助文件，按照说明安装好后，再使用&#8220;<span style="color: rgb(0,0,255)">:help</span>&#8221;命令，你就可以看到翻译好的帮助文件了。如果你看到的还是英文的帮助文件，说明&#8220;<span style="color: rgb(0,0,255)">helplang</span>&#8221;选项设置的不正确（似乎在windows上，helplang选项被设置为大写的Cn，而不是cn，所以无法看到中文的help文件）。使用&#8220;<span style="color: rgb(0,0,255)">:set helplang=cn</span>&#8221;命令重新设置一下helplang选项，然后再使用&#8220;<span style="color: rgb(0,0,255)">:help</span>&#8221;命令，就可以看到中文帮助文件了。或者你可以使用&#8220;<span style="color: rgb(0,0,255)">:help xxx@cn</span>&#8221;来查看xxx的中文帮助文件。</p>
<p>4.&nbsp;&nbsp;&nbsp; 如果你是第一次接触VIM，那么执行一下&#8220;<span style="color: rgb(0,0,255)">:help tutor</span>&#8221;或&#8220;<span style="color: rgb(0,0,255)">:help tutor@cn</span>&#8221;，你就会看到一个30分钟的VIM教程，会教会你VIM的一些基本命令。</p>
<p>5.&nbsp;&nbsp;&nbsp; 有时间的话，一定要阅读一下Bram Moolenaar（VIM的主要作者）写的Seven habits of effective text editing（七个有效的文本编辑习惯），你可以知道怎样提高你的编辑效率。在<a href="http://vimcdoc.sourceforge.net/" target="_blank">http://vimcdoc.sourceforge.net/</a>提供的PDF文件的附录二，你可以看到它的中文译本。</p>
<p>本系列文章都针对VIM 7.0版本，如果这里介绍的功能在你的VIM中不存在，不妨升级到VIM 7.0后再试一次。</p>
<p>我以Linux版本的VIM 7.0为例。VIM也有支持windows的版本，可以到<a href="http://www.vim.org/" target="_blank">http://www.vim.org/</a>下载已经预编译好的windows版本的VIM 7.0。</p>
<p>文章尽量不涉及具体的软件源代码，如果确实需要，则以VIM 7.0的源代码为例。此代码可以也可以在<a href="http://www.vim.org/" target="_blank">VIM的主页</a>上下载，我把它解压在~/src/vim70目录下。以后就以此目录为例进行讲解。</p>
<p>附 图是我所使用VIM环境，在这副图中，我打开了三个标签页，一个是主编程区，一个是打开的.vimrc文件，另外一个是草稿区。在主编程标签页中有几个不 同的窗口，分别是当前打开的buffer，当前文件中的tag，help窗口，lookupfile窗口，src/main.c和src/edit.c。 其中使用了三个VIM插件（plugin）：winmanager, taglist, lookupfile。</p>
<p>从这副图中可以看到VIM的一些特性：多标签支持、多窗口支持、插件支持、语法高亮功能、文本折叠功能&#8230;&#8230;；这些特性，以及其它数不清的特性，我都将在后续文章中尽量给予介绍。</p>
<p><a href="http://www.kuqin.com/upimg/allimg/080601/1146120.jpg" target="_blank"><img alt="" src="http://www.kuqin.com/upimg/allimg/080601/1146120.jpg" /></a></p>
<p>上图是GUI界面的VIM，下图是控制台下的VIM的抓图。这是我通常的开发方式：使用putty远程登录到linux服务器上，使用控制台的VIM开发软件：</p>
<p><a href="http://www.kuqin.com/upimg/allimg/080601/1146121.jpg" target="_blank"><img alt="" src="http://www.kuqin.com/upimg/allimg/080601/1146121.jpg" /></a></p>
<p>对VIM的了解有限，请多请教。</p>
<p>[<span style="color: red; font-family: 宋体">参考文档</span>]</p>
<p>1. VIM<span style="font-family: 宋体">帮助文件</span></p>
<p>2. <a href="http://vimcdoc.sourceforge.net/"><span style="font-family: Arial">http://vimcdoc.sourceforge.net/</a> </span></p>
<img src ="http://www.blogjava.net/conans/aggbug/264526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2009-04-08 21:42 <a href="http://www.blogjava.net/conans/articles/264526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Vim快捷键汇总</title><link>http://www.blogjava.net/conans/articles/209614.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 20 Jun 2008 15:20:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209614.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ---------------------------------------------------------------------------N is used to indicate an optional count that can be given before the command.--------------------------------------------...&nbsp;&nbsp;<a href='http://www.blogjava.net/conans/articles/209614.html'>阅读全文</a><img src ="http://www.blogjava.net/conans/aggbug/209614.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-20 23:20 <a href="http://www.blogjava.net/conans/articles/209614.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vim的常用插件</title><link>http://www.blogjava.net/conans/articles/209593.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 20 Jun 2008 15:07:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209593.html</guid><description><![CDATA[以 下是滇狐收集和整理的一些有用的 VIM 插件， 大部分插件都有自己详细的说明书， 因此这里就不详细介绍每个插件的安装和使用方法了。 通过这些插件， VIM 能够变成一个非常强大的平台， Happy VIMming！ 如果想详细了解默认的插件插件安装路径， 请看<a href="http://edyfox.codecarver.org/html/vimpluginspath.html">这里</a><a name="idx001"></a>。
<div class="tabBody">
<h1>1 程序设计</h1>
<h2>1.1 Tag List</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=273">官方站点</a></span><a name="idx002"></a></p>
<p>官 方描述： The &#8220;Tag List&#8221; plugin is a source code browser plugin for Vim and provides an overview of the structure of source code files and allows you to efficiently browse through source code files for different programming languages.</p>
<p>滇狐评价： 这是一个非常非常非常非常重要的插件， 有了它， 我们才能够在 VIM 中查看一个文件中包含的函数列表， 或是一个类包含的方法列表， 为编程人员提供了极大方便。 推荐大家一定要安装！</p>
<p>安装注意事项： 有的系统内置的 ctags 功能太弱， 推荐大家安装 <span class="remote"><a class="remote" href="http://ctags.sourceforge.net/">EXUBERANT CTAGS</a></span><a name="idx003"></a>， 这个东西功能比较强大， 居然连 HTML 里面内嵌的 Java Script 都能够支持， 实在是匪疑所思！</p>
<p>滇狐个人习惯： 滇狐习惯把方法列表放在屏幕的右侧， 于是在 .vimrc 中设置了</p>
<div class="code"><span style="color: rgb(165,42,42)"><strong>let</strong></span> Tlist_Use_Right_Window<span style="color: rgb(165,42,42)"><strong>=</strong></span><span style="color: rgb(255,0,255)">1</span><br />
</div>
<p>另外， 滇狐习惯让当前不被编辑的文件的方法列表自动折叠起来， 这样可以节约一些屏幕空间， 于是在 .vimrc 中设置了</p>
<div class="code"><span style="color: rgb(165,42,42)"><strong>let</strong></span> Tlist_File_Fold_Auto_Close<span style="color: rgb(165,42,42)"><strong>=</strong></span><span style="color: rgb(255,0,255)">1</span>。<br />
</div>
<h2>1.2 A</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=31">官方站点</a></span><a name="idx004"></a></p>
<p>官方描述：</p>
<p>A few of quick commands to swtich between source files and header files quickly.</p>
<p>:A switches to the header file corresponding to the current file being edited (or vise versa)</p>
<p>:AS splits and switches</p>
<p>:AV vertical splits and switches</p>
<p>E.g. if you are editing foo.c and need to edit foo.h simply execute :A and you will be editting foo.h, to switch back to foo.c execute :A again.</p>
<p>滇狐评价： 第一眼看到这个东西时， 总觉得它功能太简单， 似乎没有什么用处。 用过之后， 才发现这项功能对于一个程序员来说是如何重要！</p>
<h2>1.3 Win Manager</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=1440">官方站点</a></span><a name="idx005"></a></p>
<p>官 方描述： winmanager is a plugin which implements a classical windows type IDE in Vim-6.0. Basically, you have the directory tree and the buffer list as 2 windows which stay on the left and the editing is done in a seperate area on the left. People have already made excellent File and Buffer explorers seperately and I thought that it might be a cool idea to combine them both. winmanager.vim combines the standard File Explorer which ships with Vim 6.0 and a Buffer Explorer written by Jeff Lanzarotta into one package.</p>
<p>滇狐评价： 非常好用的东西， 在屏幕上打开一个文件浏览器， 这样就可以方便地选择要编辑的文件了。</p>
<p>默认情况下， winmanager 依赖于 bufexplorer， 到<span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=42">这里</a></span><a name="idx006"></a>下载。 如果你不喜欢 bufexplorer 插件的话 可以在你的 .vimrc 中添加这条命令禁用它：</p>
<div class="code"><span style="color: rgb(165,42,42)"><strong>let</strong></span> g:winManagerWindowLayout <span style="color: rgb(165,42,42)"><strong>=</strong></span> <span style="color: rgb(255,0,255)">"FileExplorer"</span><br />
</div>
<p>这样就不需要下载该插件了。</p>
<p>滇 狐为 winfileexplorer.vim 加了一个补丁， 提供了使用系统默认打开方式打开选中文件的功能， 只要把光标放在想要打开的文件上， 然后按&#8220;S&#8221;就可以了 (注意是大写)。 这样以后就可以直接在 gvim 里打开 Noatun 或别的播放器， 不用再切换出来找 konqueror 了。</p>
<h2>1.4 echofunc</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=1735">官方站点</a></span><a name="idx007"></a></p>
<p>官 方描述： When you type &#8216;(&#8216; after a function name in insert mode, the function declaration will be displayed in the command line automatically. Then use Alt+-, Alt+= to cycle between function declarations (if exists).</p>
<p>滇狐评价： 一个非常好用的插件， 虽然很小巧， 功能也很简单， 但非常实用， 强烈推荐。 除此之外， 安装了这个插件后， 当鼠标移到一个标志符之上时， 还会出现一个气球显示该标志符的定义， 如图：</p>
<div class="figure"><img class="figure" alt="vim_echofunc" src="http://www.proxypass.us/index.php?q=uggc%3A%2F%2Frqlsbk.pbqrpneire.bet%2Fugzy%2Fivz_rpubshap.cat" name="imgid_0" /> </div>
<p>安装注意事项： 该插件需要安装 <span class="remote"><a class="remote" href="http://ctags.sourceforge.net/">EXUBERANT CTAGS</a></span><a name="idx008"></a>， 不支持古老版本的标准 ctags。 建议创建一个这样的脚本：</p>
<div class="code"><span style="color: rgb(0,0,255)">#!/bin/sh</span><br />
<span style="color: rgb(0,0,255)"># Filename: omnictags</span><br />
<br />
ctags <span style="color: rgb(106,90,205)">--c++-kinds=+p</span> <span style="color: rgb(106,90,205)">--fields=+iaS</span> <span style="color: rgb(106,90,205)">--extra=+q</span> <span style="color: rgb(165,42,42)"><strong>"</strong></span><span style="color: rgb(160,32,240)">$@</span><span style="color: rgb(165,42,42)"><strong>"</strong></span><br />
</div>
<p>然后使用 <code>omnictags</code> 来运行 ctags 生成 tags 文件， 保证 tags 文件中含有所需的信息。</p>
<h2>1.5 omnicppcomplete</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=1520">官方站点</a></span><a name="idx009"></a></p>
<p>官 方描述： This script is for vim 7.0 or higher it provides an omnifunc cppcomplete function. You can use the omni completion (intellisense) in c++ files.</p>
<p>This is a full vim script and you only need a ctags database.</p>
<p>滇狐评价： 虽然滇狐几乎不依赖 IDE 的自动完成， 因此也很少使用这个插件， 但总的说来， 这仍然是个很棒的插件。</p>
<p>安装注意事项： 该插件需要安装 <span class="remote"><a class="remote" href="http://ctags.sourceforge.net/">EXUBERANT CTAGS</a></span><a name="idx0010"></a>， 不支持古老版本的标准 ctags。 建议创建一个和前面的 echofunc 中给出个脚本， 使用那个脚本来生成 tags 文件。</p>
<h2>1.6 clewn</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://clewn.sourceforge.net/">官方站点</a></span><a name="idx0011"></a></p>
<p>官 方描述： Clewn implements full gdb support in the vim editor: breakpoints, watch variables, gdb command completion, assembly windows, etc.</p>
<p>滇狐评价： Vim 从一开始的设计哲学就是要保持简单， 不要把太多的东西整合在 Vim 中。 Clewn 在保持了 Vim 简单的原则下， 将集成调试所需的一部分功能引入到了 GVim 中， 支持设置断点、 查看变量的值等许多操作， 非常方便。</p>
<h2>1.7 jad</h2>
<p>下载地址： 无。 自己将代码复制粘贴回去， 保存为 $HOME/.vim/plugins/jad.vim：</p>
<div class="code"><span style="color: rgb(165,42,42)"><strong>augr</strong></span> class<br />
<span style="color: rgb(165,42,42)"><strong>au</strong></span>!<br />
<span style="color: rgb(165,42,42)"><strong>au</strong></span> <span style="color: rgb(46,139,87)"><strong>bufreadpost</strong></span>,<span style="color: rgb(46,139,87)"><strong>filereadpost</strong></span> *.class %!jad -noctor -ff -i -p <span style="color: rgb(0,139,139)">%</span><br />
<span style="color: rgb(165,42,42)"><strong>au</strong></span> <span style="color: rgb(46,139,87)"><strong>bufreadpost</strong></span>,<span style="color: rgb(46,139,87)"><strong>filereadpost</strong></span> *.class <span style="color: rgb(165,42,42)"><strong>set</strong></span> <span style="color: rgb(160,32,240)">readonly</span><br />
<span style="color: rgb(165,42,42)"><strong>au</strong></span> <span style="color: rgb(46,139,87)"><strong>bufreadpost</strong></span>,<span style="color: rgb(46,139,87)"><strong>filereadpost</strong></span> *.class <span style="color: rgb(165,42,42)"><strong>set</strong></span> <span style="color: rgb(160,32,240)">ft</span>=java<br />
<span style="color: rgb(165,42,42)"><strong>au</strong></span> <span style="color: rgb(46,139,87)"><strong>bufreadpost</strong></span>,<span style="color: rgb(46,139,87)"><strong>filereadpost</strong></span> *.class normal gg<span style="color: rgb(165,42,42)"><strong>=</strong></span>G<br />
<span style="color: rgb(165,42,42)"><strong>au</strong></span> <span style="color: rgb(46,139,87)"><strong>bufreadpost</strong></span>,<span style="color: rgb(46,139,87)"><strong>filereadpost</strong></span> *.class <span style="color: rgb(165,42,42)"><strong>set</strong></span> <span style="color: rgb(160,32,240)">nomodified</span><br />
<span style="color: rgb(165,42,42)"><strong>au</strong></span> <span style="color: rgb(46,139,87)"><strong>bufreadpost</strong></span>,<span style="color: rgb(46,139,87)"><strong>filereadpost</strong></span> *.class <span style="color: rgb(165,42,42)"><strong>set</strong></span> <span style="color: rgb(160,32,240)">nomodifiable</span><br />
<span style="color: rgb(165,42,42)"><strong>augr</strong></span> END<br />
</div>
<p>官方描述： (无)</p>
<p>滇狐评价： 挺好玩的插件， 不过似乎也只是好玩而已。 安装了之后可以直接双击打开 .class 文件， VIM 会自动调用 jad 把文件反编译了。</p>
<p>安装注意事项：需要先安装一份 <span class="remote"><a class="remote" href="http://kpdus.tripod.com/jad.html">jad</a></span><a name="idx0012"></a>。</p>
<h2>1.8 cscope_maps</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://cscope.sourceforge.net/cscope_maps.vim">官方站点</a></span><a name="idx0013"></a></p>
<p>官 方描述： Cscope is a very handy tool, but it&#8217;s even better when you don&#8217;t ever have to leave the comfort of your favorite editor (i.e. Vim) to use it. Fortunately, Cscope support has been built into Vim.</p>
<p>滇狐评价： 滇狐目前 cscope 用得不如 ctags 多， 许多功能都不大熟。 不过既然大家都说好， 那还是装着玩玩吧。</p>
<p>安装注意事项： 需要安装 <span class="remote"><a class="remote" href="http://cscope.sourceforge.net/">cscope</a></span><a name="idx0014"></a>。</p>
<h2>1.9 project</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=69">官方站点</a></span><a name="idx0015"></a></p>
<p>官 方描述： You can use this plugin&#8217;s basic functionality to set up a list of frequently-accessed files for easy navigation. The list of files will be displayed in a window on the left side of the Vim window, and you can press <return></return>or double-click on filenames in the list to open the files. This is similar to how some IDEs I&#8217;ve used work. I find this easier to use than having to navigate a directory hierarchy with the file-explorer. It also obviates the need for a buffer explorer because you have your list of files on the left of the Vim Window.</p>
<p>滇狐评价： 食之无肉，弃之有味。</p>
<p>安装注意事项： 几乎没怎么用过， 所以暂时没有发现需要注意的地方。</p>
<h1>2 文档编写</h1>
<h2>2.1 fencview</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=1708">官方站点</a></span><a name="idx0016"></a></p>
<p>官方描述： View a multi-byte encoded file in different encodings.</p>
<p>滇狐评价： 对于亚洲用户， 尤其是中国用户而言， 这是一个非常重要的插件！ 它能自动识别文本文件的编码， 给需要编辑各种不同编码的人员提供了极大方便。</p>
<h2>2.2 VIM LaTeX Suite</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://vim-latex.sourceforge.net/">官方站点</a></span><a name="idx0017"></a></p>
<p>官方描述：</p>
<p>Vim is undoubtedly one of the best editors ever made. LaTeX is an extremely powerful, intelligent typesetter. Vim-LaTeX aims at bringing together the best of both these worlds.</p>
<p>We attempt to provide a comprehensive set of tools to view, edit and compile LaTeX documents without needing to ever quit Vim. Together, they provide tools starting from macros to speed up editing LaTeX documents to compiling tex files to forward searching .dvi documents.</p>
<p>See the features page for a brief tour of the various features in LaTeX-suite. All these features can be tuned extensively using the included texrc file. The screenshots page shows you how a typical working session with LaTeX-suite might progress.</p>
<p>LaTeX-suite is made for Vim versions 6.0 and above. Installation instructions are given in the download page.</p>
<p>滇狐评价： 实在是非常非常非常非常好的一个插件！ 用 VIM 写 LaTeX 的朋友无论如何都要试一试， 不用 VIM 写 LaTeX 的朋友也要试一试， 说不定你会改变你的主意， 改用 VIM 写 LaTeX。</p>
<p>安 装注意事项： 如果使用 gvim 的话， 需要注意 scim 可能会和 LaTeX Suite 有冲突。 解决方法是要么把 scim 的 on the spot 功能去掉， 或者把 gtk_im_module 设为 scim。 (较新版本 scim 建议第二种方案)。</p>
<p>另外， 为了提高工作效率， 强烈建议配置 VIM 的<a href="http://edyfox.codecarver.org/html/vimlatex.html">LaTeX 正向、反向搜索</a><a name="idx0018"></a>功能。</p>
<h2>2.3 sketch</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=705">官方站点</a></span><a name="idx0019"></a></p>
<p>官方描述： Sketch.vim &#8211; Line drawing/painting using the mouse. Based on an idea by Morris.</p>
<p>滇狐评价： 很好玩， 虽然用到的时候不多， 但真一旦用到了， 还是会觉得这个东西很有用的。</p>
<p>安装注意事项： 建议在 .vimrc 中把 call ToggleSketch() 映射为命令，方便一些：</p>
<div class="code"><span style="color: rgb(165,42,42)"><strong>command</strong></span> <span style="color: rgb(165,42,42)"><strong>-</strong></span><span style="color: rgb(160,32,240)">nargs</span><span style="color: rgb(165,42,42)"><strong>=</strong></span><span style="color: rgb(46,139,87)"><strong>0</strong></span> ToggleSketch <span style="color: rgb(165,42,42)"><strong>call</strong></span> ToggleSketch()<br />
</div>
<h1>3 日常生活</h1>
<h2>3.1 Calendar</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=52">官方站点</a></span><a name="idx0020"></a></p>
<p>官方描述： This script create calender window. This don&#8217;t use the external program (cal).</p>
<p>滇狐评价： 安装完毕后使用 :Calendar 命令打开一个垂直的日历窗口， 使用 :CalendarH 命令打开水平的日历窗口。 应该还是比较有用的。</p>
<p>安装注意事项： 滇狐个人喜欢把日记的扩展名改成 .txt， 默认的是 .cal。 在 calendar.vim 里面查找替换一下就可以了。 另外， 可以在 .vimrc 里面修改日记所在的路径， 默认是 ~/diary。</p>
<div class="code"><span style="color: rgb(165,42,42)"><strong>let</strong></span> g:calendar_diary<span style="color: rgb(165,42,42)"><strong>=&lt;</strong></span>PATH<span style="color: rgb(165,42,42)"><strong>&gt;</strong></span><br />
</div>
<h2>3.2 vimtips</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=88">官方站点</a></span><a name="idx0021"></a></p>
<p>官方描述：</p>
<p>Whenever you start Vim (but no more than daily) the script will open a help window with a Vim tip. You must download the tips separately, from <span class="remote"><a class="remote" href="http://www.vim.org/tips/tip_download.php">官方站点</a></span><a name="idx0022"></a></p>
<p>After installation, you can get the next tip with</p>
<div class="code">:TipOfTheDay<br />
</div>
<p>滇狐评价： 每天看一条，慢慢就变成 VIM 牛了。</p>
<p>安装注意事项： 暂时没发现。</p>
<h2>3.3 vimball</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=1502">官方站点</a></span><a name="idx0023"></a></p>
<p>官方描述： The vimball plugin facilitates creating, extracting , and listing the contents of &#8220;vimball&#8221; archives (*.vba).</p>
<p>滇狐评价：</p>
<p>非常棒的一个插件， 专门用来安装其它插件的。 Vimball 格式的插件安装方便， 只需用 Vim 打开， 执行一下 <code>:so %</code> 即可， 无须用户自己满世界找插件的安装路径， 更无须整天想着更新 helptags。 滇狐已经决定将所有自己编写或修改的插件改为 Vimball 格式了， 而且目前有越来越多的插件使用 Vimball 的格式发布， 因此大家手头上一定要备有一份 Vimball 插件！ 虽然 Vim 内置了一份 Vimball 插件， 但版本太低， 许多 Vimball 无法通过它正常安装， 因此还是建议大家到 Vim 网站上下载一份最新版的 Vimball 插件。</p>
<h2>3.4 GetLatestScript</h2>
<p>下载地址： <span class="remote"><a class="remote" href="http://www.vim.org/scripts/script.php?script_id=642">官方站点</a></span><a name="idx0024"></a></p>
<p>官方描述： GetLatestVimScripts is a plugin that automates retrieval of the latest versions of the scripts that you yourself use!</p>
<p>滇狐评价：</p>
<p>非常有用的一个插件， 有了它， 滇狐就可以时刻使用上最新鲜的插件， 而不用不停地到 Vim 主页上去看插件的更新情况了。</p>
<p>安装注意事项：</p>
<p>安装完毕后， 创建文件 <code>~/.vim/GetLatest/GetLatestVimScripts.dat</code>， 按照这样的格式编写你的自动下载配置文件：</p>
<div class="code">ScriptID SourceID Filename<br />
--------------------------<br />
&lt;插件 id&gt; 0 [:AutoInstall:] &lt;插件文件名&gt;<br />
&lt;插件 id&gt; 0 [:AutoInstall:] &lt;插件文件名&gt;<br />
...<br />
</div>
<p>每行写一个插件的下载信息。 插件 id 就是在 Vim 主页下载插件时 URL 中的 <code>script_id=</code> 后面的那个数字。 第二个参数是前一次成功下载到的插件文件编号， 第一次使用的时候该参数写 0， 成功使用一次后会自动被修改为该插件最新版本的文件编号。 第三个参数是该插件下载成功后是否自动安装， 如果要自动安装的话就写上 <code>:AutoInstall:</code>。 滇狐不建议使用自动安装， 因此第三个参数建议省略不要写。 第四个参数是插件的名称， 一般和下载到的插件的文件名相同， 当然即使不同也不会造成太大影响， 这个参数主要用于防止某些插件自动将自己加入到这张列表， 并非用于指定插件的下载文件名， 更详细情况请参看该插件的文档。 以下是滇狐自己的 <code>GetLatestVimScripts.dat</code>， 供大家参考：</p>
<div class="code">ScriptID SourceID Filename<br />
--------------------------<br />
1440 7151 winmanager.vba.gz<br />
1708 7166 fencview.vim<br />
1066 6974 cecutil.vim<br />
273 7169 taglist.zip<br />
31 7218 a.vim<br />
1735 7223 echofunc.vim<br />
1520 5859 omnicppcomplete.zip<br />
861 7132 Viki.vba.gz<br />
1863 7157 tlib.vba.gz<br />
705 2667 sketch.zip<br />
42 7032 bufexplorer.zip<br />
1075 7079 netrw.vim<br />
1502 7078 vimball.vim<br />
642 7080 getscript.vim<br />
642 7080 GetLatestVimScripts.vim<br />
</div>
<p>编写好 <code>GetLatestVimScripts.dat</code> 后， 打开 Vim， 运行 <code>:GetLatestVimScripts</code>， 即可自动下载最新的插件。 插件下载后存放在 <code>~/.vim/GetLatest/</code> 中， 可以到那里找到后安装， 安装完毕后安装文件可以删除。</p>
<h2>3.5 <a href="http://edyfox.codecarver.org/html/viki.html">ViKi</a><a name="idx0025"></a></h2>
<p>你现在看到的这张网页就是使用 <a href="http://edyfox.codecarver.org/html/viki.html">ViKi</a><a name="idx0026"></a> 制作的。 也许它不漂亮， 但是很清秀， 而且添加信息非常方便。 是 <a href="http://edyfox.codecarver.org/html/viki.html">ViKi</a><a name="idx0027"></a> 将滇狐从繁重的 Html 编辑工作中解放出来， 使滇狐有足够的勇气重新开始制作个人主页。 为了更好地说明 <a href="http://edyfox.codecarver.org/html/viki.html">ViKi</a><a name="idx0028"></a>， 滇狐将该插件的使用单独放到<a href="http://edyfox.codecarver.org/html/viki.html">另一张网页</a><a name="idx0029"></a>中。</p>
</div>
<img src ="http://www.blogjava.net/conans/aggbug/209593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-20 23:07 <a href="http://www.blogjava.net/conans/articles/209593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> vim的设置参数</title><link>http://www.blogjava.net/conans/articles/209585.html</link><dc:creator>CONAN</dc:creator><author>CONAN</author><pubDate>Fri, 20 Jun 2008 15:01:00 GMT</pubDate><guid>http://www.blogjava.net/conans/articles/209585.html</guid><description><![CDATA[<div class="cnt">
<p>VIM 中可供用户定制的选项非常非常多， 作为初学者， 我们没有必要了解这么多东西。 下面， 滇狐简单列出了一些最常用的配置项， 大家可以根据自己的需要将这些内容添加到自己的 .vimrc 中。</p>
<h1>1 基本设置</h1>
<ul class="Itemize">
    <li class="Itemize asterisk">set nocp <br class="itempara" />
    该命令指定让 VIM 工作在不兼容模式下。 在 VIM 之前， 出现过一个非常流行的编辑器叫 vi。 VIM 许多操作与 vi 很相似， 但也有许多操作与 vi 是不一样的。 如果使用&#8220;:set cp&#8221;命令打开了兼容模式开关的话， VIM 将尽可能地模仿 vi 的操作模式。 <br class="itempara" />
    也许有许多人喜欢&#8220;最正统的 vi&#8221;的操作模式， 对于初学者来说， vi 里许多操作是比较不方便的。 <br class="itempara" />
    举一个例子， VIM 里允许在 Insert 模式下使用方向键移动光标， 而 vi 里在 Insert 模式下是不能移动光标的， 必须使用 ESC 退回到 Normal 模式下才行。 <br class="itempara" />
    再举一个例子， vi 里使用 u 命令可以撤消一次先前的操作， 再次按下 u 时， 将撤消&#8220;撤消&#8221;这个动作本身， 也就是我们常说的&#8220;重复&#8221;(redo)。 而 VIM 里可以使用 u 命令撤消多步操作， &#8220;重复&#8221;使用的快捷键是 Ctrl + R。 <br class="itempara" />
    使用兼容模式后， VIM 将放弃这些新的功能， 尽量模仿 vi 的各种操作方式。 只有在不兼容模式下， 才能更好地发挥 VIM 自身的特点。 Bram 爷爷强烈推荐大家使用 VIM 的不兼容模式， 滇狐也是这样推荐的。 请务必在你的 .vimrc 中的第一行写上： &#8220;set nocp&#8221;。
    <li class="Itemize asterisk">set ru <br class="itempara" />
    该命令打开 VIM 的状态栏标尺。 默认情况下， VIM 的状态栏标尺在屏幕底部， 它能即时显示当前光标所在位置在文件中的行号、列号， 以及对应的整个文件的百分比。 打开标尺可以给文件的编辑工作带来一定方便。
    <li class="Itemize asterisk">set hls <br class="itempara" />
    搜索时高亮显示被找到的文本。 该指令的功能在 vimtutor 中已经有过介绍， 这里就不多说了。 其实似乎许多人并不喜欢这个功能。
    <li class="Itemize asterisk">set is <br class="itempara" />
    搜索时在未完全输入完毕要检索的文本时就开始检索。 vimtutor 对该命令也有过介绍， 滇狐并不喜欢这个功能， 因此滇狐自己的配置文件里是没有这条命令的。 但是周围有朋友很喜欢这个， 因此滇狐还是将它列在这里。
    <li class="Itemize asterisk">syntax on <br class="itempara" />
    打开关键字上色。 进行程序设计的朋友应该都知道关键字上色是什么东西， 因此这里就不多说了。 不进行程序设计的朋友不妨也打开这个功能， 虽然不一定能够用得着， 但这个功能其实也是很好玩的。
    <li class="Itemize asterisk">set backspace=indent,eol,start <br class="itempara" />
    设想这样一个情况： 当前光标前面有若干字母， 我们按下 i 键进入了 Insert 模式， 然后输入了 3 个字母， 再按 5 下删除(Backspace)。 默认情况下， VIM 仅能删除我们新输入的 3 个字母， 然后喇叭&#8220;嘟嘟&#8221;响两声。 如果我们&#8220;set backspace=start&#8221;， 则可以在删除了新输入的 3 个字母之后， 继续向前删除原有的两个字符。 <br class="itempara" />
    再设想一个情况： 有若干行文字， 我们把光标移到中间某一行的行首， 按 i 键进入 Insert 模式， 然后按一下 Backspace。 默认情况下， 喇叭会&#8220;嘟&#8221;一声， 然后没有任何动静。 如果我们&#8220;set backspace=eol&#8221;， 则可以删除前一行行末的回车， 也就是说将两行拼接起来。 <br class="itempara" />
    当我们设置了自动缩进后， 如果前一行缩进了一定距离， 按下回车后， 下一行也会保持相同的缩进。 默认情况下， 我们不能在 Insert 模式下直接按 Backspace 删除行首的缩进。 如果我们&#8220;set backspace=indent&#8221;， 则可以开启这一项功能。 <br class="itempara" />
    上述三项功能， 你可以根据自己的需要， 选择其中一种或几种， 用逗号分隔各个选项。 建议把这三个选项都选上。
    <li class="Itemize asterisk">set whichwrap=b,s,&lt;,&gt;,[,] <br class="itempara" />
    默认情况下， 在 VIM 中当光标移到一行最左边的时候， 我们继续按左键， 光标不能回到上一行的最右边。 同样地， 光标到了一行最右边的时候， 我们不能通过继续按右跳到下一行的最左边。 但是， 通过设置 whichwrap 我们可以对一部分按键开启这项功能。 如果想对某一个或几个按键开启到头后自动折向下一行的功能， 可以把需要开启的键的代号写到 whichwrap 的参数列表中， 各个键之间使用逗号分隔。 以下是 whichwrap 支持的按键名称列表：
    <ul class="Itemize">
        <li class="Itemize asterisk">b <br class="itempara" />
        在 Normal 或 Visual 模式下按删除(Backspace)键。
        <li class="Itemize asterisk">s <br class="itempara" />
        在 Normal 或 Visual 模式下按空格键。
        <li class="Itemize asterisk">h <br class="itempara" />
        在 Normal 或 Visual 模式下按 h 键。
        <li class="Itemize asterisk">l <br class="itempara" />
        在 Normal 或 Visual 模式下按 l 键。
        <li class="Itemize asterisk">&lt; <br class="itempara" />
        在 Normal 或 Visual 模式下按左方向键。
        <li class="Itemize asterisk">&gt; <br class="itempara" />
        在 Normal 或 Visual 模式下按右方向键。
        <li class="Itemize asterisk">~ <br class="itempara" />
        在 Normal 模式下按 ~ 键(翻转当前字母大小写)。
        <li class="Itemize asterisk">[ <br class="itempara" />
        在 Insert 或 Replace 模式下按左方向键。
        <li class="Itemize asterisk">] <br class="itempara" />
        在 Insert 或 Replace 模式下按右方向键。 </li>
    </ul>
    <li class="Itemize asterisk">set encoding=cp936 <br class="itempara" />
    设置当前字符编码为简体中文。 这里还有一段能够自动判断文件的 encoding， 自动选择合适的编码的 .vimrc 代码， 感兴趣的话可以放到自己的配置文件中使用： </li>
</ul>
<div class="code">
<pre><font color="#0000ff">" Encoding settings</font><br />
<font color="#a52a2a"><strong>if</strong></font> <font color="#008b8b">has</font><font color="#a52a2a"><strong>(</strong></font><font color="#ff00ff">"multi_byte"</font><font color="#a52a2a"><strong>)</strong></font><br />
<font color="#0000ff">    " Set fileencoding priority</font><br />
<font color="#a52a2a"><strong>if</strong></font> <font color="#008b8b">getfsize</font><font color="#a52a2a"><strong>(</strong></font>expand<font color="#a52a2a"><strong>(</strong></font><font color="#ff00ff">"%"</font><font color="#a52a2a"><strong>))</strong></font> <font color="#a52a2a"><strong>&gt;</strong></font> <font color="#ff00ff">0</font><br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">fileencodings</font>=ucs-bom<font color="#a52a2a"><strong>,</strong></font>utf-8<font color="#a52a2a"><strong>,</strong></font>cp936<font color="#a52a2a"><strong>,</strong></font>big5<font color="#a52a2a"><strong>,</strong></font>euc-jp<font color="#a52a2a"><strong>,</strong></font>euc-kr<font color="#a52a2a"><strong>,</strong></font>latin1<br />
<font color="#a52a2a"><strong>else</strong></font><br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">fileencodings</font>=cp936<font color="#a52a2a"><strong>,</strong></font>big5<font color="#a52a2a"><strong>,</strong></font>euc-jp<font color="#a52a2a"><strong>,</strong></font>euc-kr<font color="#a52a2a"><strong>,</strong></font>latin1<br />
<font color="#a52a2a"><strong>endif</strong></font><br />
<br />
<font color="#0000ff">    " CJK environment detection and corresponding setting</font><br />
<font color="#a52a2a"><strong>if</strong></font> v:lang <font color="#a52a2a"><strong>=~</strong></font> <font color="#ff00ff">"^zh_CN"</font><br />
<font color="#0000ff">        " Use cp936 to support GBK, euc-cn == gb2312</font><br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">encoding</font>=cp936<br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">termencoding</font>=cp936<br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">fileencoding</font>=cp936<br />
<font color="#a52a2a"><strong>elseif</strong></font> v:lang <font color="#a52a2a"><strong>=~</strong></font> <font color="#ff00ff">"^zh_TW"</font><br />
<font color="#0000ff">        " cp950, big5 or euc-tw</font><br />
<font color="#0000ff">        " Are they equal to each other?</font><br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">encoding</font>=big5<br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">termencoding</font>=big5<br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">fileencoding</font>=big5<br />
<font color="#a52a2a"><strong>elseif</strong></font> v:lang <font color="#a52a2a"><strong>=~</strong></font> <font color="#ff00ff">"^ko"</font><br />
<font color="#0000ff">        " Copied from someone's dotfile, untested</font><br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">encoding</font>=euc-kr<br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">termencoding</font>=euc-kr<br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">fileencoding</font>=euc-kr<br />
<font color="#a52a2a"><strong>elseif</strong></font> v:lang <font color="#a52a2a"><strong>=~</strong></font> <font color="#ff00ff">"^ja_JP"</font><br />
<font color="#0000ff">        " Copied from someone's dotfile, unteste</font><br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">encoding</font>=euc-jp<br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">termencoding</font>=euc-jp<br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">fileencoding</font>=euc-jp<br />
<font color="#a52a2a"><strong>endif</strong></font><br />
<font color="#0000ff">    " Detect UTF-8 locale, and replace CJK setting if needed</font><br />
<font color="#a52a2a"><strong>if</strong></font> v:lang <font color="#a52a2a"><strong>=~</strong></font> <font color="#ff00ff">"utf8___FCKpd___0quot;</font> <font color="#a52a2a"><strong>||</strong></font> v:lang <font color="#a52a2a"><strong>=~</strong></font> <font color="#ff00ff">"UTF-8___FCKpd___0quot;</font><br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">encoding</font>=utf-8<br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">termencoding</font>=utf-8<br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">fileencoding</font>=utf-8<br />
<font color="#a52a2a"><strong>endif</strong></font><br />
<font color="#a52a2a"><strong>else</strong></font><br />
<font color="#a52a2a"><strong>echoerr</strong></font> <font color="#ff00ff">"Sorry, this version of (g)vim was not compiled with multi_byte"</font><br />
<font color="#a52a2a"><strong>endif</strong></font></pre>
</div>
<h1>2 文本编辑设置</h1>
<ul class="Itemize">
    <li class="Itemize asterisk">set sw=4 <br class="itempara" />
    自动缩进的时候， 缩进尺寸为 4 个空格。
    <li class="Itemize asterisk">set ts=4 <br class="itempara" />
    Tab 宽度为 4 个字符。
    <li class="Itemize asterisk">set et <br class="itempara" />
    编辑时将所有 Tab 替换为空格。 <br class="itempara" />
    该选项只在编辑时将 Tab 替换为空格， 如果打开一个已经存在的文件， 并不会将已有的 Tab 替换为空格。 如果希望进行这样的替换的话， 可以使用这条命令&#8220;:retab&#8221;。 </li>
</ul>
<h1>3 断行设置</h1>
<ul class="Itemize">
    <li class="Itemize asterisk">set lbr <br class="itempara" />
    不在单词中间断行。 设置了这个选项后， 如果一行文字非常长， 无法在一行内显示完的话， 它会在单词与单词间的空白处断开， 尽量不会把一个单词分成两截放在两个不同的行里。
    <li class="Itemize asterisk">set fo+=mB <br class="itempara" />
    打开断行模块对亚洲语言支持。 m 表示允许在两个汉字之间断行， 即使汉字之间没有出现空格。 B 表示将两行合并为一行的时候， 汉字与汉字之间不要补空格。 该命令支持的更多的选项请参看用户手册。 </li>
</ul>
<h1>4 C/C++ 编码设置</h1>
<ul class="Itemize">
    <li class="Itemize asterisk">set sm <br class="itempara" />
    显示括号配对情况。 打开这个选项后， 当输入后括号 (包括小括号、中括号、大括号) 的时候， 光标会跳回前括号片刻， 然后跳回来， 以此显示括号的配对情况。
    <li class="Itemize asterisk">set cin <br class="itempara" />
    打开 C/C++ 风格的自动缩进。 打开了自动缩进后， 在编码的时候我们可以使用&#8220;V&#8221;命令选中一段文本后， 按&#8220;=&#8221;将这段文本重新调整缩进格式， 在一定程度上起到代码美化的作用。 <br class="itempara" />
    另外， 打开了自动缩进后， 在使用 TERM 下的 vim 的时， 粘贴代码时常常会出现版式混乱的现象。 那是因为 TERM 并不知道你现在正在粘贴代码， 它直接&#8220;粘贴&#8221;动作向 vim 解释为键入， 因此 vim 便按照设置的自动缩进格式为你的代码调整了缩进。 不幸的是， 粘贴进去的代码中本身已经包含了缩进， 因此便出现了版式混乱的情况。 在 gvim 中就不会出现这个问题， 因为它能够知道你现在正在粘贴。 <br class="itempara" />
    知道了这个症状的来由， 解决方案也就显而易见了： 在粘贴的时候把所有自动缩进都关闭， 粘贴完毕之后再打开。 一个个手工关闭自动缩进未免过于繁琐， vim 为我们提供了一个很好用的命令， 只要输入&#8220;:set paste&#8221;， 就可以关闭所有自动缩进。 粘贴完毕后再输入&#8220;:set nopaste&#8221;就可以重新打开原有的自动缩进设置了。
    <li class="Itemize asterisk">set cino=:0g0t0(sus <br class="itempara" />
    设定 C/C++ 风格自动缩进的选项， 这里简要介绍一下这段代码里用到的选项的含义， cino 支持的选项还很多， 更多选项请看用户手册。 </li>
</ul>
<div class="code">
<pre><font color="#0000ff">// :0</font><br />
<font color="#0000ff">//</font><br />
<font color="#0000ff">// switch 语句之下的 case 语句缩进 0 个空格，也就是说不缩进，与 switch 块平</font><br />
<font color="#0000ff">// 齐，使用这样风格：</font><br />
<font color="#a52a2a"><strong>switch</strong></font> (x)<br />
{<br />
<font color="#a52a2a"><strong>case</strong></font> <font color="#ff00ff">1</font>:<br />
a = b;<br />
<font color="#a52a2a"><strong>break</strong></font>;<br />
<font color="#a52a2a"><strong>default</strong></font>:<br />
}<br />
<br />
<font color="#0000ff">// g0</font><br />
<font color="#0000ff">//</font><br />
<font color="#0000ff">// class、struct 等之下的访问权限控制语句，如 public、protected、private 等，</font><br />
<font color="#0000ff">// 相对 class、struct 等所在的块缩进 0 个空格，与 class 等块平齐，使用这样的</font><br />
<font color="#0000ff">// 风格：</font><br />
<font color="#2e8b57"><strong>class</strong></font> foo<br />
{<br />
<font color="#a52a2a"><strong>public</strong></font>:<br />
<font color="#2e8b57"><strong>int</strong></font> a;<br />
<font color="#a52a2a"><strong>private</strong></font>:<br />
<font color="#2e8b57"><strong>int</strong></font> b;<br />
};<br />
<br />
<font color="#0000ff">// t0</font><br />
<font color="#0000ff">//</font><br />
<font color="#0000ff">// 如果函数返回值与函数名不在同一行，则返回值缩进 0 个空格，也就是说不缩进，如</font><br />
<font color="#0000ff">// 下所示：</font><br />
<br />
<font color="#0000ff">// set cino=t4</font><br />
<font color="#2e8b57"><strong>int</strong></font><br />
func1()<br />
{<br />
}<br />
<br />
<font color="#0000ff">// set cino=t0</font><br />
<font color="#2e8b57"><strong>int</strong></font><br />
func()<br />
{<br />
}<br />
<br />
<font color="#0000ff">// (sus</font><br />
<font color="#0000ff">//</font><br />
<font color="#0000ff">// 当一对括号跨越多行时，其后的行缩进前面 sw 指定的距离，效果如下：</font><br />
<font color="#2e8b57"><strong>int</strong></font> a = (<font color="#ff00ff">1</font> + <font color="#ff00ff">2</font> + <font color="#ff00ff">3</font><br />
+ <font color="#ff00ff">4</font> + <font color="#ff00ff">5</font> + <font color="#ff00ff">6</font><br />
+ <font color="#ff00ff">7</font> + <font color="#ff00ff">8</font>) * <font color="#ff00ff">9</font>;</pre>
</div>
<ul class="Itemize">
    <li class="Itemize asterisk">set ai <br class="itempara" />
    打开普通文件类型的自动缩进。 该自动缩进不如 cindent 智能， 但它可以为你编辑非 C/C++ 文件提供一定帮助。 </li>
</ul>
<h1>5 其它设置</h1>
<ul class="Itemize">
    <li class="Itemize asterisk">set selectmode= <br class="itempara" />
    不使用 selectmode。
    <li class="Itemize asterisk">set mousemodel=popup <br class="itempara" />
    当右键单击窗口的时候， 弹出快捷菜单。
    <li class="Itemize asterisk">set keymodel= <br class="itempara" />
    不使用&#8220;Shift + 方向键&#8221;选择文本， &#8220;Shift + 方向键&#8221;代表向指定方向跳一个单词。 如果你喜欢这项功能的话， 可以使用&#8220;set keymodel=startsel,stopsel&#8221;打开它。
    <li class="Itemize asterisk">set selection=inclusive <br class="itempara" />
    指定在选择文本时， 光标所在位置也属于被选中的范围。 如果指定 selection=exclusive 的话， 可能会出现某些文本无法被选中的情况。
    <li class="Itemize asterisk">colo torte <br class="itempara" />
    选择 torte 配色方案。 VIM 里内置了许多关键字上色的配色方案， 另外你还可以到网上下载更多配色方案， 或是自己编写。 点击&#8220;编辑&#8221;&#8594;&#8220;调色板&#8221;， 就能列出所有支持的配色方案。 你可以把&#8220;调色板&#8221;子菜单剪下来， 然后慢慢选择， 挑出一个你最喜欢的配色方案来。 </li>
</ul>
<h1>6 图形界面设置</h1>
<ul class="Itemize">
    <li class="Itemize asterisk">set nowrap <br class="itempara" />
    指定不折行。 如果一行太长， 超过屏幕宽度， 则向右边延伸到屏幕外面。 如果使用图形界面的话， 指定不折行视觉效果会好得多。
    <li class="Itemize asterisk">set guioptions+=b <br class="itempara" />
    添加水平滚动条。 如果你指定了不折行， 那为窗口添加一个水平滚动条就非常有必要了。
    <li class="Itemize asterisk">set guifont=Courier\ 9 <br class="itempara" />
    设置图形界面下的字体。 你可以点&#8220;编辑&#8221;&#8594;&#8220;选择字体&#8221;， 然后在对话框中选出你喜欢的字体与字号， 选择完毕后， 先按几下 ESC 确认处在 Normal 模式下， 然后输入这条命令：&#8220;:set guifont?&#8221; 回车后 gvim 屏幕最下方会显示出你当前所用的字体的名称与字号。 将获得的结果写到配置文件里面就可以了， 需要注意一点， 如果字体名称里面含有空格的话， 在抄的时候需要在所有空格前面加一个斜杠。 </li>
</ul>
<h1>7 条件选择</h1>
<p>同一个配色方案， 在 gvim 下和字符界面的 vim 下效果大相径庭， 滇狐个人的习惯是， 在 gvim 下使用 torte 配色方案， 在 vim 下使用 ron 配色方案。 因此我们有必要针对 gvim 和 vim 进行不同的设置。</p>
<p>另外， 前面我们在 gvim 下不使用折行， 开启水平滚动条， 但在 vim 下， 是没有滚动条可用的， 因此还是有必要为 vim 保留自动折行。</p>
<p>条件选择设置的格式如下：</p>
<div class="code">
<pre><font color="#a52a2a"><strong>if</strong></font> <font color="#a52a2a"><strong>(</strong></font>has<font color="#a52a2a"><strong>(</strong></font><font color="#ff00ff">"gui_running"</font><font color="#a52a2a"><strong>))</strong></font><br />
<font color="#0000ff">" 图形界面下的设置</font><br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">nowrap</font><br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">guioptions</font>+=b<br />
<font color="#a52a2a"><strong>colo</strong></font> torte<br />
<font color="#a52a2a"><strong>else</strong></font><br />
<font color="#0000ff">" 字符界面下的设置</font><br />
<font color="#a52a2a"><strong>set</strong></font> <font color="#a020f0">wrap</font><br />
<font color="#a52a2a"><strong>colo</strong></font> ron<br />
<font color="#a52a2a"><strong>endif</strong></font></pre>
</div>
</div>
<img src ="http://www.blogjava.net/conans/aggbug/209585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/conans/" target="_blank">CONAN</a> 2008-06-20 23:01 <a href="http://www.blogjava.net/conans/articles/209585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>