您的位置:首页 > 其它

功能强大的编辑器——Vi

2006-04-21 17:50 309 查看

功能强大的编辑器——Vi

相信Vi是什么就不用我多介绍了,这个工具从Unix诞生以来一直是终端下的标准编辑器。几乎每个Unix或类Unix操作系统都提供了Vi。Vim是Vi Improved的缩写,功能比起Vi来说有了很大的扩展。我用的是Vi iMproved 6.3。

说实话,Vi我用得不太好,远远不及emacs熟练,不过它也是我工作中不可缺少的利器之一,在终端里逛荡的时候看哪个文件不顺眼就拿Vi去改改:) 我的另一个习惯是在有X的系统上往往用Emacs,而没有X的系统上往往用Vi。写下这份笔记是为了防止我忘记掉一些快捷键。

在Vi 中移动光标

k          上
h   l      左  右
j          下

^        移动到该行第一个非空格的字符处
w        向前移动一个单词,将符号或标点当作单词处理
W        向前移动一个单词,不把符号或标点当作单词处理
b        向后移动一个单词,把符号或标点当作单词处理
B        向后移动一个单词,不把符号或标点当作单词处理
0        到行首
$        到行尾
gg       到页首
G        到页末
行号+G   跳转到指定行
Ctrl+g   查询当前行信息和当前文件信息

fx       向右跳到本行字符x处(x可以是任何字符)
Fx       向左跳到本行字符x处(x可以是任何字符)

tx       和fx相同,区别是跳到字符x前
Tx       和Fx相同,区别是跳到字符x后

CTRL+U   向上滚动半屏
CTRL+D   向下滚动半屏

退出Vi

ZZ:退出vi并保存
:q! :退出vi,不保存
:wq :退出vi并保存

重复操作

.:重复上一次操作

自动补齐

C-n      匹配下一个关键字
C-p      匹配上一个关键字

插入

o:在光标下方新开一行并将光标置于新行行首,进入插入模式。
O:同上,在光标上方。

a:在光标之后进入插入模式。
A:同上,在光标之前。

R:进入替换模式,直到按下Esc
set xxx:设置XXX选项。

在Vi中删除

x: 删除当前光标下的字符
dw:删除光标之后的单词剩余部分。
d$:删除光标之后的该行剩余部分。
dd:删除当前行。

c: 功能和d相同,区别在于完成删除操作后进入INSERT MODE
cc:也是删除当前行,然后进入INSERT MODE

更改字符

rx:将当前光标下的字符更改为x(x为任意字符) ~: 更改当前光标下的字符的大小写

键盘宏操作

qcharacter:开始录制宏,character为a到z的任意字符
q:终止录制宏
@character:调用先前录制的宏

恢复误操作

u: 撤销最后执行的命令
U: 修正之前对该行的操作
Ctrl+R:Redo

在Vi中操作Frame

c-w c-n 增加frame
c-w c-c 减少frame
c-w c-w 切换frame
c-w c-r 交换两个frame

在Vi中查找

/ + 字符串:即可在当前文件查找相应的字符串。
继续查找同一个字符串,按n或/(ENTER),若要反向继续查找,按Shift+N。
若要逆向查找,用?代替 /
.*[]^%~$ 在Vi中具有特殊含义,若需要查找则应该加上转义字符"/"

% :查找配对的括号。
s/old/new/g:替换old为new,若没有g则表示只替换一个。
若要每个替换都向用户询问则应该用gc选项

查找的一些选项

设置高亮

:set hlsearch    设置高亮
:set nohlsearch  关闭高亮
:nohlsearch      关闭当前已经设置的高亮

增量查找

:set incsearch   设置增量查找
:set noincsearch 关闭增量查找

VIM中的块操作

Vim支持多达26个剪贴板

剪切/复制/粘贴

所有删除的内容自动被保存,可以用p键粘贴

tips

对代码自动格式化 gg=G

定制 vi 编辑器
可以根据以下方式定制 vi 编辑器:

设置编辑选项
定义宏
映射键
设置缩写
设置 vi 编辑器选项
以下列表描述可以使用 set 命令更改的 vi 编辑器选项。这些选项的缺省设置是 off。如果打开了这些开关选项中的一个,在选项之前输入 no 即可重新关闭它。如果想中断 autowrite vi 选项,则输入 noaw,其中 no 关闭选项,aw 指定 autowrite 选项。

