vim操作技巧:操作+文本选择

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

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

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


This is a series of commands.

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

第一种办法就是用l或者<Right>将光标移动到.上面,然后用i进入插入模式,使用<Backspace>删除commands,输入hello,<ESC>退出插入模式。不得不说,我在最开始接触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的文章我换了一个写作方式,以我的实际编辑的例子来进行深入解析,这样可操作性更加强一些。

文章同步发布在:http://www.xinxingzhao.com/blog/2016/05/29/vim-select-boject.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Vim几句话介绍Vim是Unix系统上的文本编辑软件(你该不会不知道什么是文本编辑软件吧!),在windows上也...
    何必遠方阅读 3,217评论 0 3
  • 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 启动vim 在命令...
    im蚂蚁阅读 30,835评论 3 48
  • 待整理~ 1、vim ~/.vimrc 进入配置文件 如果不知道vimrc文件在哪,可使用 :scriptname...
    spfanlost阅读 1,756评论 0 0
  • 对于宇宙的起源,现在的主流科学界普遍接受的是大爆炸理论(Big Bang)。宇宙起始于一个温度极高、密度极大奇点,...
    杨威1974阅读 1,126评论 2 3