设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

10个你必须掌握的超酷VI命令技巧

2013-6-27 14:29| 发布者: 红黑魂| 查看: 1639| 评论: 0|来自: 编程文库

摘要: 摘要:大部分Linux开发者对vi命令相当熟悉,可是遗憾的是,大部分开发者都只能掌握一些最常用的Linuxvi命令,下面介绍的10个vi命令虽然很多不为人知,但是在实际应用中又能让你大大提高效率。在使用vi 编辑器时—无 ...

重放搜索模式

当在文件中搜索要替换的模式时,可以让vi 把要匹配的任何模式保存在缓冲区中;然后,在执行替换时,可以用缓冲区引用号重放它们。方法是把模式放在 \(和 \)之间,这会指示vi 把模式放在编号的缓冲区(1 到 9)中。在执行替换时,可以用缓冲区引用号 \1 到 \9 引用这些缓冲区。

例如,假设要在清单 7 所示的文件中搜索以单词 Martin 开头的行并对每个匹配添加前缀 Mr 和后缀 Wicks,那么进入命令模式,输入vi 命令 :%s/^\(Martin\)/Mr \1 Wicks/g,然后按回车。

Martin is an IT consultant. Martin likes

snowboarding and mountain biking. Martin has

worked on UNIX systems for over 15 years. Martin also

worked for many years before that on mainframes.

Martin lives in London.

~

~

~

~

:%s/^\(Martin\)/Mr \1 Wicks/g

下面把这个命令分解开解释一下:

:%s —指示vi 执行替换。

/—模式分隔符。

^\(Martin\)—寻找以字符串 Martin 开头的行并把这个字符串保存在缓冲区 1 中。

/—模式分隔符。

Mr \1 Wicks —把找到的字符串替换为字符串 Mr,加上缓冲区 1 中的内容,再加上字符串 Wicks。

/—模式分隔符。

g —全局修改(即修改所有匹配的地方)

在搜索和替换字符串中都可以使用缓冲区引用。

Mr Martin Wicks is an IT consultant. Martin likes

snowboarding and mountain biking. Martin has

worked on UNIX systems for over 15 years. Martin also

worked for many years before that on mainframes.

Mr Martin Wicks lives in London.

~

~

~

~

:%s/^\(Martin\)/Mr \1 Wicks/g

书签

可以让vi 在文件中的特定位置放上书签。方法是按 Escape 键,再按 M 键,然后输入另一个表示书签引用的字母表字符。因此,最多可以有 26 个书签,分别名为 a 到z。要返回到上一书签,按 Escape 键,再按反撇号(`),然后输入书签引用字符。

例如,按 Escape 之后按 M 和 A 键,就会把当前游标位置保存在书签 a 中。在编辑会话中,以后希望返回到这个游标位置时,只需按 Escape,然后输入 `A。可以使用双反撇号(“)命令在当前书签和前一个书签之间切换。

查找、更新、查找下一个、重复

在vi 编辑器中,最有用的搜索/替换特性之一是查找与某个模式匹配的字符串,更新它,然后继续搜索下一个匹配的字符串,然后选择是否以相同方式更新它。这与 Microsoft® Word 中的查找下一个/替换功能很相似。您可能已经知道可以在vi 中搜索字符串模式,方法是进入命令模式,输入/search_pattern(其中的 search_pattern 是字符串或正则表达式),然后按回车。这样做就会找到与指定的模式匹配的第一个字符串。在此之后,可以在找到的文本上执行任何操作。例如,按 Escape,再按 C 和 W 键,再输入更多文本,就会把找到的字符串替换为另一个单词。

要想快速地找到与模式匹配的下一个地方,应该按 Escape,然后按 N 键。在找到下一个匹配时,可以使用点号键(.)在这个位置重复最近的文本操作,比如前一个示例中使用的修改单词(cw)操作。然后,可以使用这些键继续寻找其他匹配(n)并选择重复文本操作(.),操作方式与使用 Word 中的查找下一个/替换功能很相似。

切换大小写

在vi 中,可以切换游标下的字母字符的大小写,方法是按 Escape,然后按波浪号键(~)。这会在小写和大写之间来回切换。按着这个键,移动游标经过行中的每个字符,就会切换遇到的每个字母字符的大小写。可以在波浪号前面输入一个数字,表示希望改变多少个字母字符的大小写。

筛选

您可能知道,在vi 中按 Escape,输入 :!command(其中的 command 是要执行的 UNIX 命令),然后按回车,就可以在 shell 中执行命令。例如,:!pwd 显示编辑会话当前的工作目录。

但是,还可以把文件的一部分作为标准输入发送给 UNIX 命令,并用产生的输出替换编辑缓冲区中的相同部分。例如,如果希望在vi 会话内对清单 9 所示的整个文件进行排序,可以按 Escape,输入 :1,$!sort 并按回车,这让vi 把从第一行到文件末尾($)的所有内容传递给 sort 命令,用输出替换指定的部分。

另外,还可以在 shell 命令前面加上从当前游标位置开始希望操作的行数。方法是按 Escape,然后输入指定行数的数字,然后输入两个惊叹号(!!),最后输入 UNIX 命令。

可以使用管道分隔符(|)把 UNIX 命令连接在一起,从而在vi 会话中执行复杂强大的筛选。例如,假设要把当前vi 会话的编辑缓冲区中的文件内容替换为每行的第一个空格分隔的字段,按升序排序并转换为大写,那么在按 Escape 之后输入:

:1,$!awk ‘{print $1}’ | sort | tr [:lower:] [:upper:]

保存部分内容

可以保存当前编辑的文件的部分内容,方法是按 Escape,然后输入 :start,endw file,其中的 start 是当前文件中要保存的第一行,end 是要保存的最后一行,w表示希望写到另一个文件中(或者覆盖现有的文件),file 是指定的部分要保存到的文件。对于最后一行,可以使用$表示文件的末尾。可以在w后面使用两个大于号(>>)表示希望把内容附加到文件中而不是覆盖文件。清单 12 中的示例把第 6 到第 9 行(含)附加到文件/tmp/newfile 中。

       #

# Internet host table

#

::1     localhost

127.0.0.1       localhost       loghost

192.168.0.6     centos5

192.168.0.10    appserv

192.168.0.11    webserv

192.168.0.12    test

192.168.0.5     solaris10       # Added by DHCP

~

~

~

:6,9w >> /tmp/newfile

结束语
vi 编辑器是一个极其强大的工具,本文提供了一些技巧和诀窍,希望能够帮助您更高效地编辑文件。请记住,vi 还有更多不太为人所知的特性。祝工作愉快!

原文链接:http://wiki.itivy.com/?p=285

转自:编程文库 » 10个你必须掌握的超酷VI命令技巧


酷毙
1

雷人

鲜花
1

鸡蛋

漂亮

刚表态过的朋友 (2 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部