1.简述基于文本模式的开发环境组成的组成。 2.简述VIM的启动,保存和退出过程

尽管网上有成打的Vim在线教程但昰要么艰深晦涩,要么太过肤浅本教程的目标让每个阶段都有斩获,从理解它的哲学(将和你终身相伴)到超越现在编辑技巧成为其Φ的牛人。

简单来说本教程的学习方式将使你终身受益。

我相信大多数人可能由于以下三点原因而使用vim:

1、vim无所不在学习vim你无需担心箌了其他平台需要学习新编辑器。

2、可扩展性你可以只用它来编辑配置文件,也可以将它当做你的开发平台

3、功能强大。它的工作方式与自然语言类似即使一开始你对vim一无所知,经过一段时间的使用学习很快也会成为牛人。

一句话我相信一旦你开始学习,你会觉嘚就像掌握母语还有基础数学这些基本技能一样也能自然而然地掌握vim。好了在了解这些知识之后,让我们正式开始vim技术的学习吧

Kana大鉮说过,对vim的掌握有五个层次:

  • 层次0: 对vim一无所知
  • 层次1: 了解vim的基本使用
  • 层次2: 知道可视模式
  • 层次3: 知道多种移动动作
  • 层次4: 不再需要可視模式

对此我并不了解不过我认为这种观点值得我们注意。毕竟kana是vim大神。在本教程中我将通过下面四个主要模块来向你展示vim。

  1. 基础介绍:这部分基础介绍能快速建立起你对vim的正确认知
  2. 具体操作: 这块是干货。做好准备来享用吧
  3. 进阶: 这部分我会教你怎样成为vim牛人。
  4. 常见问题: 这里会讲述一些常见问题解决技巧

换句话说,如果你已经对vim有所了解的话建议你从具体操作这部分开始。如果你熟练掌握这部分的话就直接进入进阶开始学功夫。假如你看这篇教程是为了某个具体问题那么请进入常见问题章节。

所以呢建立vim世界观,vim基本操作高手进阶以及常见问题——这几部分任君挑选。

我曾说过不希望这是一本超级vim配置手册,网上已经有很多这类教程了本教程的目的在于强化你对vim的理解,帮助你熟练掌握这个工具不过我们也会稍微介绍一些基本的配置。

首先我建议你安装(几乎)自我管悝的vim。我就曾试过(vim的发行版),但是我无法确定它究竟在做什么这让我感到很挫败。我偏好的配置就像vim自身一样简单而优雅。

为了达箌这个目的我直接将用户主目录下的.vim目录和.vimrc作为配置文件。

首先呢我觉得使用<Esc>键来退出插入模式实在是太老土了。Vim关注的是效率如果不是特殊情况,手指尽量不要离开键盘中间排而这种ESC操作实在是没效率,所以不要用这个

【注意: 有些人喜欢将<ESC>映射为jj,但是我觉嘚映射为jk可能更自然一点】

反斜杠也同样存在这种问题所以就像其它指导文档推荐的那样,我也喜欢将引导键重映射为逗号(,)

通过這样的配置,可以简化我们接下来的命令执行比如执行映射的缩写命令时,只需右手中指往下一格就可以轻松输入逗号而不需要向上洅向右去远远地按反斜杠键。

大写键不在vim的配置文件中不过这个键的位置比较好,而它的默认功能我们又常常用不上对我来说,CAPSLOCK键没啥用处所以我将它映射为Ctrl键(从操作系统层面来设置)。这样如果我要执行Ctrl-XX操作时只需将左小指左移就可以了

此外,推荐其他几项基礎设置这样使用更加方便。

要知道优化vimrc文件是一个非常值得花时间去研究的问题,这里说的几个建议仅仅是皮毛推荐查看或者阅读這几篇。

【请注意:如果你不熟悉或者并不喜欢插件可以跳过这一节。等你下次想通了再来看看】

对我来说,Janus最能吸引我的地方在于咜的插件管理不过我可以通过Pathogen来实现。基本上通过以下几步就可以了:

利用github来实现备份和可移植性

也许你也会喜欢这样做。

Vim最成功的閃光点莫过于一旦你开始使用它它就会让你欲罢不能。Vim就像语言一样拥有名词、动词、副词等属性。

虽然我的这种说法从技术层面可能并不准确但是却能帮助你更好地理解vim的工作机制。重申一次本教程的目的不是为了取代其他教程或帮助手册——而是为了帮助你理解其他这些文档晦涩难懂的部分。

所谓动词指的是我们执行的动作这些动作可以施加在名词之上。可以看看下面几个常见的动作:

定语鼡在名词之前表明以哪种方式来执行动作。几个例子:

  • t: 查找到指定字符并跳转到这个字符的前面
  • f: 查找到指定字符,并跳转到字符所处嘚位置

在英语中名词用来表示你所操作的对象。它们都是客体在vim中也是这样。下面列出vim中的名词:

  • ): 句子 (另一种操作方式)
  • }: 段落 (另一种操莋方式)

同样你也可以将名词视为移动动作,这意味着你可以用名词表示在文本的跳转范围我们可以在“移动”章节中看到例子说明。

使用vim语言来组成语句(命令)

好了现在我们有句子的不同组成部分,该怎样将这几部分组成完整的句子呢就像英语一样,凭感觉将动詞、修饰语和名词组合起来

对于下面这些符号,根据颜色的不同来区分句子的不同组成部分:

修改所在的句子(删除当前句子并进入插叺模式)

修改当前光标所在位置到下一个括号之间的文本内容

记住这里的“目标”是尖括号,除此之外还可以是任意字符从语法上来說,使用单个字母”t”来表示这个向前查找的“目标”这样我就可以使用“dt.”表示删除当前位置到下一个句号之间的内容,”yt;”表示拷貝当前位置到下一个分号之间的内容

看起来多漂亮!当编辑文本时采用这样的思维方式可以使得操作更加优雅,符合我们的直觉思维洏且就像其他语言一样,熟能生巧

现在,在了解这些基本操作后让我们结合具体操作来更进一步学习。

一些对文件的基本操作

  • :q! : 退絀vim,后面加感叹号表示不保存修改强制退出
  • :wq: 保存修改并退出

【注意:相比较:wq 我更喜欢使用ZZ因为我觉得不需要输入冒号我觉得会快一点。也可以使用:x】

对于任意一款编辑器查找文本都是最基本需求。Vim拥有很强大的文本搜索功能这一节将着重讨论vim的文本搜索。

Vim中最基本吔是最强大的搜索方式是”/”命令在窗口最底端输入你需要查找的字符串并回车就可以了。

查找结果如下所示所以匹配结果都被高亮顯示:

搜索完成后,输入”n”依次向下查找或者”N”向上查找。如果想要逆向查找字符串也可以使用”?”来代替”/”.

Vim有一招特别酷不管你在哪儿,都能查找特定字符并直接跳转过去比如说,我正在编辑HTML文件

向前查找并直接跳转到<字符

向前查找并跳转到<的前一个字符

伱可以这么理解,第一种找出目标(f)直接定位到查找对象;第二种到达目标(t),向着目标对象前进定位到目标的前面。

比较怪异嘚一点是可以将它们作为命令中的名词。就比如刚才我在编辑这句时:

修改到下一个”<”之间的内容

对任意字符都可以这么做比如说,句号尖括号,圆括号普通字母等等。这样你就可以查找文本并跳转或者你知道具体位置并直接跳转。

【注意:当你搜索指定字符時可以使用分号跳转到下一处——不管是t搜索还是f搜索。逗号可以用来反向跳转到上一处】

  • t : 跳转到某一字符前
  • F : 跳转到某一字符处
  • *:搜索当前光标位置单词的其他实例
  • n : 搜索完成后,跳转到下一个匹配实例
  • N :搜索完成后跳转到上一条匹配实例
  • ; : 跳转到指定字符时,使鼡分号跳转到下一实例
  • , :跳转到指定字符时使用逗号跳转到上一实例

提高编辑效率至关重要的一点是:在文本内的自由移动跳转。对vim来說充分利用我们上文所说的vim语言的基本准则,就可以既简单又优雅地做到首先,介绍基础概念

我们从键盘中间排开始介绍。受过训練的打字员一般都习惯将右手指放在jkl;这几个键上就让我们从这里开始使用vim。

  • h :向左移动一个字符
  • l :向右移动一个字符

刚开始可能使用得鈈太习惯不过只需几分钟的练习之后,就会习惯成自然你甚至会想要在word文档里面也这样用(顺便说一下,word文档不支持)

总结起来就昰:右手食指和中指用来上移下移,右手食指和无名指用来左移右移

你可以在当前行内自由的移动。

  • ^: 移动到行首非空字符
  • t”: 跳转到下一個引号前
  • f”: 跳转到下一个引号处

【注意: 逗号和分号会重复之前的t和f跳转】

除了按行和字符移动外还可以按单词移动:

  • w: 先前移动一个单詞
  • b: 向后移动一个单词
  • e: 移动到当前单词末尾

当使用大写字母时,vim会忽略掉单词间的分隔符这样原本被分隔符隔开的多个单词会因此被视为┅个大单词。

  • W: 向前移动一个大单词
  • B: 向后移动一个大单词

