VI 命令 - 转载
时间:2006-05-30 来源:agg230
转自:
http://www.linuxbyte.net/view.php?skin=art&ID=3552
vi将命令模式和插入模式区分开来. 理解其中的区别是掌握vi的关键.vi启动时,开始处于命令模式,在这种模式下,我们可以在文件中到处移动,改变文本的某个特定区域, 剪切, 复制和粘贴文本,还有更多. 插入模式是指用户可以真正插入文本.换句话说,命令模式是用来在文件中移动,而插入模式是用来在文件中键入文本.
插入一个文件 :r <文件名>
例如,要插入文件/etc/motd, 可以敲 :r /etc/motd.这将把文件插入到光标处.如果你在r前面指定了一个数字,那么这条命令将把文件插入到那个位置.
查找文本 /<文本>将向前查找 ?<文本>将向后查找 ??或者//将重复上次查找 在UNIX下,这已经是个可爱的标准用法了. 而且, 在vi中 n将查找文本下一次的出现位置 N重复上次查找 不过逆转了查找的方向 在查找中可以使用规范式.
复制文本 这有点复杂.把这节拿出来,多看几遍;还有,一定要多做实验.
yy可以把一行文本拷贝到寄存器中(这里的寄存器是vi的术语,指可以存放剪切和 拷贝下来的东西的地方)
dd可以把一行 剪切下来放到寄存器里面. 你可以在yy或者dd前面用数字指明要拷贝或者剪切的行数.
p把文本插入到光标之后
P把文本插入到光标之前.如果寄存器中含有某一行的开头或结尾,这一行将会被放到另一合适的行上. Y是yy的快捷方式. 还有 y$ yH yM 等等,都是可以用的.
举例来说,如果要移动上一段的话,你可以把光标移到段落的开头,敲"a13dd,再把光标移到你想要放文本的地方,敲"ap,就可以把那段文本放到光标所在的行后面. 现在,大概你想要剪切和粘贴文本到不是行末尾的区域去.我们来看如何做到这一点:我们可以使用 m<字母> 命令来标记一个区域,这个字母可以和剪切/粘贴寄存器的字母相同,因为 它们是存在内存中的不同位置. 然后,敲"<寄存器>`<字母>[yy或者dd], 这里的寄存器就是要保存文本的那个寄存器,<字母>是用来标记的,yy和dd是你的操作.
u可以撤消你刚才的操作 U可以撤消你对当前行的修改(当然,一行对于一篇论文来说当然 很不够了)
:e!可以不保存修改而重新把你的文件调进来. 还有,你删除的文本都保存在从 0到9编号的寄存器里.所以 "p就可以把上第n次的删除文本粘贴出来.你可以按如下的 方法迅速地查看所有删除的文本. 先试一个,不对的话,敲u,再试下一个.(为加速这个过程,
这时vi中的.命令和通常的用法不一样了.它不是重复上次操作,而是试下一个寄存器,这样 你要做的无非就是: "1p u . u .,直到你撤消了你想撤消的删除操作)
:[m],[n]w <文件名>可以将从第m行到第n行之间的文本保存到<文件名>所指定的文件中 这种行序号方法几乎在所有的:命令下都可以使用.
如果你用命令:[m],[n] w >><文件名> 这些文本将添加到文件的后面
正在写论文, 系统崩溃了! 怎么办? 不要怕! 你会收到一封电子邮件,里面就是你的论文.敲入vi -r <文件名> (这个文件名就是系统崩溃时你正在编辑的文件)你就可以恢复出你的论文来.只敲 vi -r将把所有可能恢复的文件都列出来.
<% 或 >% 将{ ( 或[ 等符号括起来的文本都左移或右移 这时候 你必须把光标放在这些符号( { ( 或 [ ) 上面
:set sm会在你敲} ] 或 ) 显示出对应匹配的 { [ 或 ( 来
:ab email [email protected] 可以在你敲完email后,把那个没有缩写 的文本插入到文件中
:una email取消缩写
ZZ 保存之后退出
x 删除当前字符
X 删除前一个字符
) 下一句
( 上一句
} 下一段
{ 上一段
]] 下一节
[[ 上一节
0 行的开头
$ 行的末尾
" 保存到寄存器中
!! 重复上一次SHELL命令
< 1 >命令模式的输入选项(:命令)
:r <文件> 把<文件>读入到当前文档
:r !<命令> 把<命令>的输出插入到当前文本中
:nr <文件> 把<文件>插入到第n行
:l1,l2w <文件> 把第l1和第l2行之间的文本写到<文件>中去,如果没有指定<文件> vi就假定是当前文件,如果没有指定l1,l2,就假定是整个文件(就成了:w)
:w >> <文件> 添加到<文件>末尾. 也可以使用行号
:e! 重新编辑当前文件,忽略所有的修改
:e +n <文件> 从第n行开始编辑<文件>,如果超过了末尾,就从末尾开始编辑
:args 显示所有要编辑的文件
http://www.linuxbyte.net/view.php?skin=art&ID=3552
vi将命令模式和插入模式区分开来. 理解其中的区别是掌握vi的关键.vi启动时,开始处于命令模式,在这种模式下,我们可以在文件中到处移动,改变文本的某个特定区域, 剪切, 复制和粘贴文本,还有更多. 插入模式是指用户可以真正插入文本.换句话说,命令模式是用来在文件中移动,而插入模式是用来在文件中键入文本.
插入一个文件 :r <文件名>
例如,要插入文件/etc/motd, 可以敲 :r /etc/motd.这将把文件插入到光标处.如果你在r前面指定了一个数字,那么这条命令将把文件插入到那个位置.
查找文本 /<文本>将向前查找 ?<文本>将向后查找 ??或者//将重复上次查找 在UNIX下,这已经是个可爱的标准用法了. 而且, 在vi中 n将查找文本下一次的出现位置 N重复上次查找 不过逆转了查找的方向 在查找中可以使用规范式.
复制文本 这有点复杂.把这节拿出来,多看几遍;还有,一定要多做实验.
yy可以把一行文本拷贝到寄存器中(这里的寄存器是vi的术语,指可以存放剪切和 拷贝下来的东西的地方)
dd可以把一行 剪切下来放到寄存器里面. 你可以在yy或者dd前面用数字指明要拷贝或者剪切的行数.
p把文本插入到光标之后
P把文本插入到光标之前.如果寄存器中含有某一行的开头或结尾,这一行将会被放到另一合适的行上. Y是yy的快捷方式. 还有 y$ yH yM 等等,都是可以用的.
举例来说,如果要移动上一段的话,你可以把光标移到段落的开头,敲"a13dd,再把光标移到你想要放文本的地方,敲"ap,就可以把那段文本放到光标所在的行后面. 现在,大概你想要剪切和粘贴文本到不是行末尾的区域去.我们来看如何做到这一点:我们可以使用 m<字母> 命令来标记一个区域,这个字母可以和剪切/粘贴寄存器的字母相同,因为 它们是存在内存中的不同位置. 然后,敲"<寄存器>`<字母>[yy或者dd], 这里的寄存器就是要保存文本的那个寄存器,<字母>是用来标记的,yy和dd是你的操作.
u可以撤消你刚才的操作 U可以撤消你对当前行的修改(当然,一行对于一篇论文来说当然 很不够了)
:e!可以不保存修改而重新把你的文件调进来. 还有,你删除的文本都保存在从 0到9编号的寄存器里.所以 "p就可以把上第n次的删除文本粘贴出来.你可以按如下的 方法迅速地查看所有删除的文本. 先试一个,不对的话,敲u,再试下一个.(为加速这个过程,
这时vi中的.命令和通常的用法不一样了.它不是重复上次操作,而是试下一个寄存器,这样 你要做的无非就是: "1p u . u .,直到你撤消了你想撤消的删除操作)
:[m],[n]w <文件名>可以将从第m行到第n行之间的文本保存到<文件名>所指定的文件中 这种行序号方法几乎在所有的:命令下都可以使用.
如果你用命令:[m],[n] w >><文件名> 这些文本将添加到文件的后面
正在写论文, 系统崩溃了! 怎么办? 不要怕! 你会收到一封电子邮件,里面就是你的论文.敲入vi -r <文件名> (这个文件名就是系统崩溃时你正在编辑的文件)你就可以恢复出你的论文来.只敲 vi -r将把所有可能恢复的文件都列出来.
<% 或 >% 将{ ( 或[ 等符号括起来的文本都左移或右移 这时候 你必须把光标放在这些符号( { ( 或 [ ) 上面
:set sm会在你敲} ] 或 ) 显示出对应匹配的 { [ 或 ( 来
:ab email [email protected] 可以在你敲完email后,把那个没有缩写 的文本插入到文件中
:una email取消缩写
ZZ 保存之后退出
x 删除当前字符
X 删除前一个字符
) 下一句
( 上一句
} 下一段
{ 上一段
]] 下一节
[[ 上一节
0 行的开头
$ 行的末尾
" 保存到寄存器中
!! 重复上一次SHELL命令
< 1 >命令模式的输入选项(:命令)
:r <文件> 把<文件>读入到当前文档
:r !<命令> 把<命令>的输出插入到当前文本中
:nr <文件> 把<文件>插入到第n行
:l1,l2w <文件> 把第l1和第l2行之间的文本写到<文件>中去,如果没有指定<文件> vi就假定是当前文件,如果没有指定l1,l2,就假定是整个文件(就成了:w)
:w >> <文件> 添加到<文件>末尾. 也可以使用行号
:e! 重新编辑当前文件,忽略所有的修改
:e +n <文件> 从第n行开始编辑<文件>,如果超过了末尾,就从末尾开始编辑
:args 显示所有要编辑的文件
相关阅读 更多 +