Linux 版 (精华区)
发信人: jun (☆子夜☆), 信区: Linux
标 题: [转载] vi-faq中文版(2) (转载)
发信站: 紫 丁 香 (Mon Jan 11 21:48:38 1999), 站内信件
发信人: Elale (虎子), 信区: Linux
发信站: BBS 水木清华站 (Sun Sep 20 09:48:00 1998)
4.0 - vi档案的在线帮助在哪儿?
有一个vi的FAQ,其中列出了vi档案的所有在线文件. 同时它还列出了这些文档
的镜象站点. 最主要的一个地址是alf.uib.no,但是这些文档在很多很多地地方
都保存着. vi-archive faq把它们都给列出来了.你在下载这些文件之前一定要
核对一下这个FAQ.因为很有可能有一个站点比去挪威的站点更近更快些.
一个镜象站点是cs.uwp.edu/pub/vi, 另一个是monu6.cc.monash.edu.au/pub/Vi,
这些站点上有很多有关vi的文件,还有一些vi的变种版本;当然,UCB版本的vi是
肯定有的, 还有许多的宏.
5.0 - 好玩的vi诀窍,好玩的宏
这一节主要讲述一些无聊的诀窍和一些无聊的宏.事实上,任何vi的诀窍和宏我们
都欢迎,只要它们不是过分冗长. 如果有人向我建议而我也认为确实值得加的话,
我会考虑加进去的.
5.1 - 好玩的vi诀窍
xp 删除光标下的字符,再把粘贴到后面去.换句话说,它交换了当前两个字符
的位置.
ddp 和xp类似,不过是交换两行的位置.
uu 撤消和重复上次所做的修改.(这可以使你不改变什么东西就可以到你上次所
做的修改处)
5.2 - 好玩的宏
和垂直上方的字符交换位置
map * kxjphxkP
折行
map g $80|F r
(译注,我对这条宏表示疑问!)
改变大多数单词的大小写
map v ywmno:s/./\~/g
(译注,这条好象也不大对!)
在当前的单词周围加上`和'
map *` i`'
在当前的单词周围加上'和'
map *' i''
在当前的单词周围加上"和"
map *" i""
(这几条也太无聊了吧--译注)
在当前的单词周围加上``和``
map! `` `'
(咦,好象又有问题?--译注)
从光标处把当前行分开,在下一行开头加上一个>号(例如,引用USENET).如果加上了单词的折行
功能那么最后一个单词可能被折在第一行.
map g may0O`ay$:s/./ /g
(不对吧--译注)
插入一个字符
map g i$^[r
6.0 - 依字母顺序的vi快速参考
... 是指有些东西需要在命令之前或之后指明.这通常是说光标的移动键
(h,j,k,l,w,b等等)或者是指行号.
# (这里#代表一个数字) 执行n次后面的命令...
: 进入ex模式
) 下一句
( 上一句
} 下一段
{ 上一段
]] 下一节
[[ 上一节
0 行的开头
$ 行的末尾
^ 行的第一个非空白字符
+ 下一行的开头
- 上一行的开头
(空格) 下一个字符
(回车) 下一行
/ 向前搜索
? 向后搜索
% 查找当前小(中,大)括号的匹配字符
, 逆向重复上一个f,F,t或T操作
; 重复上一个f,F,t或T操作
. 重复上一个操作
` 转到标记处
' 转到标记所在行的开头
`` 查找前回到上一个做标记的地方
'' 查找前回到上一个做标记所在行的开头
~ 切换字符的大小写
" 保存到寄存器中
!! 重复上一次SHELL命令
! 把后面的文本送给命令, 取代输出(例如, !}fmt把当前的段落
送给命令fmt处理,然后用fmt返回的东西替换输出.)
>> 右移当前段落一个移动宽度(shiftwidth)
<< 左移当前段落一个移动宽度(shiftwidth)
>% 从当前到匹配小(中,大)括号之间的文本右移
<% 从当前到匹配小(中,大)括号之间的文本左移
(似乎漏了一个符号|, 移动到某一列----译注)
a 在当前位置之后添加
A 在当前行的末尾添加
^a 没有使用
b 上一个单词的开头
B 上一个单词的开头,忽略标点符号
^b 上移一屏
c 覆盖...
C 覆盖到行末尾
^c 终止插入模式,在命令模式没有用
d 删除...
D 删除到行末尾
^d 下移半屏,如果在插入模式下则移到上一个移动宽度(ShiftTab)处
e 单词的末尾
E 单词的末尾,忽略标点符号
^e 屏幕下卷一行
f 查找...
F 向后查找...
^f 下移一屏
g 未用
G ...跳至[缺省是到文件末尾]
^g 显示状态栏
h 左移
H 屏幕上的第一行
^h 在插入模式下是退格,命令模式下是左移
i 在当前的位置前面插入
I 在本行的第一个非空白字符前面插入
^i 插入模式下是制表键,命令模式下未用
j 下移
J 把下一行合并到本行
^j 命令模式下是下移,插入模式下是建一个新行
k 上移
K 未用
^k 未用
l 右移
L 屏幕中的最后一行
^l 重绘屏幕
m 把当前位置标记到寄存器中
M 屏幕的中间行
^m 回车
n 重复上次查找
N 逆向重复上次查找
^n 命令模式下是下移
o 在当前行的下面建一个新行
O 在当前行的上面建一个新行
^o 未用
p 在当前行的下面粘贴
(译注--应为在当前位置的后面粘贴)
P 在当前行的上面粘贴
(译注--应为在当前位置的前面粘贴)
^p 命令模式下是上移
q 未用
Q 退出并且启动ex
^q 未用
r 覆盖当前的字符
R 在插入模式下一直覆盖字符
^r 在命令模式下面重绘屏幕
s 替换
S 替换整行
t 到...
T 向后到...
^t 移到下一个移动宽度(shifttab)处
u 撤消上一次操作
U 撤消对本行的所有修改
^u 上移半屏
v 未用
V 未用
^v 未用
w 下一个单词的开头
W 下一个单词的开头,忽略标点符号
^w 命令模式下未用,在插入模式下是到上一个单词的开头处
x 删除当前字符
X 删除前一个字符
^x 未用
y 复制...
Y 复制整行
^y 屏幕上卷一行
z 重新配置当前行周围的屏幕
ZZ 保存之后退出
^z 未用
(译注--在命令模式下,^z执行了UNIX暂停操作)
6.1 - 命令模式的输入选项(:命令)
(注: 这不是一个规范的列表,, 我只是列出了一些最重要的命令)
:r <文件> 把<文件>读入到当前文档
:r !<命令> 把<命令>的输出插入到当前文本中
:nr <文件> 把<文件>插入到第n行
:!<命令> 运行<命令>,然后返回
:sh 转到SHELL
:so <文件> 读取<文件>,再执行文件里面的命令
(译注--文件中的命令应该都是一些ex命令)
:x 保存之后退出
:wq 保存之后退出
:l1,l2w <文件>把第l1和第l2行之间的文本写到<文件>中去,如果没有指定<文件>,
vi就假定是当前文件,如果没有指定l1,l2,就假定是整个文件(就成了:w)
:w >> <文件> 添加到<文件>末尾. 也可以使用行号
:w! 覆盖当前文件
:q 退出
:q! 不存盘就退出
:e <文件> 不离开vi编辑<文件>
:e! 重新编辑当前文件,忽略所有的修改
:n 编辑下一个文件
:e +n <文件> 从第n行开始编辑<文件>,如果超过了末尾,就从末尾开始编辑
:e# 编辑替换文件(如果使用了命令:e<文件>,替换文件就指的是原始文件)
:args 显示所有要编辑的文件
:rew 重新回到第一个编辑的文档
:map m n 创建一个宏(使 m 做 n)
:map! m n 创建一个插入模式的宏(使 m 做 n)
:unmap m 删除宏m
:unmap! m 删除插入模式的宏m
:ab <1> <2> 缩写,敲<1>的时候用<2>取代
:unab <1> 取消缩写<1>
:set <选项> 设置<选项>...
6.2 - 设置选项(set)
可以使用括号中的缩写形式. 语法:
:set <选项> <参数> (如果需要参数的话)
也可以在一行中指定多个选项
:set <选项>? 显示出当前这个选项的参数值
:set all 则显示所有的选项值
对那些无须参数的选项来说,使用:set no<选项>就可以把它给关了
选项: 缺省值: 含义:
autoindent (ai) noai 使新行自动缩进,和上(下)行的位置对齐
autoprint (ap) ap 每条命令之后都显示出修改之处
autowrite (aw) noaw 在:n,:!命令之前都自动保存文件
beautify (bf) nobf 在输入的时候忽略所有的控制字符
(除了制表键(tab),换行(newline),进纸(formfeed))
directory= (dir=) /tmp 存放缓冲区的目录名
edcompatible noedcompatible 在替换的时候使用类ed的用法
errorbells (eb) errorbells 出错的时候响铃
exrc (ex) noexrc 允许在主目录(home)外面之外放.exrc文件
hardtabs= (ht=) 8 设置硬制表的边界
ignore case (ic) noic 正规式里忽略大小写
lisp nolisp 打开lisp模式
list nolist 显示所有的制表键和行的结尾
magic magic 可以使用更多的正规表达式
mesg mesg 允许向终端发送消息
number (nu) nonumber 显示行号
open open 允许开放和可视化
optimize (opt) optimize 优化吞吐量,打印时不发回车
paragraphs= (para=) IPLPPPQPPLIbp 设置{ & }的分界符
prompt prompt 命令模式下的输入给出:的提示符
readonly (ro) noro 除非用!号否则不准保存文件
redraw noredraw 当编辑的时候重绘屏幕
remap remap 允许宏指向其他的宏
report= 5 如果影响的行数>这个数的话就报告
scroll 1/2 window 下卷屏幕时滚动屏幕的数目,
同样这也是z命令输出的行数(z 输出2倍滚屏的大小)
sections= SHNHH HU 定义节的末尾(当使用命令[[ 和 ]] 时)
shell= (sh=) /bin/sh 缺省的SHELL,如果设置了环境变量SHELL的话,就使用变量
shiftwidth= (sw=) 8 当使用移动(shift)命令时移动的字符数
showmatch (sm) nosm 显示{, }, (, ), [, 或者 ] 的匹配情况
showmode noshowmode 显示你处在什么模式下面
slowopen (slow) 插入之后不要立刻更新显示
tabstop= (ts=) 8 设置制表停止位(tabstop)的长度
taglength= (tl=) 0 重要标记的字符个数(0表示所有的字符)
tags= tag, /usr/lib/tags 定义包含标记的文件路径
term= 设置终端类型
terse noterse 显示简短的错误信息
timeout (to) timeout 一秒钟后键盘映射超时
ttytype= 设置终端类型
warn warn 显示"No write since last change"信息
window= (w=) 可视模式下窗口的行数
wrapmargin= (wm=) 0 右边距,大于0的话最右边的单词将折行,留出n个空白位置
wrapscan (ws) ws 查找到文件尾后再重头开始
writeany (wa) nowa 可以保存到任意一个文件去
(译注--这些选项在各种vi版本中都基本上大同小异,以SunOS带的vi为例,它没有这里列出来的open选项,
scroll的参数值也不同,还多出来一些选项,如flash,modelines,novice,tagstack等等)
7.0 - 建立 .exrc文件
所有命令输入模式下的命令(即 :命令)都可以在.exrc文件中使用,在.exrc中的命令在启动vi的时候自动
加载.尤其是源命令(so),缩写(ab)和宏定义都可以用.在.exrc中不允许有空行.以"开头的一行vi将把它当成
注释.
7.1 - .exrc文件的样本
以下的.exrc文件是一个实际的例子, 我自己的. 因此,它就没有有些人想象的那样设置很多的选项.即便
如此,它还是给出一些基本的概念,而且它也相当易懂.
首先,记住你无须在命令前面加:号,因为它是缺省就添加了的.
"译注--以下是.exrc文件中的内容,为真实起见,而且事实上也相当浅显,我没有翻译其中的注释
" set wordwrap 9 characters from the right
set wm=9
" show matching parenthesis. When },), or ] is hit, show the opening
" {,(, or [ that matches it.
set sm
" set the shell to be /usr/local/bin/tcsh
set sh=/usr/local/bin/tcsh
" a few abbreviations
" this makes -l automatically become -Larry, and zidlle to be my
" name and email address.
ab zidlle E. Larry Lidz - ellidz@midway.uchicago.edu
ab -l -Larry
" uppercase V will run ispell -x (-x tells it not to save backups) on current
" file
map V :w
" K will center the line... (this doesn't work on SunOS -- ??)
map K :s/^[ ]*//
" v will reformat the current paragraph
map v {0!}fmt
" q runs a program to lock my terminal
map q :!lock2
" Splits a line in two at current cursor location, puts a > at the
"beginning of the line - useful for Usenet/email
map g may0O`ay$:s/./ /g
8.0 - vi的bug
我很想说vi中没有bug,但很不幸,它不是这样的. 这些bug都是初始版本vi中的,
它其他的一些变种就不一定有.
例如 _宏有时就运行的有问题.
9.0 - 术语表
如果有人提议说某个术语他不明白,我们将更新这个术语表.如果你有什么建议,
请一定要告诉我.
命令模式 command mode
命令模式是说我们在此模式下面可以向vi发命令(包括光标移动,编辑命令等等)
ed
UNIX里面一个非可视化的编辑器
<Esc>
escape键. 键盘上标记为escape(ESC)的一个键.有时候^[可以起到相同的作用.
如果没有escape键,你可以试试Meta键
ex
UNIX下的一个编辑器.所有vi中的:命令都是送给它处理的
插入模式 insert mode
插入模式是指我们可以在此模式下面键入文本.
宏 macro
宏是一些键的组合起来的快捷方式.例如,某个宏允许我们只敲一个键就可以执行
好几个不同的命令.
开放模式 open mode
开始模式是说vi启动的时候不能确定你的终端类型,或者它肯定你的是一个硬的或
电子管的终端
正规表达式 regular expressions (RegEx)
正规表达式,通常缩写为"RegEx",是一些关键字的集合,它允许用户在查找的时候有更大的
控制力度. RegEx是在UNIX下面用的,但是在很多程序中也用到了它.
sed
流-行式的编辑器.它没有界面,所有命令都是通过命令行的形式给出的.
vi
就是这个FAQ讨论的编辑器
10.0 - 关于vi的参考书目
The ULTIMATE GUIDE to the VI and EX Text Editors
Hewlett Packard Company (authors)
The Benjamin/Cummings Publishing Company, Inc.
ISBN 0-8053-4460-8
A PRACTICAL GUIDE TO THE UNIX SYSTEM
Mark G. Sobell
Benjamin Cummings Publisher
LEARNING THE VI EDITOR
Linda Lamb
O'Reilly & Associates
ISBN 0-937175-67-6
如果你知道哪些书籍对学习vi很有好处,别忘了给我个建议, 我会把这些书目也加到
这一节来的.
-----------------------------------------------
E. Larry Lidz, 1994, 1995. 版权所有
-----------------------------------------------
Elale@163.net
※ 修改:.jun 于 Jan 11 21:52:28 修改本文.[FROM: PR_AI.hit.edu.cn]
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: PR_AI.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:205.308毫秒