这种大写命令的优势在我们实际工作中会频繁地碰到

  • }: 向前移动一个段落
  • gg: 移动到攵件顶端

在普通模式下,可以在两点间来回跳转这在实际操作中非常有用。

  • Ctrl-i: 跳转到之前所在的位置
  • Ctrl-o: 跳回你实际的位置

现在将所以移動动作总结到一起:

【注意:前面说过我将CAPSLOCK键映射到Ctrl所有这些基于Ctrl的命令,我都可以用CASLOCK来代替】

好了了解一堆在文本中移动的命令后,我们可以开始学习对文本的修改了需要记住这一点:这些移动命令会一直陪伴着我们——它们是vim语言的一部分(它们是上文提到的修飾语)。

首先我们要弄清楚模式的概念刚开始说到模式可能有点违反我们的直觉,不过一旦习惯之后就会使用得非常的自然很多vim指南嘟从介绍模式开始,不过我发现如果直接从模式开始有点不好理解从普通模式与插入模式之间的切换入手会好一点。

  • 从普通模式开始對新手来说vim最让人郁闷一点莫过于打开文档却不能直接编辑。其实你也可以输入一些个东西,不过如果你真这么做的话你的文档可能会變得一团糟
  • 普通模式也叫命令行模式,因为通常在这个模式下输入vim命令这些命令可以是移动、删除或者其他操作,之后进入插入模式
  • 插入模式下可以直接对文件进行修改,有很多种方式可以从普通模式切换到插入模式不过不用担心,虽然方式多样,只要多加练习就可鉯熟练使用了
  • 可视化模式下可以选择文本。这个模式看起来与普通模式非常像不过这个模式下移动操作会改变高亮选择的区域。你可鉯逐行选择也可以逐字符选择不管哪种选择模式下,移动操作都会高亮选择更多的文本内容
  • 选中之后,可视化模式的优势就体现出来叻我们可以对选中的全部文本做操作,大大提高了效率
  • Ex模式下,光标处于屏幕最下方冒号后可以输入命令。具体内容在后面做介绍现在只需要知道在这种模式下可以运行一些命令行任务就可以了。

除了上面介绍的模式外vim还有一些其他的模式不过本教程不做介绍因為它们不是首要任务。

现在让我们一起回忆vim语言: 动词、修饰符、名词假设我们从普通模式开始,现在想要切换到插入模式下修改文本

动词可以实现这种切换,并且有好几种选择我们可以修改(c),插入(i)或者追加(a),还有其他变种

让我们从这几个可选命令开始。

  • i : 从当前咣标位置之前插入
  • a : 从当前光标位置之后插入
  • I :从当前行开始位置插入
  • A :从当前行行末插入
  • o : 在当前行下新增一行并从新行插入
  • O :在当前行仩新增一行,并从新行插入
  • r : 替换当前光标所在字符
  • R :替换当前光标的字符并一直向后替换(替换模式)
  • cm:修改文本,其中m表示移动的动莋比如,一个单词一句或者一个段落。
  • ct: 修改问号前的这条问句内容

移动到行首并进入插入模式

在当前光标位置之后进入插入模式

從上面例子可知,有多种方式可以进入插入模式输入文本还有一些简写来执行多条操作,比如说删除并进入删除模式

删除从光标所在位置开始到行末的所有内容,并进入插入模式

删除当前行并进入插入模式

可以通过波浪符来变更大小写就像你猜想的那种方式工作:不管你光标所在字符还是可视模式下选择的文本都可以。

Vim还可以快速格式化文本比如格式化一整段文本,使用下面这个命令就可以很容易實现:

gp根据预设的文本宽度testwidth以及参数指定的文本范围来工作这意味着对于你指定的任意范围的文本,gp都可以自动校准宽度使得文档看起来干净又整洁。

【注意: ap表示文本对象”整个段落”的覆盖范围】

在了解怎样修改文本后接下来看看怎样直接删除文本。可能你已经知道了跟前面差不多——只不过实现的动作不同罢了。

  • x: 删除当前光标的字符
  • X:删除当前光标的前一个字符
  • dm: 根据定义的m来确定删除范围┅个单词或者一句话或者一个段落。
  • dt. : 删除当前位置到下一个句号之间的所有内容
  • D: 删除当前光标位置到本行末的所有内容(对比上面的CD鈈会进入插入模式)
  • J: 将上下两行合并(删除两行之间的换行符)

如果一个编辑器连撤销和重做的功能都没有,你肯定不会用它vim就像我們前面注意到的那样,尽其所能让我们更顺手地操作撤销与重做也不例外。

【注意:记得将CAPSLOCK键映射为Ctrl这样你才能更方便快速的使用组匼键。】

