<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>奔向远方 &#187; vi</title>
	<atom:link href="http://www.tisswb.com/archives/tag/vi/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tisswb.com</link>
	<description>结婚开始倒计时了，高兴~</description>
	<lastBuildDate>Tue, 19 Jul 2011 09:30:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>vi编辑器命令大全(Unix/Linux)</title>
		<link>http://www.tisswb.com/archives/73.html</link>
		<comments>http://www.tisswb.com/archives/73.html#comments</comments>
		<pubDate>Tue, 24 Jun 2008 15:10:57 +0000</pubDate>
		<dc:creator>笨二十一</dc:creator>
				<category><![CDATA[Linux/Unix]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[vi]]></category>

		<guid isPermaLink="false">http://www.tisswb.cn/?p=73</guid>
		<description><![CDATA[　　文本编辑器是所有计算机系统中最常用的一种工具。UNIX下的编辑器有ex,sed和vi等，其中，使用最为广泛的是vi，而vi命令繁多，论坛里好像这方面的总结不多，以下稍做总结，以资共享！渴望更正和补充！
进入vi的命令
vi filename :打开或新建文件，并将光标置于第一行首
vi +n filename ：打开文件，并将光标置于第n行首
vi + filename ：打开文件，并将光标置于最后一行首
vi +/pattern filename：打开文件，并将光标置于第一个与pattern匹配的串处
vi -r filename ：在上次正用vi编辑时发生系统崩溃，恢复filename
vi filename&#8230;.filename ：打开多个文件，依次进行编辑
移动光标类命令
h ：光标左移一个字符
<span class="readmore"><a href="http://www.tisswb.com/archives/73.html" title="vi编辑器命令大全(Unix/Linux)" target="_blank">阅读全文——共5948字</a></span>]]></description>
			<content:encoded><![CDATA[<p>　　文本编辑器是所有计算机系统中最常用的一种工具。UNIX下的编辑器有ex,sed和vi等，其中，使用最为广泛的是vi，而vi命令繁多，论坛里好像这方面的总结不多，以下稍做总结，以资共享！渴望更正和补充！</p>
<p>进入vi的命令<br />
vi filename :打开或新建文件，并将光标置于第一行首<br />
vi +n filename ：打开文件，并将光标置于第n行首<br />
vi + filename ：打开文件，并将光标置于最后一行首<br />
vi +/pattern filename：打开文件，并将光标置于第一个与pattern匹配的串处<br />
vi -r filename ：在上次正用vi编辑时发生系统崩溃，恢复filename<br />
vi filename&#8230;.filename ：打开多个文件，依次进行编辑</p>
<p>移动光标类命令<br />
h ：光标左移一个字符<br />
l ：光标右移一个字符<br />
space：光标右移一个字符<br />
Backspace：光标左移一个字符<br />
k或Ctrl+p：光标上移一行<br />
j或Ctrl+n ：光标下移一行<br />
Enter ：光标下移一行<br />
w或W ：光标右移一个字至字首<br />
b或B ：光标左移一个字至字首<br />
e或E ：光标右移一个字至字尾<br />
) ：光标移至句尾<br />
( ：光标移至句首<br />
}：光标移至段落开头<br />
{：光标移至段落结尾<br />
nG：光标移至第n行首<br />
n+：光标下移n行<br />
n-：光标上移n行<br />
n$：光标移至第n行尾<br />
H ：光标移至屏幕顶行<br />
M ：光标移至屏幕中间行<br />
L ：光标移至屏幕最后行<br />
0：（注意是数字零）光标移至当前行首<br />
$：光标移至当前行尾</p>
<p>屏幕翻滚类命令<br />
Ctrl+u：向文件首翻半屏<br />
Ctrl+d：向文件尾翻半屏<br />
Ctrl+f：向文件尾翻一屏<br />
Ctrl＋b；向文件首翻一屏<br />
nz：将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。</p>
<p>插入文本类命令<br />
i ：在光标前<br />
I ：在当前行首<br />
a：光标后<br />
A：在当前行尾<br />
o：在当前行之下新开一行<br />
O：在当前行之上新开一行<br />
r：替换当前字符<br />
R：替换当前字符及其后的字符，直至按ESC键<br />
s：从当前光标位置处开始，以输入的文本替代指定数目的字符<br />
S：删除指定数目的行，并以所输入文本代替之<br />
ncw或nCW：修改指定数目的字<br />
nCC：修改指定数目的行</p>
<p>删除命令<br />
ndw或ndW：删除光标处开始及其后的n-1个字<br />
do：删至行首<br />
d$：删至行尾<br />
ndd：删除当前行及其后n-1行<br />
x或X：删除一个字符，x删除光标后的，而X删除光标前的<br />
Ctrl+u：删除输入方式下所输入的文本</p>
<p>搜索及替换命令<br />
/pattern：从光标开始处向文件尾搜索pattern<br />
?pattern：从光标开始处向文件首搜索pattern<br />
n：在同一方向重复上一次搜索命令<br />
N：在反方向上重复上一次搜索命令<br />
：s/p1/p2/g：将当前行中所有p1均用p2替代<br />
：n1,n2s/p1/p2/g：将第n1至n2行中所有p1均用p2替代<br />
：g/p1/s//p2/g：将文件中所有p1均用p2替换</p>
<p>选项设置<br />
all：列出所有选项设置情况<br />
term：设置终端类型<br />
ignorance：在搜索中忽略大小写<br />
list：显示制表位(Ctrl+I)和行尾标志（$)<br />
number：显示行号<br />
report：显示由面向行的命令修改过的数目<br />
terse：显示简短的警告信息<br />
warn：在转到别的文件时若没保存当前文件则显示NO write信息<br />
nomagic：允许在搜索模式中，使用前面不带“”的特殊字符<br />
nowrapscan：禁止vi在搜索到达文件两端时，又从另一端开始<br />
mesg：允许vi显示其他用户用write写到自己终端上的信息</p>
<p>最后行方式命令<br />
：n1,n2 co n3：将n1行到n2行之间的内容拷贝到第n3行下<br />
：n1,n2 m n3：将n1行到n2行之间的内容移至到第n3行下<br />
：n1,n2 d ：将n1行到n2行之间的内容删除<br />
：w ：保存当前文件<br />
：e filename：打开文件filename进行编辑<br />
：x：保存当前文件并退出<br />
：q：退出vi<br />
：q!：不保存文件并退出vi<br />
：!command：执行shell命令command<br />
：n1,n2 w!command：将文件中n1行至n2行的内容作为command的输入并执行之，若不指定n1，n2，则表示将整个文件内容作为command的输入<br />
：r!command：将命令command的输出结果放到当前行</p>
<p>寄存器操作<br />
&#8220;?nyy：将当前行及其下n行的内容保存到寄存器？中，其中?为一个字母，n为一个数字<br />
&#8220;?nyw：将当前行及其下n个字保存到寄存器？中，其中?为一个字母，n为一个数字<br />
&#8220;?nyl：将当前行及其下n个字符保存到寄存器？中，其中?为一个字母，n为一个数字<br />
&#8220;?p：取出寄存器？中的内容并将其放到光标位置处。这里？可以是一个字母，也可以是一个数字<br />
ndd：将当前行及其下共n行文本删除，并将所删内容放到1号删除寄存器中。</p>
<p>VI的使用<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>一、插入文本<br />
┌──┬────────────┐<br />
│命令│描述　　　　　　　　　　│<br />
├──┼────────────┤<br />
│i 　│在当前字符前插入文本　　│<br />
├──┼────────────┤<br />
│I 　│在行首插入文本 　　　 　│<br />
├──┼────────────┤<br />
│a 　│在当前字符后添加文本　　│<br />
├──┼────────────┤<br />
│A 　│在行末添加文本　　　　　│<br />
├──┼────────────┤<br />
│o 　│在当前行后面插入一空行　│<br />
├──┼────────────┤<br />
│O 　│在当前行前面插入一空行　│<br />
├──┼────────────┤<br />
│R 　│以改写方式输入文本　　　│<br />
└──┴────────────┘<br />
二、移动光标<br />
┌─────┬───────────┐<br />
│命令　　　│描述　　　　　　　　　│<br />
├─────┼───────────┤<br />
│j或下箭头 │向下移动一行　　　　　│<br />
├─────┼───────────┤<br />
│k或上箭头 │向上移动一行　　　　　│<br />
├─────┼───────────┤<br />
│h或左箭头 │左移一个字符　　　　　│<br />
├─────┼───────────┤<br />
│l或右箭头 │右移一个字符　　　　　│<br />
├─────┼───────────┤<br />
│w 　　　　│右移一个词　　　　　　│<br />
├─────┼───────────┤<br />
│W 　　　　│右移一个以空格分隔的词│<br />
├─────┼───────────┤<br />
│b 　　　　│左移一个词　　　　　　│<br />
├─────┼───────────┤<br />
│B 　　　　│左移一个以空格分隔的词│<br />
├─────┼───────────┤<br />
│0 　　　　│移到行首　　　　　　　│<br />
│Ctrl-F　　│向前翻页　　　　　　　│<br />
├─────┼───────────┤<br />
│Ctrl-B　　│向后翻页　　　　　　　│<br />
├─────┼───────────┤<br />
│nG　　　　│到第n行 　　　　　　　│<br />
├─────┼───────────┤<br />
│G 　　　　│到最后一行　　　　　　│<br />
└─────┴───────────┘<br />
三、替换文本<br />
┌─────┬──────┐<br />
│命令　　　│描述　　　　│<br />
├─────┼──────┤<br />
│$ 　　　　│到行尾　　　│<br />
├─────┼──────┤<br />
│( 　　　　│到句子的开头│<br />
├─────┼──────┤<br />
│) 　　　　│到句子的末尾│<br />
├─────┼──────┤<br />
│{　 　　　│到段落的开头│<br />
├─────┼──────┤<br />
│}　　 　　│到段落的末尾│<br />
└─────┴──────┘</p>
<p>四、删除文本<br />
┌───┬───────────┐<br />
│命令　│描述 　　　　　　 　　│<br />
├───┼───────────┤<br />
│r 　　│替换一个字符 　　　　 │<br />
├───┼───────────┤<br />
│c 　　│修改文本直到按下Esc健 │<br />
├───┼───────────┤<br />
│cw　　│修改下一个词 　　　 　│<br />
├───┼───────────┤<br />
│cnw　 │修改接下来的n个词 　　│<br />
└───┴───────────┘<br />
五、文本编辑<br />
┌──┬──────────────────────┐<br />
│命寺│描述　　　　　　　　　　　　　　　　　　　　│<br />
├──┼──────────────────────┤<br />
│yy　│将一行文本移到缺省缓冲区中 　　　　 　　　　│<br />
├──┼──────────────────────┤<br />
│yn　│将下一个词移到缺省缓冲区中 　　 　　　　　　│<br />
├──┼──────────────────────┤<br />
│ynw │将后面的n个词移到缺省缓冲区中　　　　 　　　│<br />
├──┼──────────────────────┤<br />
│p 　│如果缺省缓冲区中包含一行文本，则在当前　　　│<br />
│　　│行后面插入一个空行井将缺省缓冲区中的声　　　│<br />
│　　│容粘贴到这一行中；如果缺省缓冲区中包含　　　│<br />
│　　│多个词，把这些词粘贴到光标的右边．　　　　　│<br />
├──┼──────────────────────┤<br />
│P 　│如果缺省缓冲区中包含一行文本，则正当前 　 　│<br />
│ 　 │行前面插入一个空行井将缺省缓冲区中的内 　 　│<br />
│　　│容粘贴到这一行中；如果缺省缓冲区中包含 　　 │<br />
│ 　 │多个词，把这些词粘贴到光标的左边 　 　</p>
<p> </p>
<p> </p>
<p>　　│<br />
└──┴──────────────────────┘<br />
六、保存退出<br />
┌───────────┬───────────────┐<br />
│命令　　　　　　　　　│描述　　　　　　　　　　　　　│<br />
├───────────┼───────────────┤<br />
│zz　　　　　　　　　　│保存并退出　　　　　　　　　　│<br />
├───────────┼───────────────┤<br />
│:w filename　　　　 　│写入文件　　　　　　　　　 　 │<br />
├───────────┼───────────────┤<br />
│:W　　　　　　　　　　│写入文件　　　　　　　　　　　│<br />
├───────────┼───────────────┤<br />
│:x　　　　　　　　　　│保存(如果当前文件修改过)并退出│<br />
├───────────┼───────────────┤<br />
│:q!　　　　　　　　　 │不保存文件，直接退出　　 　　 │<br />
├───────────┼───────────────┤<br />
│:q　　　　　　　　　　│退出vi　　　　　　　　　　　　│<br />
└───────────┴───────────────┘</p>
<p>VI常用技巧</p>
<p>VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了，但是因为它的命令集众多，很多人都不习惯使用它，其实您只需要掌握基本命令，然后加以灵活运用，就会发现它的优势，并会逐渐喜欢使用这种方法。本文旨在介绍VI的一些最常用命令和高级应用技巧。</p>
<p>一、基本命令介绍</p>
<p>&#8212;- 1．光标命令</p>
<p>k、j、h、l——上、下、左、右光标移动命令。虽然您可以在Linux中使用键盘右边的4个光标键，但是记住这4个命令还是非常有用的。这4个键正是右手在键盘上放置的基本位置。<br />
nG——跳转命令。n为行数，该命令立即使光标跳到指定行。<br />
Ctrl+G——光标所在位置的行数和列数报告。<br />
w、b——使光标向前或向后跳过一个单词。<br />
&#8212;- 2．编辑命令<br />
i、a、r——在光标的前、后以及所在处插入字符命令(i=insert、a=append、r=replace)。<br />
cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。<br />
x、d$、dd——删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令。<br />
&#8212;- 3．查找命令<br />
&#8212;- /string、?string——从光标所在处向后或向前查找相应的字符串的命令。<br />
&#8212;- 4．拷贝复制命令<br />
&#8212;- yy、p——拷贝一行到剪贴板或取出剪贴板中内容的命令。</p>
<p>二、常见问题及应用技巧</p>
<p>&#8212;- 1．在一个新文件中读/etc/passwd中的内容，取出用户名部分。<br />
&#8212;- vi file<br />
&#8212;- :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd<br />
&#8212;- :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。<br />
&#8212;- 您也可以在指定的行号后读入文件内容，例如使用命令“:3r /etc/passwd”从新文件的第3行开始读入 /etc/passwd的所有内容。<br />
&#8212;- 我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。<br />
&#8212;- #cat squid.conf.default | grep -v ^$ | grep -v ^#</p>
<p>&#8212;- 2．在打开一个文件编辑后才知道登录的用户对该文件没有写的权限，不能存盘，需要将所做修改存入临时文件。<br />
&#8212;- vi file<br />
&#8212;- :w /tmp/1 保存所做的所有修改，也可以将其中的某一部分修改保存到临时文件，例如仅仅把第20～59行之间的内容存盘成文件/tmp/1，我们可以键入如下命令。<br />
&#8212;- vi file<br />
&#8212;- :20,59w /tmp/1</p>
<p>&#8212;- 3．用VI编辑一个文件，但需要删除大段的内容。<br />
&#8212;- 首先利用编辑命令“vi file”打开文件，然后将光标移到需要删除的行处按Ctrl+G显示行号，再到结尾处再按Ctrl+G，显示文件结尾的行号。<br />
&#8212;- :23,1045d 假定2次得到的行号为23和1045，则把这期间的内容全删除，也可以在要删除的开始行和结束行中用ma、mb命令标记，然后利用“:a,bd”命令删除。</p>
<p>&#8212;- 4．在整个文件的各行或某几行的行首或行尾加一些字符串。<br />
&#8212;- vi file<br />
&#8212;- :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。<br />
&#8212;- :%s/$/some string/g 在整个文件每一行的行尾添加“some string”。<br />
&#8212;- :%s/string1/string2/g 在整个文件中替换“string1”成“string2”。<br />
&#8212;- :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。<br />
&#8212;- 注意: 其中s为substitute，%表示所有行，g表示global。</p>
<p>&#8212;- 5．同时编辑2个文件，拷贝一个文件中的文本并粘贴到另一个文件中。<br />
&#8212;- vi file1 file2<br />
&#8212;- yy 在文件1的光标处拷贝所在行<br />
&#8212;- :n 切换到文件2 (n=next)<br />
&#8212;- p 在文件2的光标所在处粘贴所拷贝的行<br />
&#8212;- :n 切换回文件1</p>
<p>&#8212;- 6．替换文件中的路径。<br />
&#8212;- 使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路径/usr/bin换成/bin。也可以使用命令“:%s//usr/bin//bin/g”实现，其中“”是转义字符，表明其后的“/”字符是具有实际意义的字符，不是分隔符。</p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tisswb.com/archives/73.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

