vi 命令

VI 命令 - 转载
转自:
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            显示所有要编辑的文件

你可能感兴趣的:(职场,休闲)