全部博文(26)
分类: LINUX
2014-02-05 15:16:52
摘自:[美]Harley Hahn:Unix & Linux大学教程
十七、Vi文本编辑器
(1)命令模式和输入模式
在命令模式(command mode)中,所键入的键都被解释成命令。
在输入模式(input mode)中,键入的任何内容都直接插入到编辑模式中。
从输入模式到命令模式,按Esc键。
:set showmode 显示所处模式
(2)启动与退出Vi
vi [-rR] [file…]
vim -C [-rR] [file…]
只读方法启动:view,vi -R
恢复数据:vi -r [file...]
停止vi:
保存后退出,ZZ;
不保存而退出,:q! (要按Return键)
(3)vi使用屏幕的方式
1.如果需要,可以在vi中输入控制字符,需要按^V键,后面跟希望输入的字符。
2.向缓冲区插入制表符^I时,不显示^I而显示多个空格。
3.当屏幕变得错乱时,可以按^L键,重新显示各行。
(4)使用vi命令和ex命令
大多数vi命令都是单字母或双字母的形式,无需按
所有的ex命令都以一个:(冒号)开头。在按下
按下Esc键彻底取消这个命令;
使用特殊键(^W,
^X/^V,
(5)学习vi命令的策略
分类学习:
移动光标的命令,进入输入模式的命令,进行修改的命令。
(6)移动光标
1.移动小幅位置
移动1个位置:
上下移动光标:使用-(减号)和+(加号)命令。-键将光标移动到上一行的开头,按+键将光标移动到下一行的开头。
0(数字0)命令将光标移动到当前行的开头,$将光标移动到当前行的末尾,^(音调符号)将光标移动到当前行的第一个非空白符的字符上。
w命令将光标移动到下一个单词的第一个字符上,e命令将光标移动到下一个单词的最后一个字符上。b命令将光标移动到上一个单词的第一个字符上。所有这3条命令都在甸个标点符号字符处停止,如不想停止,用大写字母W、E、B。
2)大范围移动
使用圆括号从一个句子跳到另一个句子:) 向前移动到下一个句子; ) 向后移动到上一个句子。
同样,花括号命令可以从一个段落跳到另一个段落:{ 向前移动到下一个段落;} 向后移动到上一个段落。
3)句子、段落的定义
句子:一个字符串,以句号、逗号、问号或感叹号结尾,后面至少跟两个空格或一个新行字符。
段落:以一个空白行开头井以一个空白行结束的一块文本区域。
4)到屏幕几个部分
H 到顶部 M 到中部 L 到底部
5)重复次数
为了增强光标移动命令的功能,可以通过在命令前而键入一个数字来重复执行光标移动命令。
(7)在编辑缓冲区中移动
^F 上一屏
^B 下一屏
^D 下移半屏
^U 上移半屏
当在^D或^U命令前而键入数字时,该数字拥有完全不同的含义:设置这两条命令应该跳转的行数。
(8)跳转到前一位置
G 跳转到编辑缓冲区的末尾
使用``命令返回前一个位置(连续键入两个反引号)。
‘’(两个单引号)跳转到前一位置行的开头。
为了标识某一行,可以键入m,后面跟一个字母。这个字母就是这一行的名称。
为了返回一个标记行,可以键入`(反引号)或者一个’(单引号)跟这一行的名称。
(9)搜索模式
/(斜线)向下搜索
?(问号)向上搜索
n(next,下一个)命令采取和原始命令相同的方向进行搜索。N以相反命令搜索,可以使用正则表达式。
(10)使用行号
:set number / :set nonumber
如果行号关闭,则可以通过按下^G键查看文件位于何处。
可以用G命令跳到指定行。只需简单地键入行号,后面跟G即可。
也可以键入:(冒号),后面跟行号,再按
G和1G(或者gg)命令特别有用。
(11)插入文本
i 改变到输入模式:在当前光标位置前插入数据
a 改变到输入模式:在当前光标位置后插入数据
I 改变到输入模式:在当前行开头处插入数据
A 改变到输入模式:在当前行末尾处插入数据
o 改变到输入模式:在当前行下面插入一行
O改变到输入模式:在当前行上画插入一行
在输入模式时,有两件事要记住:
1)使用
2)可以通过在控制字符前加一个^V来插入一个特殊字符。
(12)修改文本
为了用一个字符替换另一个字符,可以键入r,后面接新字符。
如果需要重写不止一个字符,那么首先将光标移动到希望开始替换的位置,然后键入R。您将切换到输入模式,随后键入的每个字符都将替换当前行上的一个字符。在结束键入后,可以按〈Esc〉键返回到命令模式。
s(substitute, 替换)命令允许多个字符替换一个单个的字符。
C命令允许替换从当前光标位置到这一行末尾的所有字符。
替换一整行的命令:S和cc
c后面跟一个移动光标的命令,这一次键入的内容将替换从光标当前位置到移动命令所指定的位置之间的所有字符。
(13)替换文本
为了替换一个特定的模式,可以使用ex命令:s(Substitute .替换)。语法为:
:s/pattern/replace/
其中pattern是希望替换的模式,replace是替换文本。
以这种方式使用:s只替换当前行上该模式的第一个匹配项。为了替换所有的匹配项,需要在该命令的末尾键入字母g。例:
:s/Unix/Linux/g
如果希望Vi在进行改变之前先经过您的同意,则需要在该命令的末尾添加字母c(confirm,确认):
:s/Unix/Linux/c
可以将g和c组合使用。
为了删除模式,只需将替换为空即可。:s/Unix//g
为了方便起见,如果不在命令的末尾使用一个c或者g,则可以省略最后的/字符。
可以在冒号后面指定一个特定的行号,还可以使用两个用逗号分隔的行号表示范围。
将当前行到编辑缓冲区末尾都替换。:.,$s/pattern/replace/g
将编辑缓冲区的开头到当前行都替换。:1,.s/pattern/replace/g
将所有行中的都替换。:%s/pattern/replace/g
符号.(点号)代表当前行,$(美元符号)代表编辑缓冲区中的最后一行,%代表编辑缓冲区中的所有行。
(14)删除文本
x 删除当前光标处的字符
X 删除光标左边的字符
D 删除从当前光标到本行末尾的字符
dmove 删除从当前光标到move所给位置的字符
dd 删除当前行
另外,还有两个ex命令:
:lined 删除指定行
:line,lined 删除指定范围的行
(15)撤销或重复改变
u 撤销上一命令对编骤缓冲区的修改
U 恢复当前行(仅当没有离开这一行有效)
. 重复上一命令对编辑缓冲区的修改
(16)恢复删除
每当删除一行或多行文本时,Vi都将删除内容保存在二个特殊的存储区中,这个存储区称为编号缓冲区(numbered buffer)。vi中共有9个这样的缓冲区,编一号从1至9。在任何时候,都可以将一个编号缓冲区的内容插入到编辑缓冲区中。这样做时,需要键入一个”(双引号),后面跟着缓冲区的编号,再后跟一个p或者P命令(提醒:当处理行时,p命令在当前行的下面插入,P命令在当前行的上面插入)。
在撤销了第一次插入之后,如果使用.(点号)命令重复插入,那么vi将自动地将缓冲区编号加1。
(17)移动文本
vi总是在一个称为无名缓冲区的存储区中为上一次删除保存一份副本。在任何时候,都可以使用p和P命令将无名缓冲区中的内容复制到编辑缓冲区中。
另一个组合命令是deep,用来调换两个单词。
(18)复制文本
从一个位置向另一个位置复制文本包括3步。第一步.使用y, yy或Y命令将文本由编辑缓冲区复制到无名缓冲区中,但不删除原始文本。第二步,将光标移动到希望插入文本的位置。第三步,使用p或P命令执行插入。
当在不删除文本的情况下将文本复制到无名缓冲区时,我们称接出(yank)了文本。y和yy命令的工作方式与d和dd命令的工作方式相同。
(19)改变字母大小写
~ (波浪号)
(20)设置选项
:set [no]option...
:set option[=value]...
显示选项 :set [option [?]... |all ]
显示改变了默认值的选项 :set
(21)在键入过程中自动换行
可以设置wrapmargin(wm)选项,其语法为:
:set wrapmargin=n 其中n是从右边缘算起希望开始换行的位置
如果希望文本行尽可能的长,则可以将选项的值设置为1:
:set wm=1
希望文本缩进,可以打开autoindent(ai)选项。
(22)分隔与连接行
用r将空格替换为
用J将当前行与下一行合并成一个长行
(23)复制与移动行
x[,y]:coz [:co(copy)]
x[,y]:mz [:m(move)]
其中x,y,z都是行号。
(24)输入shell命令
:!command
:!! 暂停vi,执行前一条shell命令。
:sh 暂停vi,启动一个新shell。
(25)将文本中的数据插入到编辑缓冲区中
:[line]r file
其中line是行号,file是文件名称。
(26)将shell输出插入到编辑缓冲区中
:[line]r !program 在指定行中插入程序program的输出。
(27)使用程序处理数据
键入!,后面跟一个光标移动命令,再后跟程序的名称。从当前行到光标移动命令指向的位置之间的所有行都将发送给程序进行处理。
n!!program 在n个行上执行程序Program.
(28)将数据写入文件
:w 写入原始文件
:w file 写入file中
:w! file 覆盖一个已有的文件file。
:w>> file 将数据追加指定的文件中
(29)切换到一个新文件
:e file 编辑指定的文件
:e! 重新编辑当前文件,忽略自动检查
:e! file 编辑指定文件,忽略自动检查
(30)使用缩写
:ab [short long] 其中short是缩写,Long是缩写的原文。
删除一个缩写 :una short
在任何时候,通过输入:ab命令本身可以查看所有缩写列表。
(31)使用宏
允许创建自己定制的单字符命令,这些命令被称为宏。
用:map命令创建命令,其语法为 :map [x commands]
其中x是一个字符,commands是vi或者ee的命令序列。
宏的名称必须是单个字符,如果使用一个早已拥有其他含义的字符,那么这个字符将失去原本含义。
(32)初始化文件.exrc .vimrc
创建vi初始文件非常简单,只需插入希望每次启动vi时自动执行的ex命令即可。具体而言,应该包括所有经常使用的:set(选项)、:ab(缩写)以及:map(宏)命令。另外还可以使用:!命令来运行shell命令。