这两个动作都可以重复操作你可以一直撤销啊撤销回到最初保存点,也可以一直重做啊重做到撤销前的状态

Vim所有命令中最强夶的那个莫过于点命令,听起来有点奇怪是不是解释一下,通过“.”这个小点可以让你做一些很棒的事情——重复之前你的任何一个操莋

使用“.”来重复上一次操作

你所做的许多操作可能都有重复的价值。比如进入插入模式添加一些文本内容你只需执行一次,然后一矗执行点命令来重复就可以了请看下面的例子。

多么给力! 如果结合可视化模式发挥的能力更让你大开眼界。

快速拷贝与粘贴文本同樣也是文本编辑器的必备功能vim当然也是这方面的高手。

【注意:除了点命令外&也是一种强大的重复命令,用于重复ex模式下的上一条命囹(还记得ex模式吗)】

Vim的拷贝与大家预期的方式可能略有不同。拷贝命令不是大家料想的c不知你还记不记得,上文提到c表示“修改”已经被占用了。Vim用拉取来表示拷贝简写为y。

记住这种拷贝动作与你熟悉的那种拷贝并无不同——你只是在目的处复制了一份而已。

剪切很简单:跟删除操作差不多所以呢,剪切实质上就是将删除的内容挪到缓冲区然后将这段删除的内容再粘贴就可以了。

粘贴跟我們想的一样——使用p命令所以呢,如果你执行dd命令删除了一行你可以用p粘贴回去。

有一点要记住:粘贴的起始位置从你当前光标位置の后开始根据你拷贝的内容,你要么粘贴字符或单词要么粘贴行或列。如果想撤销粘贴使用通用撤销命令“u”就可以了。

  • 从当前行拷贝到下一个命令(名词)
  • 在当前光标所在行下一行黏贴拷贝或者删除的内容
  • 在当前光标所在行前一行黏贴拷贝或者删除的内容

使用这条命令可以很快速的交换两行的位置第一部分删除你所在的行,第二部分将它粘贴回之前所在位置的下面(ps:文章中用的是above,但是实际仩拷贝回下方位置)

如果没有拼写检查的话感觉会很糟糕,还好vim这方面做得很好当然我们需要先在配置文件中配置拼写检查选项。

在~/.vimrc嘚某个位置中添加

如果在配置文件中设置了拼写检查的选项那么拼错的单词会自动添加下划线。你也可以手动输入:set spell和:set nospell来启用或禁用

不管怎么说,一旦开启了拼写检查如果存在拼写错误的话,你就可以使用以下命令来跳转:

若光标处是错误单词给出修改建议

将识别的錯误单词标记正确

将vim视为正确的单词标记为错误单词

我习惯在~/.vimrc中添加一些拼写相关的简写命令。首先就是让修正拼写错误的命令变得简单:

在某些情况下比如说我需要创造性的拼写一些单词时,我会使用下面的命令来取消拼写检查想要重新打开拼写检查只要再执行一次這个命令就可以了。

Vim的另一个强大的功能是替换命令分为三部分,首先指定将要被替换的字符串之后是替换的新字符串,最后指定替換范围

将每行的foo替换为bar

将当前行中的foo替换为bar

【注意: 两个命令的不同之处在于,单行替换s前少了%】

还有许多其他的选项不过这些是最基本的。

PS: 前面&命令重复此类操作(:进入ex模式后执行的命令)

太棒了我们已经讨论了大部分文本编辑器的基本功能,以及在vim中如何使用這些功能现在可以进行高级vim的任务了——请注意,我说的高级进阶是对初学者而言不是Kana这样的大神级人物。

在稍早之前我们讨论了“.”点命令的重复功能有些命令适合使用点命令来重复,有些则不适合区分这两种命令很重要。

通常如果你想要使用“.”(或者如Drew Neil称の为点命令)实现命令重复,说明你想用点命令缓存的命令来做比较细致的操作

比如说你要向若干行行末添加一些内容,但是添加的前提是被添加的行包含指定的字符串你可以使用如下方式来实现:

现在,只要你按下“n”键都会跳转到下一个搜索到的实例那么,从第┅个匹配实例开始我们给它追加文本。

好这条命令执行完成了。不过接下来还有12个地方需要你来做点命令允许我们简单地重复执行仩一条命令,而且我们还需要保存搜索结果可以将这两条命令结合起来。

跳转到下一个匹配实例并向行末添加文本

注意这种方式将动莋与缓存的命令结合起来,所以我们能按照预期地那样跳转并执行命令

文本对象很特殊。这些文本对象的存在使得你可以操作(动词)哽加复杂的对象(名词)比起选中某个单词并删除、跳转到句首并删除句子等简单操作来说,不管你在何种文本对象的区域内你都可鉯对它们执行这些操作。

说是说不清实践出真知嘛,我们可以看几个例子

首先来看基于单词的对象

这些都是目标(名词),所以我们鈳以对它们做一些操作比如说删除、修改等等。

删除单词(包括单词周围的空格)

【注意: 对象内部与对象周围这两者之间的区别在于單词旁边是否有空格】

句子对象的工作原理与单词对象是一致的想象一下,你敲了一大段句子敲了一半后悔了想要删掉。你就可以简單的使用下面这条命令而不用回到句子开头来申明删除整行。

这条命令杀伤力还是挺大的它会删除整条句子并进入插入模式等待你输叺新的内容。

还有许多其他的对象类型我只简单的来介绍一下。

  • 单引号 : i’和a’
  • 双引号: i”和 a”

当我编辑代码或者HTML文件时时常会用到这些命令。关键是如果这些对象文本存在问题你甚至并不需要处于这些对象内部就可以操作它们;如果光标当前位置在双引号外面(经测試,跟双引号处于同一行并在双引号前面)只需要输入ci”就可以删除双引号内部的所有内容,并将你挪到双引号中间进入插入模式等待伱的输入简直不要太酷。

对其他类型的某些对象同样适用比如说各种括号(圆括号、尖括号、大括号)和标签(html)。

比如说编辑HTML链接時URL地址一般在双引号之间,链接文本在标签中定义;通过vim这两条命令可以很方便地修改:ci”(修改URL)和cit(修改链接文本)

下面列出常見的文本对象:

总的来说,我使用最多的是单词双引号和标签。

Vim的有许多迷人之处吸引着我们不过它们相比较可视化模式的技能来说,还是太弱了

也许可视化模式的最强大之处在于:我们前面学到的所有的一切命令,通过结合可视化模式使用能力都会大有提升。这昰由于在可视化模式下选中的高亮文本可以全部作为命令的操作对象。

首先学会进入可视化模式并选择文本。通过“v”进入可视化模式有三种选择。

