学习vi编辑器 —— 高级编辑

2011-06-17 wcdj

 

(一) 定制 vi
(1) :set 命令
(2) .exrc 文件
(3) 替换环境
(二) 执行 UNIX 命令
(三) 编辑程序源代码
(1) 缩进控制
(2) 一个特殊的搜索命令 —— %
(3) 使用标志



(一) 定制 vi
vi 有许多可以在其内部进行设置的选项,这些设置影响它的操作方式。可以在 vi 中使用 ex 的 :set 命令修改这些选项。而且,无论 vi 什么时候启动,它都要读取主目录下的 .exrc 文件以获得进一步的操作指令。通过在该文件中放置 :set 命令,就可以在使用 vi 的任何时候改变它的操作方式。也可以在本地目录下建立 .exrc 文件来初始化需要在不同环境中使用的各个选项。

注意:vi 首先执行主目录下的 .exrc 文件,然后才执行当前目录下的 .exrc 文件

(1) :set 命令
有两种类型的选项可以使用 :set 命令进行修改:不是开就是关的触发选项和带数字或字符串的选项。
触发选项可以默认设置为开或关。
开启触发选项的命令为:
:set option
关闭触发选项的命令为:
:set nooption
例如:
:set ic           指定模式搜索忽略大小写
:set noic      要 vi 在搜索时不忽略大小写
一些选项具有分配给它们的值。
例如:window 选项设置屏幕“窗口”上所显示的行数。可以使用等号(=)对这些选项进行赋值:
:set window=20

在 vi 会话期间,可以检查 vi 所使用的选项。命令:
:set all                 会显示所有的选项,其中包括你设置的和 vi “选择”的默认值
:set option?       可以按名字找到任何单个选项的当前值
:set                      显示在 .exrc 文件或当前会话期间明确修改或设置过的选项

(2) .exrc 文件
控制 vi 环境的 .exrc 文件位于主目录下(首次登录时所在的目录)。可以用 vi 编辑器修改 .exrc 文件。
如果主目录下还没有 .exrc 文件,那么简单地使用 vi 创建一个即可。把将会在使用 vi 或 ex 时产生影响的命令输入到该文件中。

注意:由于 .exrc 文件是由 ex 在进入可视模式之前读入的,因此在 .exrc 文件中的命令前面不需要有冒号。

(3) 替换环境
除了读取主目录下的 .exrc 文件外,还可以让 vi 读取当前目录下名为 .exrc 的文件。这样可以对那些适用于特殊项目的选项进行设置。
注意:
方法1:可以在主目录下的 .exrc 文件中设置某些选项,而在本地目录中取消这些设置。
方法2:还可以通过把选项设置保存到不同于 .exrc 文件中,然后再使用 :so 命令(so 是 source 的缩写)读取该文件来定义另外的 vi 环境。

注意:所有 vi 的现有版本中,在 vi 读取当前目录下的 .exrc 文件前,必须先在主目录下的 .exrc文件中设置 exrc 选项,即 set exrc。这种机制可防止其他人在用户的工作目录下放置可能会影响系统安全的 .exrc 文件。

(二) 执行 UNIX 命令
在 vi 中进行编辑时,可以显示或读取任何 UNIX 命令的执行结果。
感叹号(!)可指定 vi 创建一个 shell 并把它后面的内容看成 UNIX 命令:
: ! command
例如:如果你正在进行编辑想在没有退出 vi 的情况下看一下时间或日期,则可以输入:
: ! date        
时间和日期就会显示在屏幕上,按下 RETURN 键可继续在文件中的同一个位置进行编辑。

如果想在一行中给出多个 UNIX 命令而又不想在中间返回 vi 编辑环境,则可以使用 ex 命令创建一个 shell:
: sh
想退出 shell 并返回 vi 时,输入 CTRL-D。

