导航

Vim初探(二)

Posted on 2011-04-09 22:55  SamWei  阅读(6712)  评论(3编辑  收藏  举报

  在Vim初探(一)中介绍了Vim中模式的概念,以及如何在Vim中以多种方式移动光标。在本节中将介绍拷贝、剪切及黏贴,Undo/Redo,以及搜索的操作。闲话少说,我们开始吧!

一.拷贝、剪切及黏贴

  拷贝(Copy)、剪切(Cut)及黏贴(Paste) 是我们在做文本编辑时最常用的操作。Vim中也有相应的操作,只不过在Vim中它们的命名方式有所变化:Vim将cut称为delete,将copy称为yank,将paste仍称为paste。在用Vim编辑文本时Vim会在内存中开辟一块缓存将文本放入其中,所有对文本的编辑都将写入这块缓存中直至使用:write或:w保存编辑状态才将保存的结果写入硬盘。在进行剪切操作时,Vim将文本从缓存中"删除"(delete)并将其存入寄存器。在进行拷贝操作时,Vim从缓存中“拉出”(yank)相应的文本并将其存入寄存器中。

  在Normal模式下Vim中剪切(delete),拷贝(yank)及黏贴(Paste)操作的相应命令为:d, y, p。在Vim中你可以将剪切和拷贝的操作分别应用于一个字符,一个词,一行文本,以及一段文本。相应的命令分别为:

操作对象  |  剪切 |   拷贝

----------|-------|----------

一个字符  |  dl    |   yl       (注意是小写字母L,而不是数字1)

----------|-------|-----------

一个词     |  dw  |    yw

----------|-------|-----------

一行文本  |  dd   |    yy

----------|-------|-----------

一段文本  |  dap |   yap

----------|-------|----------

  例如若要剪切某个词并将其黏贴到另一个位置,只需将光标移动到该词,按下dw,然后将光标移动到需要黏贴的位置并按下p。同时在黏贴时Vim提供两种方式:

p(小写)    黏贴在当前光标位置之后

P(大写)    黏贴在当前光标位置之前

二.Undo/Redo

  与拷贝,剪切和黏贴类似,Undo/Redo也是我们在编辑文本时常用的操作。在Vim中按u进行Undo操作,按ctrl-r进行Redo操作  。非常简单!理论上在Vim中可以进行无限层级的Undo/Redo操作。同时Vim提供了一些高级的Undo/Redo操作,即earlier和later命令。例如我想回到四分钟以前的状态,只需执行命令:earlier 4m 。然后我又想前进到30秒后的状态,则执行命令:later 30s 。刚才的两个例子用时间点做参考,那么如果我想回到之前五次修改之前的状态,则执行命令:undo 5 .Vim以树形结构的方式组织undo list,可以用命令:undolist查看。所以从某种意义上讲,Vim不仅是一个文本编辑器,而且还是一台时光机(time machine)。

三.搜索操作

  Vim中内置了一个强大的搜索引擎。搜索时只需在Normal模式下按/键,键入所要搜索的词并按回车键即可,例如要搜索文本中是否含有hello,只需执行/hello<cr>即可。若文本中含有多个要搜索的词,按n跳转到该词下一处出现的位置,按N跳转到该词前一处出现的位置。在Vim中搜索时可以通过一些参数的设置来定制搜索的方式,下面介绍三个搜索相关的参数。

set incsearch    如果你只是模糊的记得要搜索的词,可以打开incsearch,那么你在键入要搜索的词过程中Vim就进行搜索

set ignorecase    搜索时忽略大小写

set smartcase    如果你键入的要搜索的词只含小写字母,则搜索时忽略大小写。否则搜索时考虑大小写。

  另外如果我想确切的搜索某个词,则需求助转义字符\。如我想确切的搜索hello这个词,需要执行/\<hello\>并按回车。若搜索文本中的数字,则执行\/d命令。/\d\+ 命令搜索一个或多个数字。/\d\*搜索零个或多个数字。我想熟悉正则表达式的同学应该对此不陌生。

参考文献

1.http://www.swaroopch.com/notes/Vim