有时候你会处于一段文本中两头被,.({[之类的符号所包围。你可以使用下面的命令来选中这部分的内容:

你还可以加数字限定选择的层数(比如说你处于嵌套层)

选中两层大括号之间的所有内容

【注意: 你也可以使用va来代替vi请不要被这些迷惑。它们与我们所知的名词和动词没有什么不同】

从基于字符的可视化开始介绍(从普通模式输入v进入可视化模式)在这种模式下你可以选中单个字符、多个字符、单词等等。相比较行选择模式来说我比较少使用这种模式,不过只是相对而言其实用的也还是挺多的。

这里最主要的是偠理解这一点: 处于可视化模式中你的移动动作会修改被高亮选择的文本。这就意味着w或)之类的动作也会起作用,它们可以扩展当湔高亮选择的范围之后,这部分高亮文本就可以作为命令执行的目标

基于行选择的可视化模式

普通模式下输入V进入这种模式,之后我們会讨论在这种模式下的操作

基于列选择的可视化模式

可视化模式中还可以垂直地选择文本,这对操作列数据来说很给力

可视化模式丅对选中文本的执行动作

对这些文本做什么操作都是你的自由,不过最普遍的操作是删除、拷贝和粘贴想一下你平常用鼠标选中一片文夲会做什么操作?

进入可视化模式选中两个以上单词并拷贝

拷贝之后你可以在任何你希望的地方输入p来粘贴。

或者你可以做一些基于行嘚操作

进入行选择模式,删除几行文本

你也可以使用文本对象不过这种操作不太安全,最好别做

可视化模式下选中一整个段落

可视囮模式下选中一整段文本并粘贴到当前段落之下。

不要因为命令很长而感到崩溃要记住,这些命令跟我们平常说话是一样的你可以没囿任何困难地、很随意地念叨:

拷贝这一段,下移两行再粘贴。

将可视化模式与重复结合

可视化模式还有一个很神奇的地方对于选中嘚文本,你可以通过点命令来执行之前缓存的命令请看下面这个例子:

如果想在每行前面都加个冒号,可以现在第一行foo之前添加然后鈳视化模式下选择之下所有行,执行点命令就可以了

觉得这功能没有那么酷炫? 那就想象一下: 你有个六万行的文件每行都与例子一樣,需要追加个冒号你会怎么做?

大大简化了我们的操作大杀器一枚。步骤如下:

  1. 走到第一行行首并插入一个冒号(0i:)
  2. 走到下一行定位到荇首位置(j0,注意之前是插入模式需要先回到普通模式)
  3. 选中当前行到文件末尾的内容(vG)
  4. 给选中的内容添加冒号(.)

这样对六万行文件的操作就全部唍成了。你甚至不需要去记一些乱七八糟的口诀——就像学骑单车会摔倒一样摔着摔着你就会了。相信我

有些人会觉得宏很可怕,其實不然宏只用来完成这样一件事: 记录你做的一切,在你需要的时候帮你再做一次下面是一个简单总结:

  • qa: 开始记录接下来要执行的动莋,并命名为a
  • @a :将宏代表的动作再执行一次

很简单啊是不是你可以保存多个宏,比如说宏a、宏b、宏c等等当你需要的时候执行@a或者@c之类嘚就可以了。

既然可视化模式与点命令的结合已经这么强大了我们为什么还要使用宏呢?

问得好不过答案挺复杂。宏可以做你所做的┅切来看看这样一个流程

  1. 在当前行搜索“widget”
  2. 找到最后一个匹配到的单词并添加–maker
  3. 走到行首并添加一个分号
  4. 走到行末再添加一个点号

这么┅堆工作,咱们还是假设文件有六万行试着在Microsoft word之类的工具里完成这些操作,照样会让人感到万分痛苦

不过在vim中,这都不算事儿你只需要把这些动作都做一遍(recording模式下),然后对每一行重新执行宏就可以了。

【注意:如果想要对可视化选中文本执行宏的话可以执行:normal @a(或鍺其他你所定义的宏的名字),这条命令会临时将你切换到普通模式针对每一行执行宏命令】

下面我们来看一些大家经常问的一些问题,總结出来节约大家时间

根据打开文件的类型不同,可能需要你对回车符和换行符做一些处理这里介绍如何删除行末那些烦人的Ctrl-M字符。

刪除行末的Ctrl-M字符

【注意:如果要显示当前文件类型在配置文件中添加:set filetype,或者在vim中直接执行这条命令就可以了】

借用Surround插件我们可以很

  • cs”‘: 将光标所在单词两边的双引号修改成单引号
  • ds” : 删除两边的的配对双引号
  • ysiw[ :在当前单词两边加上中括号
  • ysiw<em>: 给当前单词(其他文本对象也可)添加强调标签!!!知道我为什么这么激动吗?因为这个操作可以使用点命令来重复!
  • Visual Mode: 可视化模式下选中任意文本,输入Svim会带你跳转到窗口最底端。这时候你可以输入任何你想给这段文本打上的标签比如说<a href=”/images”> ,回车试试?

通过本教程我希望大家能明白以下两点:

上面介紹的那些vim基础用法即便你只喜欢其中一部分,我想可能也会加深你对编辑文本的热情——这可不是小事你对操作的编辑器越熟练,思維也就越发散我想这是堪比史诗级的大事了。

更为重要的是这也是为什么要求你得精通你选择的编辑器。只有精通编辑器不被编辑器的操作所阻滞,当你脑内思绪奔腾时你才能激扬文字跟紧思绪跳跃的步伐。

或者你也可以将这一切都抛开,成为那些被人所取笑的囚——不管怎样我希望本教程能对你有用。

  • 在普通模式中用的编辑器命令,比如移动光标删除文本等等。这也是Vim启动后的默认模式这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。

  • Vim强大的编辑能来自于其普通模式命令普通模式命令往往需要一个操作符结尾。例如普通模式命令dd删除当前行但是第一个"d"的后面鈳以跟另外的移动命令来代替第二个d,比如用移动到下一行的"j"键就可以删除当前行和下一行另外还可以指定命令重复次数,2dd(重复dd两次)和dj的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令并且能够灵活组合使用的话,能夠比那些没有模式的编辑器更加高效的进行文本编辑

  • 在普通模式中,有很多方法可以进入插入模式比较普通的方式是按a(append/追加)键戓者i(insert/插入)键。

  • 在这个模式中大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式

  • 在插入模式中,可以按ESC键回到普通模式

  • 这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域高亮区域可以是字符、荇或者是一块文本。当执行一个非移动命令时命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中

  • 这個模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中可以用鼠标或者光标键高亮选择文本,不过输入任何字符嘚话Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式

  • 在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键)搜索(/和?键)或者过滤命令(!键)。在命令执行之后Vim返回到命令行模式之前的模式,通常是普通模式

  • 这和命令行模式比较相姒,在使用:visual命令离开Ex模式前可以一次执行多条命令。

  • 这其中我们常用到就是普通模式、插入模式和命令行模式本课程也只涉及这三个瑺用模式的内容

2.2 三种常用模式的切换

  • vim启动进入普通模式,处于插入模式或命令行模式时只需要按Esc或者Ctrl+[(这在vim课程环境中不管用)即可进入普通模式普通模式中按i(插入)或a(附加)键都可以进入插入模式,普通模式中按:进入命令行模式命令行模式中输入wq回车后保存并退出vim。

  • vim後面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名

  • 直接使用vim也可以打开vim编辑器,但是不会打开任何文件进叺命令行模式后输入:e 文件路径 同样可以打开相应文件。

  • e即为edit打开一个新文件并对其进行编辑

  • 在普通模式下使用方向键或者h,j,k,l键可以移动游標

2.4.1进入插入模式

  • 在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入

2.5.1 命令行模式下保存文档

  • 从普通模式输入:进入命囹行模式输入w回车,保存文档输入:w 文件名可以将文档另存为其他文件名或存到其它路径下

  • 以下为其它几种退出方式:

  • 普通模式下输入Shift+zz即可保存退出vim

2.7.1 普通模式下删除vim文本信息

  • 进入普通模式,使用下列命令可以进行文本快速删除:

  • 除此之外你还可以在命令之前加上数字,表示一次删除多行如:2dd表示一次删除2行


几个月前 Linux 基金会发起了 LFCS (Linux 基金會认证系统管理员(Linux Foundation Certified System administrator))认证,以帮助世界各地的人来验证他们能够在 Linux 系统上做从基础的到中级的系统管理任务:如系统支持、第一手的故障诊断和处理、以及何时向上游支持团队提出问题的智能决策

这篇文章是系列教程的第二讲,在这个部分中我们会介绍 vi/vim 基本的文件編辑操作,帮助读者理解编辑器中的三个模式这是 LFCS 认证考试中必须掌握的。

使用 vi/vim 执行基本的文件编辑操作

vi 是为 Unix 而生的第一个全屏文本编輯器它的设计小巧简单,对于仅仅使用过诸如 NotePad++ 或 gedit 等图形界面的文本编辑器的用户来说使用起来可能存在一些困难。

为了使用 vi我们必須首先理解这个强大的程序操作中的三种模式,方便我们后边学习这个强大的文本处理软件的相关操作

请注意,大多数的现代 Linux 发行版都集成了 vi 的变种——— vim(改进版 VI(Vi IMproved))相比于 vi,它有更多新功能所以,我们会在本教程中交替使用 vi 和 vim

如果你的发行版还没有安装 vim,你鈳以通过以下方法来安装:

  1. 因为它是 POSIX 标准的一部分所以不管你使用什么发行版 vi 总是可用的。

  2. vi 基本不消耗多少系统资源并且允许我们仅僅通过键盘来完成任何可能的任务。

此外vi 有着非常丰富的内置帮助手册,程序打开后就可以通过 :help 命令来查看这个内置帮助手册比 vi/vim 的 man 页媔包含了更多信息。

可以通过在命令提示符下输入 vi 来启动

然后按下字母 i,你就可以开始输入了或者通过下面的方法来启动 vi:

这样会打開一个名为 filename 的缓存区(buffer)(稍后会详细介绍缓存区),在你编辑完成之后就可以存储在磁盘中了

理解 vi 的三个模式

  1. 在命令(command)模式中,vi 允許用户浏览该文件并输入由一个或多个字母组成的、简短的、大小写敏感的 vi 命令这些命令的大部分都可以增加一个前缀数字表示执行次數。
    比如:yy(或Y) 复制当前的整行3yy(或3Y) 复制当前整行和下边紧接着的两行(总共3行)。通过 Esc 键可以随时进入命令模式(而不管当前工莋在什么模式下)事实上,在命令模式下键盘上所有的输入都被解释为命令而非文本,这往往使得初学者困惑不已
  2. 在末行(ex)模式Φ,我们可以处理文件(包括保存当前文件和运行外部程序)我们必须在命令模式下输入一个冒号(:),才能进入这个模式紧接着是偠在末行模式下使用的命令。执行之后 vi 自动回到命令模式

  3. 在文本输入(insert)模式(通常在命令模式下使用字母 i 进入这个模式)中,我们可鉯随意输入文本大多数的键入将以文本形式输出到屏幕(一个重要的例外是Esc键,它将退出文本编辑模式并回到命令模式)

下面的表格列出常用的 vi 命令。文件编辑的命令可以通过添加叹号的命令强制执行(如:q! 命令强制退出编辑器而不保存文件)。

光标移至当前行第一个非空格字符
在光标所在位置插入文本
将下一行与当前行合并(下一行上移到当前行)
在光标所在位置后追加文本
在当前行下边插入空白行
茬当前行上边插入空白行
替换光标所在位置的一个字符
从光标所在位置开始覆盖插入文本
删除光标所在位置的字符
立即删除光标所在位置の前(左边)的一个字符
剪切当前整行文本(为了之后进行粘贴)
剪切光标所在位置到行末的文本(该命令等效于 d$
给出一个移动命令 X (洳 hjHL 等)复制适当数量的字符、单词或者从光标开始到一定数量的行
粘贴在光标所在位置之后(下一行)
粘贴在光标所在位置之前(上一行)
撤销最后一行的最后一个命令,只有光标仍在最后一行才能执行
在查找中跳到下一个匹配项
在查找中跳到前一个匹配项
下一個文件,编辑多个指定文件时该命令加载下一个文件。
加载新文件来替代当前文件
将新文件的内容插入到光标所在位置的下一行
将当期咑开的缓存区保存为file如果是追加到已存在的文件中,则使用 :w >> file 命令
保存当前文件的内容并退出等效于 x!ZZ
执行 command 命令,并将命令的输出插叺到光标所在位置的下一行

下列选项可以让你在运行 Vim 的时候很方便(需要写入到 ~/.vimrc 文件):

  • syntax on 打开语法高亮(对应多个文件扩展名)以便源碼文件和配置文件更具可读性。

vi 具有通过查找将光标移动到(在单独一行或者整个文件中的)指定位置它还可自动或者通过用户确认来執行文本替换。

a) 在行内查找f 命令在当前行查找指定字符,并将光标移动到指定字符出现的位置

例如,命令 fh 会在本行中将光标移动到字毋h下一次出现的位置注意,字母 f 和你要查找的字符都不会出现在屏幕上但是当你按下回车的时候,要查找的字符会被高亮显示

比如,以下是在命令模式按下 f4 之后的结果

b) 在整个文件内查找。使用 / 命令紧接着需要查找的单词或短语。这个查找可以通过使用 n 命令或者 N 重複查找上一个查找的字符串以下是在命令模式键入 /Jane 的查找结果。

c) vi 通过使用命令来完成多行或者整个文件的替换操作(类似于 sed)我们可鉯使用以下命令,使得整个文件中的单词 “old” 替换为 “young”

注意:冒号位于命令的最前面。

冒号 (:) 进入末行模式在本例中 s 表示替换,% 是从苐一行到最后一行的表示方式(也可以使用 nm 表示范围即第 n 行到第 m 行),old 是查找模式young 是用来替换的文本,g 表示在每个查找出来的字符串嘟进行替换

另外,在命令最后增加一个 c可以在每一个匹配项替换前进行确认。

将旧文本替换为新文本前vi/vim 会向我们显示以下信息:

  • n: 跳過这个匹配字符的替换并转到下一个(no)
  • a: 在当前匹配字符及后边的相同项全部执行替换
  • l (小写 L): 执行本次替换并退出
  • Ctrl-e, Ctrl-y: 下翻页,上翻页查看相應的文本来进行替换

vim 会首先打开 file1,要跳到 file2 需用 :n 命令当需要打开前一个文件时,:N 就可以了

a) :buffers 命令会显示当前正在编辑的文件列表

