学习vi编辑器 —— 基本编辑命令的扩展

2011-06-09 wcdj

 

(一) 启动 vi 时的选项
(二) 利用缓冲区
(三) 标记自己的位置


(一) 启动 vi 时的选项
(1) 前进到指定位置
$ vi +n file                          打开文件到第n行
$ vi + file                            打开文件到最后一行
$ vi +/pattern file             打开文件到模式首次出现的位置

注意:
(1) 根据POSIX标准,vi 应该使用 -c command 来代替上面所显示的 +command。通常考虑到向后兼容性,两个版本都可以使用。
(2) 如果搜索模式中含有空格,就必须用单引号或双引号把整个模式括起来。因为,shell 需要使用引号,而不是 vi。
例如:
+/"you make"
或者使用反斜杠(/)对空格进行转义:
+/you/ make

(2) 只读方式
$ vi -R file         以只读方式浏览文件(注意:是大写 R)
$view file          作用同上

注意:
(1) 通常 view 只是到 vi 的链接。
(2) 在只读状态下,如果决定要对文件进行编辑,那么可以通过在write命令上添加感叹号(!)来忽略只读方式。例如::w! 或者 :wq! 。

(3) 恢复缓冲区
有时系统会在你编辑文件时崩溃,通常上次写(保存)操作之后的所有编辑都会丢失,但是 -r 选项可使你恢复在系统崩溃时已编辑的缓冲区。
得到系统所有已保存的文件列表的命令:
$ ex -r
或者
$ vi -r

例如:为了在系统崩溃后恢复文件“practice”的已编辑缓冲区,可以输入:
$ vi -r practice

注意:在系统没有崩溃前,可以使用 :pre 命令来强迫系统保存缓冲区。如果已对文件进行了修改,然后发现由于没有写权限而不能保存修改,这时 :pre 命令是很有用的(方法2:也可以使用另一个名字或在有写权限的目录下保存文件的副本 :saveas ~/file_backup.sh)。

(二) 利用缓冲区
在进行编辑时,上一次的删除(d 或 x)或复制(y)操作都将保存在缓冲区(存储内存中的某个位置)中。你可以访问该缓冲区中的内容,也可以使用粘贴命令(p 或 P)把已保存的文本粘贴到自己的文件中。
(1) 恢复删除操作
vi 把前9次删除操作存储在编号缓冲区中,可以通过访问这些编号缓冲区中的任何一个来恢复前9次删除命令中的任何一个(或全部)。(注意:但是,小型的删除操作将不会保存在编号缓冲区中,例如,只删除行的某部分,这些删除只能在执行删除操作后立即使用 p 或 P 命令来恢复。)

恢复方法是:
由于前9次删除操作都保存在编号缓冲区中,因此可以恢复其中的任何一次操作。最后一次删除将保存在1号缓冲区中,倒数第二次在2号缓冲区中,依次类推。为了恢复删除操作,要输入 " (双引号),并使用数字指定缓冲区中的文本,然后给出粘贴命令。
例如:从2号缓冲区中恢复删除操作是:
"2p
2号缓冲区中的删除内容将粘贴到光标的后面。

注意:即使不能确定所要恢复的删除操作存放在哪个缓冲区中,也不必反复输入 "np 。如果你对 p 使用跟在 u 后面的重复命令(.),那么系统将自动增加缓冲区编号。因此,可以按如下方式搜索编号缓冲区:
"1pu.u.u 等等
这样就会依次把所有缓冲区中的内容粘贴到文件中。每输入一次 u,恢复的文本就被删除;当输入圆点(.)时,下一个缓冲区的内容就会恢复到文件中。一直输入 u 和 .,直到恢复了在寻找的文本为止。

(2) 复制到命名缓冲区
可以把 y 和 d 与26个命名缓冲区一起使用,这些缓冲区专门用于复制和删除文本。如果指定一个缓冲区来保存已复制的文本,那么就可以在编辑会话的任何时刻恢复该命名缓冲区的内容。

如果要把文本复制到一个命名缓冲区中,可在复制命令的前面加上双引号(")和表示你想使用的缓冲区名字的字符。
例如:
"dyy         复制当前行到 d 缓冲区中
"a7yy       复制接下来的7行到 a 缓冲区中
在把文本装入到指定缓冲区中并把光标移到新位置以后,可以使用 p 或 P 把文本粘贴回来。
"dP           粘贴 d 缓冲区中的内容到光标前(大写)
"ap           粘贴 a 缓冲区中的内容到光标后(小写)

注意:这里没有办法把缓冲区的部分内容粘贴出来,只能全部粘贴或不粘贴。

使用同样的过程,也可以把文本删除到指定缓冲区中:
"a5dd        删除5行到缓冲区 a 中

注意:如果使用大写字母来指定缓冲区的名字,那么所复制或删除的文本将追加到该缓冲区当前内容的 —— 后面。这使你在剪贴或复制时可以有所选择。
例如:
"zd)             删除从光标到当前句尾之间的文本,并将其保存到 z 缓冲区中。
2)                 向前移动两个句子
"Zy)             把下一个句子添加到 z 缓冲区中。

注意:你可以把更多的文本添加到命名缓冲区中,但是要当心:如果忘记了在复制或删除到缓冲区时使用大写格式指定其名字,那么将覆盖该缓冲区,因此在该缓冲区中累加的文本就会全部丢失。

(三) 标记自己的位置
在 vi 会话期间,可以使用一个不可见的“书签”来标记自己在文件中的位置。在其他地方编辑后可返回到所标记的位置。
在命令方式下输入:
mx         用 x ( x 可为任何字符 ) 标记当前位置
'x           ( 单引号 ) 移动光标到 x 所标记的行的首字符
`x           ( 反引号 ) 移动光标到 x 所标记的字符 —— 确切位置
''            ( 两个单引号 ) 返回到上一个标记或上下文所在行的开始
``            ( 两个反引号 ) 返回到上一个标记或上下文的 —— 确切位置

注意:位置标记只能在当前 vi 会话中设置,不能存储在文件中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值