<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>vim</title>
	<atom:link href="https://www.aitaocui.cn/tag/173102/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Wed, 23 Nov 2022 01:11:07 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>vim</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>vim(文本编辑器)</title>
		<link>https://www.aitaocui.cn/article/275035.html</link>
					<comments>https://www.aitaocui.cn/article/275035.html#respond</comments>
		
		<dc:creator><![CDATA[季惟生]]></dc:creator>
		<pubDate>Wed, 23 Nov 2022 01:11:07 +0000</pubDate>
				<category><![CDATA[百科]]></category>
		<category><![CDATA[vim]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=275035</guid>

					<description><![CDATA[Vim是一个类似于Vi的文本编辑器，不过在Vi的基础上增加了很多新的特性，Vim普遍被推崇为类Vi编辑器中最好的一个，事实上真正的劲敌来自Emacs的不同变体。1999年Emacs...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>Vim是一个类似于Vi的文本编辑器，不过在Vi的基础上增加了很多新的特性，Vim普遍被推崇为类Vi编辑器中最好的一个，事实上真正的劲敌来自Emacs的不同变体。1999年Emacs被选为Linuxworld文本编辑分类的优胜者，Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖，又将Emacs推至二线，总的来看，Vim和Emacs同样都是非常优秀的文本编辑器。Vim(和Vi)一个最大的优势在于它最常用的命令都是简单的字符，这比起使用复杂的控制组合键要快得多，而且也解放了手指的大量工作，学习使用这些命令的时间很快。</p>
</article>
<p><img decoding="async" src="https://www.aitaocui.cn/wp-content/uploads/2022/08/20220828_630beb2f5c313.jpg" /></p>
<article>
<h1>发展历程</h1>
<p>Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富，在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。</p>
<p>使用vim先知道其设计理念是很重要的,有助于记忆,举一反三;</p>
<p>1.vim的设计理念是组合;</p>
<p>命令组合: Vim强大的编辑能力中很大部分是来自于其普通模式命令。vim的设计理念是命令的组合。例如普通模式命令&quot;dd&quot;删除当前行，&quot;dj&quot;代表删除到下一行,原理是第一个&quot;d&quot;含义是删除,&quot;j&quot;键代表移动到下一行,组合后&quot;dj&quot;删除当前行和下一行。另外还可以指定命令重复次数，&quot;2dd&quot;（重复&quot;dd&quot;两次），和&quot;dj&quot;的效果是一样的。&quot;d^&quot;,&quot;^&quot;代表行首,故组合后含义是删除到光标开始到行首间的内容(不包含光标);&quot;dquot; quot;代表行尾,删除到行尾的内容(包含光标);用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令，并且能够灵活组合使用的话，能够比那些没有模式的编辑器更加高效的进行文本编辑。</p>
<p>模式间的组合: 在普通模式中，有很多方法可以进入插入模式。比较普通的方式是按&quot;a&quot;（append/追加）键或者&quot;i&quot;（insert/插入）键。</p>
<p>3. vim针对程序语言代码编写者;</p>
<p>写代码的时候手需要时刻保持在键盘上,随机定位代码、随机删除代码、移动代码、插入代码的操作大大多于阅读、翻页操作，中间卡顿一下效率就大大降低了;但对普通用户而言,顺序写、设置字体格式、翻页读多于随机写删除操作, 且每个动作之间本身就有很多的停顿,用其他UI编辑器(word,notePad++等)效率反而比VIM高效,使用vim进行操作只会徒增你的疑惑: vim为什么这么流行。(如果你不是一个代码开发者,估计你看完这段话也无法感同身受,建议先去学一门编程语言,新手推荐学C,java入门,做一道50行代码的课后习题，来感受下写代码的过程)</p>
<p>Bram Moolenaar 在 80 年代末购入他的Amiga计算机时，Amiga 上没有他最常用的编辑器vi。Bram 从一个开源的 vi 复制 Stevie 开始，开发了 Vim 的 1.0 版本。最初的目标只是完全复制 vi 的功能，那个时候的 Vim 是Vi IMitation（模拟）的简称。1991 年 Vim 1.14 版被 &quot;Fred Fish Disk #591&quot; ——Amiga 用的免费软体集收录了。1992 年 1.22 版本的 Vim 被移植到了 UNIX 和MS-DOS上。从那个时候开始，Vim 的全名就变成 Vi IMproved（改良）了。</p>
<p>在这之后，Vim 加入了不计其数的新功能。做为第一个里程碑的是 1994 年的 3.0 版本加入了多视窗编辑模式（分割视窗）。从那之后，同一荧幕可以显示的 Vim 编辑文件数可以不止一个了。1996 年发布的 Vim 4.0 是第一个利用图型接口（GUI）的版本。1998 年 5.0 版本的 Vim 加入了 highlight（语法高亮）功能。</p>
<p>2001 年的 Vim 6.0 版本加入了代码折叠、插件、多国语言支持、垂直分割视窗等功能。2006 年 5 月发布的 Vim 7.0 版更加入了拼字检查、上下文相关补完，标签页编辑等新功能。 2008 年 8 月发布的 Vim 7.2，该版本合并了 vim 7.1 以来的所有修正补丁，并且加入了脚本的浮点数支持，2010年08月15日，历时两年的时间，vim又发布了vim 7.3这个版本，这个版本修复了前面版本的一些bug，以及添加了一些新的特征，这个版本比前面几个版本来的要更加优秀。</p>
<h1>主要功能</h1>
<p>根据设定可以和原始vi完全兼容</p>
<p>多缓冲编辑</p>
<p>任意个数的分割窗口（横，竖）</p>
<p>具备列表和字典功能的脚本语言</p>
<p>可以在脚本中调用 Perl, Ruby, Python, Tcl, MzScheme ，C，C++</p>
<p>单词缩写功能</p>
<p>动态单词补完</p>
<p>多次撤销和重做</p>
<p>对应400种以上文本文件的语法高亮</p>
<p>C/C++, Perl, Java, Ruby, Python 等40种以上语言的自动缩排</p>
<p>利用ctags的标签中跳转</p>
<p>崩溃后文件恢复</p>
<p>光标位置和打开的缓冲状态的保存 复原（session功能）</p>
<p>可以对两个文件进行差分，同步功能的diff模式</p>
<p>远程文件编辑 。</p>
<h1>移动效率</h1>
<p>高效率移动</p>
<p>1、在插入模式之外</p>
<p>基本上来说，你应该尽可能少的呆在插入模式里面，因为在插入模式里面 VIM 就像一个“哑巴”编辑器一样。很多新手都会一直呆在插入模式里面，因为这样易于使用。但 VIM 的强大之处在于他的命令模式！你会发现，在你越来越了解 VIM 之后，你就会花越来越少的时间使用插入模式了。</p>
<p>2、使用 h、j、k、l</p>
<p>使用 VIM 高效率编辑的第一步，就是放弃使用箭头键。使用 VIM，你就不用频繁的在箭头键和字母键之间移来移去了，这会节省你很多时间。当你在命令模式时，你可以用 h、j、k、l 来分别实现左、下、上、右箭头的功能。一开始可能需要适应一下，但一旦习惯这种方式，你就会发现这样操作的高效之处了。</p>
<p>在你编辑你的电子邮件或者其他有段落的文本时，你可能会发现使用方向键和你预期的效果不一样，有时候可能会一次跳过了很多行。这是因为你的段落在 VIM 看来是一个大的长长的行。这时你可以在按 h、j、k 或者 l 之前键入一个 g，这样 VIM 就会按屏幕上面的行如你所愿的移动了。</p>
<p>3、在当前行里面有效的移动光标</p>
</p>
<div></div>
<p>很多编辑器只提供了简单的命令来控制光标的移动（比如左、上、右、下、到行首/尾等）。VIM 则提供了很多强大的命令来满足你控制光标的欲望。当光标从一点移动到另外一点，在这两点之间的文本（包括这两个点）称作被“跨过”，这里的命令也被称作是 motion。（简单说明一下，后面会用到这个重要的概念）</p>
<p>4、常用到的一些命令（motion）</p>
<p>fx：移动光标到当前行的下一个 x 处。很明显，x 可以是任意一个字母，而且你可以使用；来重复你的上一个 f 命令。</p>
<p>tx：和上面的命令类似，但是是移动到 x 的左边一个位置。（这真的很有用）</p>
<p>Fx：和 fx 类似，不过是往回找。使用 ， 来重复上一个F命令。</p>
<p>Tx：和 tx 类似，不过是往回移动到 x 的右边一个位置。</p>
<p>b：光标往前移动一个词</p>
<p>w：光标往后移动一个词</p>
<p>0：移动光标到当前行首（是数字0）</p>
<p>^：移动光标到当前行的第一个字母位置</p>
<p>$：移动光标到行尾</p>
<p>)：移动光标到下一个句子</p>
<p>( ：移动光标到上一个句子</p>
<p>5、在整个文件里面有效移动光标</p>
<p>VIM 有很多命令，可以用来到达文件里面你想到达的地方。下面是一些在文件里面移动的命令：</p>
<p>：向下移动一屏</p>
<p>：向下移动半屏</p>
<p>：向上移动一屏</p>
<p>：向上移动半屏</p>
<p>G：到文件尾</p>
<p>numG：移动光标到指定的行（num）。（比如 10G 就是到第 10 行）</p>
<p>gg：到文件首</p>
<p>H：移动光标到屏幕上面</p>
<p>M：移动光标到屏幕中间</p>
<p>L：移动光标到屏幕下面</p>
<p>*：读取光标处的字符串，并且移动光标到它再次出现的地方。</p>
<p>#：和上面的类似，但是是往反方向寻找。</p>
<p>/text：从当前光标处开始搜索字符串 text，并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话，按 n移动到下个 text 处，N 移动到上一个 text 处 。</p>
<p>？text：和上面类似，但是是反方向。</p>
<p>m{a-z}：在当前光标的位置标记一个书签，名字为 a-z 的单个字母。书签名只能是小写字母。你看不见书签的存在，但它确实已经在那里了。</p>
<p>`a：到书签 a 处。注意这个不是单引号，它一般位于大部分键盘的 1 的左边。</p>
<p>`.：到你上次编辑文件的地方。这个命令很有用，而且你不用自己去标记它。</p>
<p>%：在成对的括号等符号间移动，比如成对的 [ ] ， { }， ( ) 之间。将光标放到任意符号上，然后通过 % 来移动到和这个符号匹配的符号上，% 还可以正确的识别括号的嵌套层数，总是移动到真正匹配的位置上。因此这个命令在编辑程序代码的时候非常有用，可以让你方便的在一段代码的头尾间移动。</p>
<h1>高效输入</h1>
<p>1、使用关键词自动完成</p>
<p>VIM 有一个非常漂亮的关键词自动完成系统。这表示，你可以输入一个长词的一部分，然后按一下某个键，然后 VIM 就替你完成了这个长词的输入了。举个例子：你有一个变量名为 iAmALongAndAwkwardVarName 在你写的代码的某个地方。也许你不想每回都自己一个一个字母的去输入它。</p>
<p>使用关键词自动完成功能，你只需要输入开始几个字母（比如 iAmAL），然后按 （按住 Ctrl，再按 N）或者 。如果 VIM 没有给出你想要的词，继续按，直到你满意为止，VIM 会一直循环它找到的匹配的字符串。</p>
<p>2、聪明的进入插入模式</p>
<p>很多新手进入插入模式都只是用 i。这样当然可以进入插入模式，但通常不是那么合适，因为 VIM 提供了很多进入插入模式的命令。下面是最常用的一些：</p>
<p>i：在当前字符的左边插入</p>
<p>I：在当前行首插入</p>
<p>a：在当前字符的右边插入</p>
<p>A：在当前行尾插入</p>
<p>o：在当前行下面插入一个新行</p>
<p>O：在当前行上面插入一个新行</p>
<p>c{motion}：删除 motion 命令跨过的字符，并且进入插入模式。比如：c$，这将会删除从光标位置到行尾的字符并且进入插入模式。ct！，这会删除从光标位置到下一个叹号（但不包括），然后进入插入模式。被删除的字符被存在了剪贴板里面，并且可以再粘贴出来。</p>
<p>d{motion}：和上面差不多，但是不进入插入模式。</p>
<p>3、有效的移动大段的文本</p>
<p>使用可视选择（visual selections）和合适的选择模式</p>
<p>不像最初的 VI，VIM 允许你高亮（选择）一些文本，并且进行操作。这里有三种可视选择模式：</p>
<p>v：按字符选择。经常使用的模式，所以亲自尝试一下它。</p>
<p>V：按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。</p>
<p>：按块选择。非常强大，只在很少的编辑器中才有这样的功能。你可以选择一个矩形块，并且在这个矩形里面的文本会被高亮。</p>
<p>在选择模式的时候使用上面所述的方向键和命令（motion）。比如，vwww，会高亮光标前面的三个词。Vjj 将会高亮当前行以及下面两行。</p>
<p>4、在可视选择模式下剪切和拷贝</p>
<p>一旦你高亮了选区，你或许想进行一些操作：</p>
<p>d：剪贴选择的内容到剪贴板。</p>
<p>y：拷贝选择的内容到剪贴板。</p>
<p>c：剪贴选择的内容到剪贴板并且进入插入模式。</p>
<p>在非可视选择模式下剪切和拷贝</p>
<p>如果你很清楚的知道你想拷贝或者剪切什么，那你根本就不需要进入可视选择模式。这样也会节省时间：</p>
<p>d{motion}：剪切 motion 命令跨过的字符到剪贴板。比如，dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。</p>
<p>y{motion}：和上面类似，不过是拷贝。</p>
<div></div>
<p>c{motion}：和 d{motion} 类似，不过最后进入插入模式。</p>
<p>dd：剪切当前行。</p>
<p>yy：拷贝当前行。</p>
<p>cc：剪切当前行并且进入插入模式。</p>
<p>D：剪切从光标位置到行尾到剪贴板。</p>
<p>Y：拷贝当前行。</p>
<p>C：和 D 类似，最后进入插入模式。</p>
<p>x：剪切当前字符到剪贴板。</p>
<p>s：和x类似，不过最后进入插入模式。</p>
<p>5、粘贴</p>
<p>粘贴很简单，按 p。</p>
<p>6、使用多重剪贴板</p>
<p>很多编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM 里面被称为寄存器（Registers）。你可以列出当前定义的所有寄存器名和它们的内容，命令为“：reg”。最好使用小写字母来作为寄存器的名称，因为大写的有些被 VIM 占用了。</p>
<p>使用寄存器的命令为双引号 “。</p>
<p>比如：要拷贝当前行到寄存器 k。你应该按 “kyy。（你也可以使用 V”ky。为什么这样也可以呢？）行应该已经存在了寄存器 k 里面直到你又拷贝了一些东西进入寄存器 k。你可以使用命令 “kp 来粘贴寄存器 k 里面的内容到你想要的位置。</p>
<p>7、避免重复</p>
<p>令人惊奇的 . 命令</p>
<p>在 VI 里面，输入 . (小数点符号），将会重复你输入的上一个命令。比如，你上个命令为“dw”（删除一个词），VI 将会接着再删除一个词。</p>
<p>8、使用数字</p>
<p>使用数字也是 VIM 强大的而且很节省时间的重要特性之一。在很多 VIM 的命令之前都可以使用一个数字，这个数字将会告诉 VIM 这个命令需要执行几次。比如：</p>
<p>3j 将会把光标向下移动三行。</p>
<p>10dd 将会删除十行。</p>
<p>y3t″ 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。</p>
<p>数字是扩展 motion 命令作用域非常有效的方法。</p>
<h1>高效读代码</h1>
<p>建议在vim上安装Taglist+cscope+ctags插件有利于高效读代码，有利于学习！</p>
<p>1、安装</p>
<p>对于小编我来说我使用的是Ubuntu，安装软件一般使用的命令是apt-get install ***!</p>
<p>对于vim+Taglist+cscope+ctags组合编辑器的创建，vim , cscope , ctags安装起来比较方便使用上述命令即可安装！</p>
<p>（对于不同的Linux发行版本安装软件的命令不太一样，需要根据自己的安装版稍微修改，比如说Fedora即使用yum命令安装）</p>
<p>对于Taglist使用这个方法安装不了,我们需要先下载，然后安装完成：</p>
<p>首先上网下载Taglist插件，下载完成后解压，再将文件下的taglist.vim使用cp命令拷贝到HOME/.vim/plugin文件夹下（cp -r taglist.vim ~/.vim/plugin)</p>
<p>2、vim的配置</p>
<p>vim是一个非常好用的编辑工具,以下介绍几个常用的底行模式命令：</p>
<p>（1）. 设置缩进</p>
<p>:set smartindent // 设置缩进</p>
<p>:set smartindent shiftwidth=4 // C语言自动缩进，缩进值为4个字符宽度</p>
<p>（2）. 显示光标行列信息</p>
<p>:set ruler // 显示光标信息（右下角）</p>
<p>（3）. 查看制表符</p>
<p>:set list // 显示制表符，以^符号显示制表符的位置</p>
<p>（4）. 查看行数信息</p>
<p>:set number //显示行号（左边）</p>
<p>（5）. 关键字高亮</p>
<p>:syntax on //关键字高亮</p>
<p>（6）. 多文件编辑 ，在编写程序时有可能需要同时编辑多个文件，在这种情况下，需要如下设置</p>
<p>: split two.c // 多文件编辑</p>
<p>当然，如果不嫌麻烦，可以在每次打开Vim时 输入如上命令，如我经常用的是:set number :set ruler :syntax on :set smartindent 命令，如果将平时在底行模式下输入的命令直接写入配置文件，则以后使用Vim时不用再次输入这些命令。</p>
<p>首先，试着在Vi的底行模式下输入如下命令，如果不支持的话，去下载一个Vim的全版本，sudo apt-get install vim-full。</p>
<p>以下是修改配置文件的方法：</p>
<p>（1）. 找到Vimrc文件。</p>
<p>（2） 查看文件的权限：</p>
<p>ls -l vimrc</p>
<p>shisir@shisir-desktop:/usr/share/vim$ cd /etc/vim</p>
<p>shisir@shisir-desktop:/etc/vim$ ls</p>
<p>gvimrc vimrc vimrc.tiny</p>
<p>shisir@shisir-desktop:/etc/vim$ ls -l vimrc</p>
<p>-r&#8211;r&#8211;r&#8211; 1 root root 2492 2009-04-10 08:08 vimrc</p>
<p>（3） 如果没有写权限的话，修改权限，使我们可以修改该配置文件</p>
<p>sudo chmod a+w vimrc</p>
<p>（4）根据个人需要将上述命令写入配置文件</p>
<p>比如，我个人的设置是： syntax on , set ruler ,set number , set smartindent shiftwidth=4</p>
<p>下面贴上我的vimrc文件的配置信息：</p>
<p>&quot;显示行号</p>
<p>set number</p>
<p>&quot;检测文件的类型</p>
<p>filetype on</p>
<p>&quot;记录历史的行数</p>
<p>set history=1000</p>
<p>&quot;自动对齐</p>
<p>set autoindent</p>
<p>set cindent</p>
<p>&quot;智能选择对齐方式</p>
<p>set smartindent</p>
<p>&quot;tab为4个空格</p>
<p>set tabstop=4</p>
<p>&quot;当前行之间交错时使用4个空格</p>
<p>set shiftwidth=4</p>
<p>&quot;设置匹配模式，输入左括号会出现右括号</p>
<p>set showmatch</p>
<p>&quot;编辑时显示光标状态</p>
<p>set ruler</p>
<p>&quot;快速匹配</p>
<p>set incsearch</p>
<p>&quot;修改文件自动备份</p>
<p>if has(&quot;vms&quot;)</p>
<p>set nobackup</p>
<p>else</p>
<p>set backup</p>
<p>endif</p>
<p>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;设置开启ctags&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</p>
<p>settags=/home/zhouyl/linux-3.4.7/tags;&quot;这边设置的是你使用ctags -R的目录，后面有介绍！你根据自己的使用修改这个路径</p>
<p>set autochdir</p>
<p>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;Taglist设置&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</p>
<p>&quot;&quot;let Tlist_Auto_Open = 1</p>
<p>let Tlist_Ctags_Cmd = &#x27;/usr/bin/ctags&#x27;</p>
<p>let Tlist_Show_One_File = 1</p>
<p>let Tlist_Exit_OnlyWindow = 1</p>
<p>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;cscope设置&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</p>
<p>set cscopequickfix=s-,c-,d-,i-,t-,e-</p>
<p>if has(&quot;cscope&quot;)</p>
<p>set csprg=/usr/bin/cscope</p>
<p>set csto=1</p>
<p>set cst</p>
<p>set nocsverb</p>
<p>&quot; add any database in current directory</p>
<p>if filereadable(&quot;cscope.out&quot;)</p>
<p>cs add cscope.out</p>
<p>endif</p>
<p>set csverb</p>
<p>endif</p>
<p>因为我的文档中的原配置文件已经有了语法高亮：</p>
<p>&quot; Vim5 and later versions support syntax highlighting. Uncommenting the next</p>
<p>&quot; line enables syntax highlighting by default.</p>
<p>if has(&quot;syntax&quot;)</p>
<p>syntax on</p>
<p>endif</p>
<p>所以我就没写了，您如果vimrc文件里面没有此项建议自己加上syntax on 设置语法高亮</p>
<p>PS：在配置文件中&quot;符号后的内容是注释，而且在配置文件中是不需要添加符号的 ，这里关于cscope、ctags和Taglist的设置可以先写上，后面将对这三个插件有介绍。好了，去开一个Vim，编辑一个程序看看，是不是感觉很不一般呢？</p>
<p>好了，下面顺便演示下，智能补全的用法，我分四种情况：1、前面申明过的变量或者函数名的补全；2、结构体等自建结构的补全；3、STL等标准库的补全；4、括号、引号等自动匹配补全。</p>
<p>对于第一种情况，写程序的过程中，直接用CTRL+p即可选择，对于第二种情况，如果想申明了结构体T，想在输入T.时弹出成员供选择，只需在用之前按一下：CTRL+F12</p>
<p>3、Taglist插件的使用</p>
<p>TagList插件,是一款基于ctags,在vim代码窗口旁以分割窗口形式(如上图所示）显示当前的代码结构概览,增加代码浏览的便利程度的vim插件.</p>
<p>在Vim中加载代码文件后，可以使用以下命令控制taglist</p>
<p>:TlistOpen 打开并将输入焦点至于标签列表窗口,效果如上图所示</p>
<p>:TlistClose 关闭标签列表窗口</p>
<p>:TlistToggle 切换标签列表窗口状态(打开←→关闭)，标签列表窗口是否获得焦点取决于其他配置</p>
<p>ctl-w + w 或ctl-w + 方向键 窗口切换（taglist本质上是一个vim分隔窗口，因此可以使用ctl-w系列快捷键对窗口进行切换操作)</p>
<p>在Taglist窗口主要有以下操作</p>
<p>按F1:打开帮助</p>
<p>回车键:跳到光标所在的标记的定义处(如将光标移到main函数,按回车键)</p>
<p>o:新建一个窗口,跳到标记定义处</p>
<p>p:预览标记定义(仍然在taglist窗口)</p>
<p>空格:显示标记的原型(如函数原型)</p>
<p>u:更新标记列表(比如源文件新增了一个函数,并在保存后,可在taglist窗口按u)</p>
<p>s:选择排序字段(暂时我也不知道什么意思)</p>
<p>d:删除光标所在的taglist文件(如用vi打开了两个文件f1.c,f2.c可以删除f1.c的标记)</p>
<p>x:n放大/缩小taglist窗口</p>
<p>+:展开(指标记)</p>
<p>-:折叠</p>
<p>*:全部展开</p>
<p>=:全部折叠</p>
<p>[[:将光标移到前一个文件的起点</p>
<p>]]:将光标移到后一个文件的起点</p>
<p>q:退出taglist窗口</p>
<p>F1:关闭帮助</p>
<p>4、ctags插件的使用</p>
<p>VIM简单易用，大家只要看看VIM自带的vitutor，大约只要20分钟就能掌握VIM的用法,上面也简单介绍了点vim的用法。但是对于Linux下的C/C++的 程序员，使用VIM+Ctags的组合来写程序也许是最佳的选择。^_^</p>
<p>尽管ctags也可以支持其它编辑器，但是它正式支持的只有VIM。并且VIM中已经默认安装了Ctags，它可以帮助程序员很容易地浏览源代码。</p>
<p>熟练的使用ctags仅需记住下面七条命令：（很简单吧，呵呵）</p>
<p>1． $ ctags–R * ($ 为Linux系统Shell提示符)</p>
<p>2. $ vi –t tag (请把tag替换为您欲查找的变量或函数名)</p>
<p>3． ：ts (ts 助记字：tagslist, “:”开头的命令为VI中命令行模式命令)</p>
<p>4． ：tp (tp 助记字：tagspreview)&#8212;此命令不常用，可以不用记</p>
<p>5． ：tn (tn 助记字：tagsnext) &#8212;此命令不常用，可以不用记</p>
<p>6． Ctrl + ] 跳到光标所在函数或者结构体的定义处</p>
<p>7． Ctrl + T 返回查找或跳转</p>
<p>下面我们逐条的解释上面的命令：</p>
<p>“$ ctags–R *”：“-R”表示递归创建，也就包括源代码根目录（当前目录）下的所有子目录。“*”表示所有文件。这条命令会在当前目录下产生一个“tags”文件， 当用户在当前目录中运行vi时，会自动载入此tags文件。Tags文件中包括这些对象的列表：</p>
<p>用#define定义的宏</p>
<p>枚举型变量的值</p>
<p>函数的定义、原型和声明</p>
<p>名字空间（namespace）</p>
<p>类型定义（typedefs）</p>
<p>变量（包括定义和声明）</p>
<p>类（class）、结构（struct）、枚举类型（enum）和联合（union）</p>
<p>类、结构和联合中成员变量或函数</p>
<p>VIM用这个“tags”文件来定位上面这些做了标记的对象。</p>
<p>剩下的命令就是定位这些对象的方法：</p>
<p>“$ vi –t tag” ：在运行vim的时候加上“-t”参数，例如：</p>
<p>[/usr/src]$ vim -t main</p>
<p>这个命令将打开定义“main”（变量或函数或其它）的文件，并把光标定位到这一行。如果这个变量或函数有多处定义，在VI命令行模式“：ts”命令就能 列出一个列表供用户选择。 “：tp”为上一个tag标记文件，“：tn”为下一个tag标记文件。当然，若当前tags文件中用户所查找的变量或函数名只有一 个，“:tp,:tn”命令不可用。 ：（</p>
<p>最方便的方法是把光标移到变量名或函数名上，然后按下“ Ctrl+] ”，这样就能直接跳到这个变量或函数定义的源文件中，并把光标定位到这一行。用 “ Ctrl+T ”可以退回原来的地方。即使用户使用了N次“Ctrl+]”查找了N个变量，按N次“Ctrl+t”也能回到最初打开的文件，它会按原路返 回 。 ^_^</p>
<p>注意：运行vim的时候，必须在“tags”文件所在的目录下运行。否则，运行vim的时候还要用“:settags=”命令设定“tags”文件的路 径，这样vim才能找到“tags”文件。在完成编码时，可以手工删掉tags文件（帚把不到，灰尘不会自己跑掉^_^）。</p>
<p>5、cscope插件的使用</p>
<p>Cscope是一个类似 ctags的工具。 你可以把它想作是超过频的 ctags，因为它功能比ctags 强大很多。 在 Vim 里，通过 cscope 查询结果来跳转就象跳转到其他的标签完全一样；它被保存在标签栈里。这样你就可以象使用 ctags一样在函数等等之间便捷的跳转。</p>
<p>在VIM中使用cscope非常简单，首先调用“cscope add”命令添加一个cscope数据库，然后就可以调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能，如下：例如，我们想在代码中查找调用work()函数的函数，我们可以输入：“:cs find c work”，回车后发现没有找到匹配的功能，可能并没有函数调用work()。我们再输入“:cs find s work”，查找这个符号出现的位置，vim列出了这个符号出现的所有位置。我们还可以进行字符串查找，它会双引号或单引号括起来的内容中查找。还可以输入一个正则表达式，这类似于egrep程序的功能。</p>
<p>在源代码目录下打开vim。要使用cscope查找就必须加载cscope.out文件.在vim命令行下执行：(按照上述方法配置好的vimrc中有这一步）</p>
<p>:cs add cscope.out</p>
<p>在vim命令行下执行：</p>
<p>:cs help</p>
<p>cscope commands:</p>
<p>add : Add a new database (Usage: add file|dir [pre-path] [flags])</p>
<p>find : Query for a pattern (Usage: find c|d|e|f|g|i|s|t name)</p>
<p>c: Find functions calling this function //查找调用本函数的函数</p>
<p>d: Find functions called by this function //查找本函数调用的函数</p>
<p>e: Find this egrep pattern //查找egrep模式，相当于egrep功能，但查找速度快多了</p>
<p>f: Find this file //查找并打开文件，类似vim的find功能</p>
<p>g: Find this definition //查找函数、宏、枚举等定义的位置，类似ctags的功能</p>
<p>i: Find files #including this file //查找包含本文件的文件</p>
<p>s: Find this C symbol //查找C语言符号，即查找函数名、宏、枚举值等出现的地方</p>
<p>t: Find assignments to //查找指定的字符串</p>
<p>help : Show this message (Usage: help)</p>
<p>kill : Kill a connection (Usage: kill #)</p>
<p>reset: Reinit all connections (Usage: reset)</p>
<p>show : Show connections (Usage: show)</p>
<p>例如：使用cscope查找do_fork函数的定义：</p>
<p>在vim命令行下执行： :cs f g do_fork</p>
<h1>版本信息</h1>
<p>Emacs和Vim二款神一样的代码编辑器</p>
<p>今天有一位从事程序猿N年的哥们在QQ上给本小编吐槽，“你个啥子网站，连个Emacs这样神一样的编辑器都没有，你弄些啥嘛”，俺沉默了10秒外加5秒的发呆，Emacs？神一样的编辑器？这种说法让UltraEdit和Editplus情以何堪，还有那个号称程序员们最喜爱的编辑器Notepad++听完一定会痛哭流泪。赶快找度娘，问问是否如此，在看到一篇文章“Emacs和Vim，神的编辑器和编辑器之神”之后，让我觉得有一种不发布Emacs和Vim简直就是犯罪的冲动，于是急冲冲发布Emacs和Vim这二款编辑器神器，让那些未睹这二款编辑器芳容的同学一睹神的风采。</p>
<p>要详细介绍这二款编辑器真是难于找到合适的文字，“古老、经典、强大”等一切词语相对于Jiqing Wu这位作者博客所写都显得那么的苍白无力，现引用些有关描述这二款编辑器的原话，你一定会为Emacs和Vim特立独行的魅力所着迷。</p>
<p>●Windows下用UltraEdit和Editplus的人质问：它们到底比UltraEdit和Editplus好在哪里鳚我说：不可同日而语。</p>
<p>连UltraEdit和EditPlus都没用过的同学问：它们就相当于Linux上的 Notepad吧鳚我说：请你从我的眼前消失。</p>
<p>●Linux和开源软件渐渐流行起来，人们才发现：可扩展性才能给软件强大的生命。在MS的VS横行的今天，Eclipse为什么被评为最好的IDE鳚就是因为它在IDE中最具可扩展性。在IE几乎一统天下的时候，为什么Firefox能夺走越来越多的用户，也是因为它的可扩展性。提供了良好的扩展接口，用户自然会写出各种各样的插件，来满足用户自己形形色色的要求。这样，软件在用户的推动下自然变得强大了，Emacs和Vim没有被时代淘汰，反而越发强大，也正是因为在数不清的编辑器中，他们具有无可匹敌的可扩展性。</p>
<p>●有这么牛逼的扩展语言，注定Emacs向着无所不能的方向发展。渐渐地，人们用Emacs不再限于写程序，写文档，而且在Emacs里管理文件系统，运行终端，收邮件，上网，听音乐……，真是一发不可收拾。甚至，有人用Emacs控制咖啡机煮咖啡。</p>
<p>●这种大而全的扩展，背离了“一个程序只做一件事并做好它”的 Unix哲学，被Unix的忠诚用户所诟病。可是真的背离了吗鳚 Emacs说过自己是一个编辑器吗鳚</p>
<p>●正是因为Emacs的无敌的可扩展性，人们才分不清Emacs到底是不是一个编辑器了。但，就是有人喜欢这种All-in-One的哲学，喜欢在Emacs中完成每件事。所以才会有人写《生活在Emacs中》，所以， Emacs才会成为一种信仰。</p>
<p>●Linux之父Linus多年来用的是一款 MicroEmacs，它比GNU Emacs或XEmacs少许多功能，但Linus就是用它在维护Linux。 微软的大牛Don Box，Com之父，一直用Emacs，他说谁也不能夺走他的编辑器。他还在网上放了一段他用Emacs写C#程序的视频。</p>
<p>●编程大师们的选择，也是Emacs和Vim被追捧为神器的原因之一。</p>
<p>●可扩展性让你倾注了灵魂</p>
<p>●独特的操作方式让你中了毒</p>
<p>●黑客的编辑器，一剑在手，夫复何求</p>
<p>●Emacs和Vim神器引发的圣战争斗不断</p>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/275035.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