注:
当输入 vi 选项时不要包含圆括号。
vi 选项(缩写) 描述
autoindent(ai) 通过使用 shiftwidth 选项指定的制表符停止位之间的间隔,在文本输入方式中自动缩排为前行的缩排格式。缺省是 noai。将光标退回到前面的制表符停止位,按 Ctrl-D 快捷键。这个选项对于全局命令不起作用。
autoprin(ap) 在任何更改编辑缓冲区的命令后面打印当前行。缺省是 ap。这个选项只应用于单行上一系列命令中的最后一个命令,并且对全局命令不起作用。
autowrite(aw) 如果编辑缓冲区自上次 write 子命令以来发生更改,则在 :n 子命令、:ta 子命令、Ctrl-A 按键顺序和 ! 子命令之前,将编辑缓冲区自动写入到文件。缺省是 noaw。
beautifying text(bf) 在文本输入(除了制表符、换行符和换页指示符)的过程中,防止用户在编辑缓冲区中输入控制字符。缺省是 nobf。此选项应用于命令输入。
closepunct(cp=) 处理结束标点列表,特别当文本自动换行(wraptype 选项)时。在多字符标点前指出字数数,例如 cp=3..;)} 。当自动换行时,vi 命令不分割关闭的标点。
directory(dir=) 显示包含编辑缓冲区的目录。缺省为 dir = /var/tmp。
edcompatible(ed) 在多重替换过程中,保留 g(全局)和 c(确认)子命令后缀,并使 r(读取)后缀像 r 子命令一样运作。缺省值是 noed。
exrc(exrc) 如果未设置,则在初始化过程中忽略当前目录下任何 .exrc 文件,除非当前目录是 HOME 环境变量指定的。缺省是 noexrc。
hardtabs(ht=) 告诉 vi 编辑器显示屏幕上硬件制表符停止位之间的距离。(这个选项必须与基础的终端或终端仿真器的制表符设置相匹配。)缺省值为 ht=8。
ignorecase(ic) 当搜索正则表达式时,忽略大写和小写之间的区别。缺省值是 noic。
linelimit(ll=) 设置最大行数,如 -y 命令行选项。该选项只有和 .exrc 文件或 EXINIT 环境变量一起使用时有效。
lisp(lisp) 除去 ( ), { }, [ [ 和 ] ] 的特殊意义,并为 s 表达式启用 =(格式打印)运算符,以便能够编辑行处理(LISP)程序。缺省是 nolisp。
list(list) 显示文本和制表符 (^I) 和行的标记端($)。缺省值是 nolist。
magic (magic) 当搜索一种模式时,将 .(句号)、[(左括号)和 *(星号)字符当成特殊字符。在关闭方式中,只有 ( )(圆括号)和 $(美元符)保持特殊意义。但是,可以通过在其它字符前面加上 / (反斜杠)来激活其它字符的特殊意义。缺省是 magic。
mesg(mesg) 如果以可视方式设置,打开终端的写入许可权。该选项只有和 .exrc 文件或 EXINIT 环境变量一起使用时有效。缺省值是 on。
modeline (modeline) 如果在文件开始五行或最后五行找到,则运行 vi 编辑器命令行。一行 vi 编辑器命令可以位于行中的任意位置。为了便于 vi 编辑器能辨认命令行,这一行必须包含一个空格或制表符,后跟 ex: 或 vi: 字符串。命令行以第二个 :(冒号)结束。vi 编辑器尝试将第一个和第二个冒号之间的任意数据解释为 vi 编辑器命令。缺省为 nomodeline。
novice 指明是否处于 novice 方式。不能用 set 命令更改值。
number(nu) 显示以行号作为前缀的行。缺省是 nonu。
optimize(opt) 加速缺少光标寻址的终端的操作。缺省为 noopt。
paragraphs(para=) 定义开始段落的 vi 宏名。缺省为 para=IPLPPPQPP/ LIpplpipnpbp。如果指定了一个段落,单字母 nroff 宏,如 .P 宏,必须以加引号字符包含空格。
partialchar(pc=) 出现在最后的显示列,该列中双宽字符不完全显示。缺省字符为 -(减号)。
prompt 当处于命令方式时,通过打印 :(冒号)提示输入新的编辑器命令。缺省值为 on。
readonly(ro) 设置永久的只读方式。缺省为 noreadonly。
redraw(redraw) 在低能工作站上模仿智能工作站。缺省为 nore。
remap 允许根据其它宏来定义宏。缺省值是 on。
report(re=) 设置在消息显示之前命令能重复的次数。对于产生许多消息的子命令,例如全局子命令,完成命令序列后显示消息。缺省值为 report=5。
scroll(scr=) 设置在编辑器中上下滚动时滚动的行数。缺省值为窗口大小的 1/2,四舍五入。
sections(sect=) 定义开始段落的 vi 宏名。缺省为 sect=NHSHHH/ HUuhsh+c。如果指定段落,单字母 nroff 宏,如 .P 宏必须以加引号字符包含空格。
shell(sh=) 为 ! 子命令或 :! 子命令定义外壳程序。缺省为登录外壳程序。
shiftwidth(sw=) 为 autoindent 选项、shift 命令(> 和 <)和文本输入命令(Ctrl-D 和 Ctrl-T 按键顺序)使用的软件制表符停止位设置间距。vi 选项只影响行开始的缩排。缺省值为 sw=8。
showmatch(sm) 当如输入 )(右圆括号)或 } (右花括号)时显示 ((匹配的左圆括号)或 { (左花括号)。缺省为 nosm。
showmode(smd) 当 vi 编辑器处于输入方式时显示消息加以指明。缺省为 nosmd。
slowopen(slow) 在插入期间,延迟更新显示屏幕。缺省值为 noslow。
tabstop(ts=) 在一个显示的文件中设置制表符停止位之间的间距。缺省值为 ts=8。
tags(tags =) 为用 ctags 命令创建的函数名的数据库文件定义搜索路径。缺省值为 tags=tags/ /usr/lib/tags。
term(term=) 设置正在使用的工作站类型。缺省值为 term=$TERM,其中 $TERM 是 TERM 外壳程序变量的值。
terse(terse) 允许 vi 编辑器显示消息的短格式。缺省为 noterse。
timeout(to) 为字符的进入设置两秒的时间限制。当设置 timeout 选项时,这个限制容许作为单独的字符输入和处理宏中的字符。要恢复宏的使用,需要设置 notimeout 选项。缺省值为 to。
ttytype 为正在使用的终端指明 tty 类型。从 vi 编辑器不能更改这个值。
warn(warn) 在 ! 之前显示警告消息。当在编辑缓冲区中已经作了更改,但还没有写入文件时,如果是第一次发送外壳程序命令,那么子命令执行外壳程序命令。缺省为 warn。
window(wi=) 设置显示在一个文本窗口中的行数。缺省值取决于操作时使用的波特率:600 波特或更少, 8 行;1200 波特,16 行;更高的速率,全屏减去 1 行。
wrapmargin(wm=) 设置从一行到另一行自动换行的页边距。缺省值为 wm=0。0 值则关闭自动换行。
wrapscan(ws) 允许字符串搜索从编辑缓冲区结尾到开始有自动换行。缺省值为 ws。
wraptype(wt=) 指明用于在行尾回绕单词的方法。缺省值为 general。可以指定下列四个值中的一个:
general
允许单词中断处(如两个字符之间的空白)自动换行。此设置为缺省值。
word
允许在单词上自动换行。
rigid
允许在列上和关闭的标点之前自动换行。
flexible
允许在列上自动换行,但是一个标点符号可以扩展到页边距外后。
writeany(wa) 关闭通常在write 子命令之前进行的检查。缺省值为 nowa。

要查看对缺省设置进行更改的 vi 编辑器设置列表,请输入 set 并按空格键。按 Enter 键返回到命令方式。

要查看 vi 编辑器设置的完全列表,请输入 set all。按 Enter 键返回到命令方式。

要打开一个 vi 编辑器选项, 输入 set Option。这个命令自动返回到命令方式。

要打开多个 vi 编辑器选项,输入 set Option Option Option。这命令打开三个指定的 vi 编辑器选项并返回到命令方式。

要关闭一个 vi 选项,输入 set noOption。这个命令自动返回到命令方式。

要更改一个 vi 编辑器的值,请输入 set Option=Value。这个命令自动返回到命令方式。

可以仅为这个编辑会话使用 :set vi 编辑器子命令来设置选项,或为这个编辑会话和所有将来的编辑会话设置选项。

要只为这个编辑会话设置或更改 vi 编辑器选项,从命令行输入 :set 子命令。

要为所有编辑会话设置 vi 选项,将 :set 子命令置于 .profile 文件的 EXINIT 环境变量中(该文件由登录的外壳程序读取)或将 set 子命令置于 .exrc 文件中。vi 编辑器首先查找 EXINIT 环境变量并运行它的命令。如果 EXINIT 环境变量不存在,则 vi 编辑器查找 $HOME/.exrc 文件并运行它的命令。最后,不管以前的任何结果,vi 编辑器查找本地的 .exrc 文件并运行它的命令。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: