Date Tags Vim

在编写代码的过程中,选择代码是一项非常常见的操作,其他文本编辑器都是 使用鼠标进行选择,我在使用其他编辑器的时候,编写到一半的时候总是想着 要去找鼠标,然后选择代码,然后在回到键盘上进行操作。对于vim来说代码选 择再加上操作是非常强大的功能。

首先我们需要了解一下什么是文本对象,我对文本对象的理解就是在成对符号 之间的字符串,比如",',{等,包括xml的标签之间的都属于文本对象。选中文 我们都是为了操作文本,vim里面有一些按键用于操作,称之为操作符,比如d, c,y等,d表示删除,c表示删除插入,y表示提取。

我们以一个实例来解释文本操作加文本对象的使用。

This is a series of commands.

上面这句话假设光标所在位置是句首,我们想把commands改为hello,我们要完 成这件事情有很多种方法,下面我们一个一个的来说。

第一种办法就是用l或者将光标移动到.上面,然后用i进入插入模式, 使用删除commands,输入hello,退出插入模式。不得不说, 我在最开始接触vim的时候,我就是这么干,而且还这么干了很久,现在回想起 来不得不佩服当初的愚蠢。因为我们还有更好的方式。

第二种办法使用$将光标一次性移动到行尾,使用i进入插入模式,或者是A将上 面这个两个操作合并起来,删除commands,输入hello。这个方案明显比第一个 方案高效了很多,因为我们可以一次就可以将光标移动到位了。当然,我们还 有更加高效的办法。

第三种方案是使用fc将光标移动到c字母上面,使用cw删除commands并进入插入 模式,输入hello。

上面这三种方案都还没涉及到文本对象的选择,如果我们使用fm将光标移动到 commands上时,我们就需要使用到文本对象的选择了,因为cw是从当前光标开 始删除,还会遗留下co没有被删除,所以我们可以输入ciw会将光标所在的单词 整个删除并进入插入模式。这个方案在这里不一定是最好的,但是可以适用范 围更加广。

现在我们改一下需求,删除commands和.号,因为这句话我们还没输入完成, 我们输入hello之后,还需要继续输入,号。

这里就涉及到单词和字符串的概念了,单词就是我们平常所理解的单词,比如 上面的This,is,commands等,而字符串是指两个空格之间的字符,如果我们 需要删除commands.使用面向字符的文本对象操作起来会更加高效一些。

首先我们将光标移动到commands上面,也可以移动到.号上面,使用fc或者fm 或者f.都可以,然后执行ciW会将commands.都删除并进入插入模式。

OK,我们再接着修改一下需求,我们仅仅只要将commands删除,而不进行其他 操作。

首先我们还是要先移动光标到commands上面,和上面的方法是一样的,使用 f+字符的模式来移动光标,这里特别说明一下,我以前很少使用f+字符来移 动光标,一般都是用w,e,b等,后来我习惯使用f之后,在单行内移动光标 的效率提升了很多,这里也建议大家使用这种模式来移动光标。我们要删除 文本,所以执行命令以d开头,我们还用iw作为文本对象,即执行diw就可以 删除commands了,比起使用c开头的命令,我们并不会进入插入模式,毕竟 我们仅仅就是删除单词。但是我们会发现一个问题,就是of和.之间还有一个 空格,我们需要再执行一次x才能删除空格。

这时候我们希望能一步到位,就是把commands和以前的空格以前删除了。 这里就涉及到i和a的区别了,i表示的是单词本身或者字符串本身,a表示 单词本身加上单词周围的一个或多个空格,为什么会有这样的区别呢? 因为我们在编辑文本的时候,有时候需要删除+修改,有时候仅仅删除就好了。 而删除修改空格往往需要保存原样,而删除总会有一个或多个多余的空格。 所以在这种情况下,我们执行daw会一次性将commands和前面的空格一起删除, 这样明显编辑效率就提高。

这样就形成了一个模式了,操作符(y,d,c等)+文本对象(iw,aw,iW,aW等),把这个 模式推广开来,在其他类似的场合也能迅速的提高了编辑效率。大家可以通过 :h text-objects来查看所有的文本对象。下面进行简单的列举一下,同时还能给 出快速记忆的办法。

  • aw 一个单词包括一个空格,快速记忆:a word

  • iw 一个单词,快速记忆:inner word

  • aW 一个字符串包括一个空格,快速记忆:a WORD

  • iW 一个字符串,快速记忆: inner WORD

  • as 一个句子包括一个空行,快速记忆:a sentence

  • is 一个句子,快速记忆:inner sentence

到这里大家应该已经发现规律了吧,赶紧通过帮助文档查看完整的文本对象吧。

从这篇文章开始,针对vim的文章我换了一个写作方式,以我的实际编辑的例子 来进行深入解析,这样可操作性更加强一些。