VIM小窍门.docx
上传人:qw****27 上传时间:2024-09-12 格式:DOCX 页数:9 大小:26KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

VIM小窍门.docx

VIM小窍门.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

VIM小窍门*12.1*单词替换替换命令可以在全文中用一个单词替换另一个单词::%s/four/4/g"%"范围前缀表示在所有行中执行替换。最后的"g"标记表示替换行中的所有匹配点。如果你有一个象"thirtyfour"这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成"thirty4"。要解决这个问题,用"\<"来指定匹配单词开头::%s/\<four/4/g显然,这样在处理"fourteen"的时候还是会出错。用"\>"来解决这个问题::%s/\<four\>/4/g如果你在编码,你可能只想替换注释中的"four",而保留代码中的。由于这很难指定,可以在替换命令中加一个"c"标记,这样,Vim会在每次替换前提示你::%s/\<four\>/4/gc在多个文件中替换假设你需要替换多个文件中的单词。你的一个选择是打开每一个文件并手工修改。另外,如果使用"记录-回放"命令会更快。假设你有一个包括有C++文件的目录,所有的文件都以".cpp"结尾。有一个叫"GetResp"的函数,你需要把它改名为"GetAnswer"。vim*.cpp启动Vim,用当前目录的所有C++文件作为文件参数。启动后你会停在第一个文件上。qq用q作为寄存器启动一次记录。:%s/\<GetResp\>/GetAnswer/g在第一个文件中执行替换。:wnext保存文件并移到下一个文件。q中止记录。@q回放q中的记录。这会执行又一次替换和":wnext"。你现在可以检查一下记录有没有错。999@q对剩下的文件执行q中的命令Vim会在最后一个文件上报错,因为":wnext"无法移到下一个文件上。这时所有的文件中的操作都完成了。备注:在回放记录的时候,任何错误都会中止回放的过程。所以,要注意保证记录中的命令不会产生错误。这里有一个陷阱:如果有一个文件不包含"GetResp",Vim会报错,而整个过程会中止,要避免这个问题,可以在替换命令后面加一个标记::%s/\<GetResp\>/GetAnswer/ge"e"标记通知":substitute"命令找不到不是错误。*12.2*把"Last,First"改成"FirstLast"你有如下样式的一个名字列表:Doe,JohnSmith,Peter你想把它改成:JohnDoePeterSmith这可以用一个命令完成::%s/\([^,]*\),\(.*\)/\2\1/我们把这个命令分解成几个部分。首先,很明显它是一个替换命令。"%"是行范围,表示作用于全文。这样替换命令会作用于全文的每一行。替换命令的参数格式是"from/to",正斜杠区分"from"模式和"to"字符串。所以,"from"部分是:\([^,]*\),\(.*\)第一对\(和\)之间的部分匹配"Last"\(\)匹配除逗号外的任何东西[^,]任意多次*匹配逗号,第二对\(和\)之间的部分匹配"First"\(\)匹配任意字符.任意多次*在"to"部分,我们有"\2"和"\1"。这些称为"反向引用"。它们指向前面模式中的\(和\)间的部分。"\2"指向模式中的第二对\(和\)间的部分,也就是"First"名(译者注:英文中LastName表示姓,即家族名,后面的FirstName表示名字)。"\1"指向第一对\(\),即"Last"名。你可以在替换部分使用多达9个反向引用。"\0"表示整个匹配部分。还有一些特殊的项可以用在替换命令中。请参阅|HYPERLINK"http://vcd.gro.clinux.org/doc/change.html"\l"sub-replace-special"sub-replace-special|。*12.3*排序在你的Makefile中常常会有文件列表。例如:OBJS=\version.o\pch.o\getopt.o\util.o\getopt1.o\inp.o\patch.o\backup.o要对这个文件列表排序可以用一个外部过滤命令:/^OBJSj:.,/^$/-1!sort这会先移到"OBJS"开头的行,向下移动一行,然后一行行执行过滤,直到遇到一个空行。你也可以先选中所有需要排序的行,然后执行"!sort"。那更容易一些,但如果有很多行就比较麻烦。上面操作的结果将是:OBJS=\backup.ogetopt.o\getopt1.o\inp.o\patch.o\pch.o\util.o\version.o\注意,列表中每一行都有一个续行符,但