为了把 UNIX 命令的执行结果读取到文件中,可以把 :read 和 UNIX 调用结合在一起使用。例如:
: r !date             将把系统的日期信息读取到文件中
通过在 :r 命令前加上行地址,可以把命令的执行结果读取到文件中任何想要的位置。默认情况下,将读取到当前行的后面。

(三) 编辑程序源代码
(1) 缩进控制
程序源代码与普通文本最重要的区别之一是:源代码使用缩进的方式。
缩进显示了程序的逻辑结构:在这种方式下语句被分为许多块。
vi 提供自动缩进控制:
: set autoindent
现在,如果使用空格或制表符对一行进行了缩进,接下来的行将会自动按同样的大小进行缩进。在输入完第一个缩进的行按下 RETURN 键以后,光标就会到达下一行并自动缩进与上一行同样的距离。

CTRL-T 实现另一个级别的缩进
CTRL-D 取消一个缩进级别
注意:CTRL-T 和 CTRL-D 要在插入模式下输入(而不是命令模式)。

>> 和 << 命令在缩进源代码时也很有用。
默认情况下,>> 把行向右移动8个空格(即,添加8个空格的缩进),<< 把行向左移动8个空格。
注意:可以通过在 >> 或 << 前面输入数字来移动多行。例如:
5>>       在命令模式下输入,将会移动该段落中的前5行

默认情况下移动8个空格(向左向右)。该默认可以修改:
:set shiftwidth=4

由于我们常会将一个或多个空格误认为制表符,因此有时缩进不能按期望的方式进行。显示空白符的方法:
:set list
这将改变屏幕显示,使制表符显示为控制符 ^I,行尾显示为 $。
通过这种方式可以识别真正的空格,还能看到行尾的额外空格。
临时的等价命令是    : l
: 5, 20 l              会显示第5行到第20行,并显示出制表符和行尾符

(2) 一个特殊的搜索命令 —— %
字符 (、[、{ 和 < 都可以称为开括号,当光标位于这些字符中的一个时,按下 % 键 就会把光标从开括号向前移动到对应的闭括号 —— )、]、} 和 >。
同样,如果光标位于这些闭括号字符中的一个,按下 % 将把光标向后移动到对应的开括号字符上。(即,可以来回切换)
vi 在搜索括号字符时十分灵活。如果光标不在括号字符上,在按下 % 后,vi 将会在当前行中向前寻找它发现的第一个开或闭括号字符,然后移动到与之相匹配的那个字符。

另一个发现匹配括号的技巧是启用下面的选项:
:set showmatch
与 % 不同,在插入模式时设置 showmatch(或它的的缩写 sm)将十分有用。当输入 ) 或 } 时,光标在返回当前位置之前将会短暂地移回相匹配的 ( 或 { 。

(3) 使用标志
大型 C 或 C++ 程序汇中的源代码通常会分布在几个文件中。有时,要记住哪个文件包含哪个函数定义是 困难的。为了简化这些处理,可以把称为 ctags 的 UNIX 命令与 vi 的 :tag 命令结合在一起使用。

可在 UNIX 命令行上调用 ctags 命令,它的目的是创建信息文件,vi 可以使用该文件来确定哪个文件定义了哪个函数。
: !ctags file.c      
该命令将在当前目录下创建一个名为“tags”的文件,该文件包含有关在 file.c 中定义的函数的信息。
: !ctags *.c
将创建描述该目录下所有 C 源文件的 tags 文件。
现在假设 tags 文件包含能组成一个 C 程序的所有源文件的信息,并且我们想查看或编辑程序中的某个函数,但是并不知道该函数的位置。在 vi 内部,下述命令:
: tag name
将查看 tags 文件来寻找定义 name 函数的文件,然后将读取该文件并把光标定位到定义 name 函数的行上。

也可以在 vi 命令模式下使用 tag 功能。把光标定位到所要查找的标识符上,然后输入 ^] ,vi 将会搜索 tag 并移动到定义该标识符的文件。
注意:要当心光标放置的位置,vi 使用光标下面从当前光标位置开始的“单词”,而不是包含光标的整个单词。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值