学习vi编辑器7(中)

保存命令

vi和ex都有许多不同的用来保存长命令序列的方法,当调用这些已保存的序列中某一个时,只需输入几个字符(或者甚至一个字符)就会执行整个命令序列

单词缩写

定义一些缩写,无论什么时候在插入模式下输入缩写,vi将自动把它扩展为完整的文本,使用ex命令定义缩写:

:ab abbr phrase

只有在插入模式下把组成缩写的字符序列作为完整的单词输入(regexp中的\<和\>中),才会被扩展;单词内部的abbr将不会被扩展.

输入:unab abbr 就可以从此停止扩展

:ab    列出当前定义的缩写

在vim中如果递归的缩写,如

:ab GNU GNU's Not Unix

只会扩展一次

使用映射命令

除了是为vi命令模式而不是插入模式定义一个宏外,map命令的行为与ab极为相似

:map x sequence    把字符x定义为一系列编辑命令

:unmap x            取消为x定义的序列

:map                列出当前映射的所有字符

防止ex解释键

注意在定义映射时,不能只输入RETURN,ESC,BACKSPACE,DELETE之类的键作为映射命令的一部分,因为这些键已在ex内有含义了,如果要使用这些键作为被映射命令的一部分,需要使用CTRL-V来避开它的正常含义,例如

:map CTRL-A d10CTRL-VRETURN

这种用法适用于任何ex命令,不只是映射命令,在缩写或者替换命令也适用,例如

:ab 123 one^Mtwo^Mthree    ^M就是CTRL-VRETURN因为回车就是ASCII码中的第M个

:g/^Section/s//As you recall, in^M&    在所有以单词Section开头的行前面插入一个短语作为独立行

注意竖直条( | )无法被防止,因为它有作为多个ex命令分隔符的特殊含义

一些映射例子

:map ^A 0i/*^[$a*/^[    为c++加上注释

:map e ea             移动到单词的尾部添加文本

:map K dwwp            调换两个单词位置

:map q :w^M:n^M        保存当前文件

:map = xf)xn            重复搜索并删除单词或短语周围的圆括号

用于插入模式的映射键(仅仅在插入模式下和命令模式下可用,在一般模式下不能使用)

通常,映射键只适用于命令模式,因为在插入模式下各键都代表其本身,不应该将其映射为命令.但是,通过在map命令前加上感叹号(!),就可以强迫它忽略正常含义,从而在插入模式下产生映射,例如:

:map! + ^[kA:^[jA 在插入模式下将+映射成为在上一行末尾插入:再返回该行末尾继续输入

也可以取消这个映射:

:unmap! x    但是实际上不奏效,我也不知道怎么办,有方法啦:通过CTRL+V转义它

映射功能键(什么是功能键)

映射其他特殊键

许多键盘上带有与vi中的命令功能相同的特殊键,如HOME,END,PAGE UP,PAGE DOWN,由于这些按键也是有本来的意思的,于是跟ESC等按键一样,需要转义.例如:

:map CTRL-V HOME 1G    就可以将HOME键转义成为到第一排

映射多个输入键

:map =b a</emphasis>^[        将=b映射了,输入的时候只要连续的输入=b就可以达到替换的效果

@函数

使用@命令执行某个命名缓冲区的内容,例如

将cwgadfly^[删除放到g缓冲区(执行"gdd将该行删除到g缓冲区).现在无论什么时候只要把光标放在一个单词的开头并输入@g,文本中的单词就将被替换成为gadfly

从ex中执行缓冲区

除了在一般模式中执行缓冲区以外,还可以在ex中,即命令模式中执行缓冲区,方法是相同的,例如在插入模式中输入:

/cmp并删除到a缓冲区后,在一般模式中输入:@a过后就可以达到/cmp一样的结果

posted on 2011-10-27 15:53  Observer  阅读(366)  评论(0编辑  收藏  举报

导航