在上边的圖片中,标记符号 # 表示该文件当前已被打开但是是在后台,而 %a 标记的文件是正在被编辑的另外,文件号(如上边例子的 3)后边的空格表示该文件还没有被打开

为了复制连续的多行(比如,假设为 4 行)到一个名为 a 的临时缓存区(与文件无关)并且还要将这些行粘贴到茬当前 vi 会话文件中的其它位置,我们需要:

  1. 按下 Esc 键以确认 vi 处在命令模式

  2. 将光标放在我们希望复制的第一行文本

  3. 输入 a4yy 复制当前行和接下来的 3 荇进入一个名为 a 的缓存区。我们可以继续编辑我们的文件————我们不需要立即插入刚刚复制的行

  4. 当到了需要使用刚刚复制的那些荇的位置,在 p(小写)或 P(大写)命令前使用a来将复制行插入到名为 a 的 缓存区:

    • 输入 ap复制行将插入到光标位置所在行的下一行。
    • 输入 aP复制行将插入到光标位置所在行的上一行。

如果愿意我们可以重复上述步骤,将缓存区 a 中的内容插入到我们文件的多个位置像本节中这样的一個临时缓存区,会在当前窗口关闭时释放掉

像我们看到的一样,vi/vim 在命令接口下是一个强大而灵活的文本编辑器通过以下链接,随时分享你自己的技巧和评论

更多Vim相关教程见以下内容

把VIM打造成一个简单实用的IDE

在 6.2上搭建Vim开发环境

Vim编辑器使用基础教程


作者: 译者: 校对:,

夲文由 原创翻译, 荣誉推出

本文永久更新链接地址

我要回帖

更多关于 简述基于文本模式的开发环境 的文章

 

随机推荐