Linux下vi使用手册

a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。

A: 从光标所在列最後面的地方开始新增资料。

插入 (insert)

i: 从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。

I :从光标所在列的第一个非空白字元前面开始插入资料。

开始 (open)

o :在光标所在列下新增一列并进入输入模式。

O: 在光标所在列上方新增一列并进入输入模式。

x: 删除光标所在字符。

dd :删除光标所在的列。

r :修改光标所在字元,r 後接著要修正的字符。

R: 进入取替换状态,新增文字会覆盖原先文字,直到按 [ESC] 回到指令模式下为止。

s: 删除光标所在字元,并进入输入模式。

S: 删除光标所在的列,并进入输入模式。

文件操作指令多以 : 开头,这跟编辑指令有点区别。
:q 结束编辑(quit)
:q! 不存档而要放弃编辑过的文件。
:w 保存文件(write)其後可加所要存档的档名。
:wq 即存档後离开。
zz 功能与 :wq 相同。

vi 或 vedit 命令

用途
用全屏显示编辑文件。

语法
{ vi | vedit } [ -l ] [ -R ] [ -tTag ] [ -v ] [ -wNumber] [ -yNumber ] [ -r [ File ] ] [{ + | -c } { Subcommand } ] [ File ... ]

描述
vi 命令基于基础 ex 编辑器启动全屏编辑器。因此,ex 子命令可以在 vi 编辑器中使用。vedit 命令启动适用于初学者的 vi 编辑器版本。在 vedit 编辑器中,报告选项设置为 1,设置了 showmode 选项和 novice 选项,使其成为一个行编辑器。

通过指定被编辑文件名,可以启动 vi 编辑器。如果在命令行上提供多个 File 参数,vi 编辑器按指定的顺序编辑每一个文件。现有文件的 vi 编辑器在屏幕底部显示文件名、行数和字符数。在多字节语言环境的情况下,字符数必须解释成字节数。

由于 vi 编辑器是全屏编辑器,所以可以逐屏编辑文本。vi 编辑器在编辑缓冲区为编辑的文件制作副本,并且直到保存更改文件内容才会更改。光标在显示屏幕上的位置表明它在文件中的位置,并且子命令在光标位置影响该文件。

vi 编辑器的局限性
以下列表提供了 vi 编辑器的最大限度。这些计数采用单字节字符集。

每行 {LINE_MAX} 个字符
每全局命令列表 256 个字符
128 个字符在以前被插入和删除的文本中
128 个字符在外壳程序转义命令中
128 个字符在一个字符串值的选项中
30 个字符在一个标记名中
128 个映射宏,总共 2048 个字符
1,048,560 行,每行强制不能超过 {LINE_MAX} 个字符
宏名和宏文本被限制在 100 个字符内。
注:
对大于 64MB 的文件运行 vi 编辑器可能会显示以下的错误信息:
0602-103 file too large to place in /tmp
vi 编辑方式
vi 编辑器按以下方式操作:

命令方式 当启动 vi 编辑器时,它处于命令方式。您可以输入任何子命令,除了那些指定仅用于文本输入方式的子命令。当子命令和其它方式结束时,vi 编辑器返回命令方式。按 Esc 键取消子命令。
文 本输入方式 按这种方式使用 vi 编辑器来添加文本。用以下任意子命令进入文本输入方式: a 子命令、A 子命令、i 子命令、I 子命令、o子命令、O 子命令、cx 子命令(其中 x 代表子命令的范围)、C 子命令、s 子命令、S 子命令和 R 子命令。输入这些子命令中的一个后,即可输入文本到编辑缓冲区中。要返回到命令方式,按 ESC 键以正常退出或按“中断”(Ctrl-C 按键顺序)以非正常方式结束。
最后行方式 带前缀 :(冒号)、/(斜杠)、?(问号)、!(感叹号)或 !!(两个感叹号)的子命令在屏幕底部的显示行上读取输入。当输入初始字符时,vi 编辑器将光标置于屏幕底部,在该处可以输入命令中剩余的字符。按 Enter 键运行子命令,或按“中断”(Ctrl-C 按键顺序)取消它。当 使用 !! 前缀时,光标只在两个感叹号都输入后才移动。当使用 : 前缀进入最后行方式时,如果在指定计数的命令之前使用以下字符,vi 编辑器赋予它们特定含义:
%
所有行,而不管光标的位置
$
最后行
.
当前行

定制 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 文件并运行它的命令。

注:
这个过程一直成立,除了 tvi 命令(可信的 vi)。在这种情况下,vi 编辑器查找并只运行 /etc/.exrc 文件。
要获取通过设置 EXINIT 环境变量来更改选项的信息,请参阅 environment 文件中关于环境变量的描述。

.exrc 文件可以包含 set Option=Value; 格式的子命令,例如:

set cp=3 . . ;
要在 .exrc 文件中包含注释,将 "(双引号)作为该行中的第一个字符。

定义宏
如果经常使用一条子命令或一系列子命令,可以使用 vi 编辑器来定义发出子命令或子命令顺序的宏。

要定义一个宏,输入一系列以字母表中一个字母命名的缓冲区。小写字母 a 到 z 覆盖缓冲区的内容,大写字母 A 到 Z 将文本附加到缓冲区先前的内容,这样可以逐块构建宏。

例如,要定义命名为 c 的宏,该宏搜索单词 corner 并使单词 corner 后的第三行成为当前行,输入以下命令:

o /corner/+3
然后按 ESC 键并输入以下命令:

"c
其中 c 是缓冲区宏的名称。

要 添加文本到已定义的缓冲区中以前的内容,输入 o viSubcommand,按 ESC 键,并输入 "CapitalLetter,其中 CapitalLetter 变量指定一个从 A 到 Z 的大写字母。例如,要构建名为 T 的缓冲区宏,该宏搜索单词 corner 并允许添加更多命令,输入以下命令:

o corner
然后按 ESC 键并输入以下命令:

"T
其中 T 是缓冲区宏的名称。任何时候都可以重复本过程将更多的 vi 子命令添加到相同的缓冲区。

例如,要添加移动光标到前面行和删除该行的命令,输入以下命令:

o -dd
这里 -(负号)意为将光标上移一行,而 dd 表示删除当前行。按 ESC 键并输入以下命令:

"Tdd
要启动宏,输入 @Letter,其中 Letter 变量指定想要使用的缓冲区宏的字母名。要再使用相同的宏,输入 @@ (两个位于符号)。例如,输入 @T 启动 T 缓冲区宏并运行搜索、移动光标和删除行命令。输入 @@T 以再一次启动 T 缓冲区宏。

系统使用的字符集通过对照表定义。该表影响 vi 宏的性能。

映射键
可 以使用 :map、:map! 和 :ab 子命令将击键操作映射到命令或命令序列。:map 子命令在命令方式中使用。:map! 和 :ab 子命令在文本输入方式中使用。可以为这个编辑会话和所有以后的编辑会话映射键,或者仅为当前编辑会话(以两钟方式中的一种)映射键。

要为所有以后的编辑会话映射键,将子命令置于 $HOME/.exrc 文件中。vi 编辑器每次启动,会读取这个文件。映射保持对每一次编辑会话有效。

要仅从命令方式为当前的编辑会话映射键,在 vi 编辑器会话期间启动子命令。要只通过文本输入方式为当前编辑会话映射键,在 vi 编辑器会话期间在命令行上输入子命令。映射保持对当前编辑会话有效。

注 意: 如果使用的是 IBM 3161 ASCII 显示站、IBM 3163 ASCII 显示站或 IBM 3101 ASCII 显示站,vi 编辑器的缺省键映射会导致数据丢失。要查看缺省映射,请发出 :map 子命令。ESC-J 或 Shift-J 按键顺序产生特殊的问题。这些按键顺序从光标的当前位置到文件尾删除所有的信息。为了避免问题出现,使用 .exrc 文件来更改这个按键顺序。
:map、:map! 和 :ab 子命令按以下定义:

:map 按命令方式定义宏。在 vi 编辑器中,:map 子命令允许通过按单一键来运行指定的命令或命令序列。
要按命令方式映射键,用空的编辑缓冲区启动 vi 编辑器而不用 vi 命令给 vi 文件命名或在 vi 编辑器启动后输入任何东西到缓冲区。可以使用 :map 子命令完成以下任务:

要将字符映射到编辑命令序列,输入:

:map Letter viSubcommand
要按命令方式取消先前映射的字符,输入:

:unmap Letter
要为命令方式显示当前映射列表,输入:

:map
vi 编辑器不使用以下键,但是可以在命令方式中和 :map 子命令一起使用。

字母 s、g、K、q、V 和 v
控制键序列 Ctrl-A、Ctrl-K、Ctrl-O、Ctrl-T、Ctrl-W 和 Ctrl-X
符号 _(下划线)、*(星号)、 \ (反斜杠) 和 =(等号)
尽管可以映射已被 vi 编辑使用的键,但只要映射有效,就无法使用键的常用功能。有些终端允许将命令序列映射到功能键。如果处于 LISP 方式,=(等号)不能使用,因为它已由 vi 编辑器使用。

要映射字母 v 到命令序列,该命令序列定位的下一个出现的 map 单词并将它改成单词 MAP,请输入以下命令:

:map v /map<Ctrl-V><Enter>cwMAP<Ctrl-V><Esc><Ctrl-V><Enter>
前 面的示例指导 vi 编辑器定位下一个 map 的出现(/map<Ctrl-V><Enter>),将 map 更改为 MAP(cwMAP),结束 change-word 子命令(<Ctrl-V><Esc>),输入命令(<Ctrl-V><Enter>)。

注:
为了防止 vi 编辑器解释 Enter 键,当被映射时,必须在前面输入 Ctrl-V 按键顺序。此情况对 Esc、Backspace 和 Delete 键也成立。
要映射控制字符 Ctrl-A、Ctrl-K 和 Ctrl-O,同时按 Ctrl 键和相应的字母。例如,要将 Ctrl-A 按键顺序映射到保存文件和编辑系列中下一个文件命令序列,输入以下命令:

:map <Ctrl-A> :w<Ctrl-V><Enter>:n<Ctrl-V><Enter>
要将映射控制字符 Ctrl-T、Ctrl-W 和 Ctrl-X,必须首先用 Ctrl-V按键顺序序为它们转义。

要映射 |(管道符),首先必须用两个 Ctrl-V 按键顺序为它转义,这通过以下示例说明:将字符 g 映射到命令序列,该命令序列转义到外壳程序,连接文件 /etc/motd 并输出到 wc 命令:

:map g :!cat /etc/motd <Ctrl-V><Ctrl-V>| wc<Ctrl-V><Enter>
如果终端允许映射功能键,必须用 #number 按键顺序引用它们,以指定想映射的功能键的号码。在以下示例中,F1 功能键映射到删除单词和将光标下移三个单词的命令序列:

:map #1 dwwww
为 了使功能键映射起作用,功能键给终端类型的输出必须和 terminfo 文件中定义的输出相匹配。这些定义由 kfnumber 条目标志,其中,kf1 代表 F1 功能键,kf2 代表 F2 功能键,等等。如果当按功能键时所获取的输出与这个条目不匹配,在任何映射可以发生之前,必须使用终端的设置方式去纠正设置以便和这些终端数据库条目相匹 配。

也可以映射某个键盘特殊键,如 Home、End、Page Up 和 Page Down 键。对于大多数的终端,这些键已经在 vi 编辑器中映射。可以通过使用 :map 子命令验证这个映射。如果这些键还没有映射,可以如下使用 :map 子命令:

:map <Ctrl-V><End> G
:map <Ctrl-V><Home> 1G
:map <Ctrl-V><PageUp> <Ctrl-F>
:map <Ctrl-V><PageDown> <Ctrl-B>
要在命令方式中获取所有当前映射,请输入 :map 子命令。前面的示例显示如下:

v v /map<Ctrl-M>cwMAP<Ctrl-[>Ctrl-M>
<Ctrl-A> <Ctrl-A> :w<Ctrl-M>:n<Ctrl-M>
g g :!cat /etc/motd | wc <Ctrl-M>

注:
Ctrl-V 和 Enter 按键顺序显示为 Ctrl-M 按键顺序,而 Ctrl-V 和 Esc 按键顺序显示为 Ctrl-[ 按键顺序。
:map! 当处于文本输入方式时,将字符串映射到单个键。要按文本输入方式映射键,用空的编辑缓冲区启动 vi 编辑器而不用 vi 命令给 vi 文件命名或在 vi 编辑器启动后输入任何东西到缓冲区。可以使用 :map! 子命令完成以下任务:
要按文本输入方式映射一个字母到一个或多个 vi 字符串,输入:

:map! Letter String
要在文本输入方式中取消先前映射的字母,请输入:

:unmap! Letter
要显示在文本输入方式已映射到特殊键的现有字符串,请输入:

:map!
当处于文本输入方式时,输入映射键处理指定的字符串。Ctrl-V 和 Esc 按键顺序进入命令方式 ,回到当前单词的开始(bbw),并启动 cw(change-word)子命令。例如:

:map! % <Ctrl-V><Esc>bbwcw
当输入文本时,如果意识到已经输错了一个单词,可以通过按 %(百分号)键并重新输入这个单词。编辑器自动返回到插入方式。

注:
当选择将用于 :map! 子命令的键时要特别当心。一旦键已映射,除非先发出 :unmap! 子命令,它们就不能再按文本输入。
:ab 将键或按键顺序映射到字符串以用于文本输入方式。当输入具有几个重复的短句、名称或标题时,:ab 子命令十分有用。
以下示例将 city 替换为短句 Austin, Texas 78759,只要它是用文本输入方式输入并紧跟一个空格、句号或冒号:

:ab city Austin, Texas 78759
例如,如果在输入文本时,输入以下内容:

My current residence is city.
按 Tab 键扩展单词 city 用于阅读:

My current residence is Austin, Texas 78759.
缩写在单词中不扩展。例如,如果输入 My current residence iscity,单词 iscity 不扩展。

如 果 :map! 子命令用于映射缩写用于插入方式,则出现的所有缩写都被扩展,而不管它出现在什么位置。如果在前面的示例中使用 :map! 子命令(:map! city Austin, Texas 78759),那么无论什么时候输入单词 city,无论前面和后面是什么,这个单词将扩展为 Austin, Texas 78759。因此,单词 iscity 成为 isAustin, Texas 78759。

注:
当选择用于 :ab 子命令的键时,需要小心。一旦键已定义,除非先发出 :unab 子命令,它们就不能再按文本输入。

设置缩写
set 命令具有与 map! 命令类似的行为,除了 set 命令仅当缩写是单个单词时以缩写形式代替字符串。可以使用 vi 编辑器的 set 命令完成以下任务:

列出现有的缩写
除去缩写
设置(定义)缩写
注:
用空编辑缓冲区启动 vi 编辑器。不要用 vi 命令给 vi 文件命名或在 vi 编辑器启动后输入任何东西到缓冲区。按 Esc 键以确保处于命令方式。
要列出缩写 输入 :ab 命令来列出现有的缩写。按 Enter 键返回到命令方式。
要除去缩写 输入 :anab Abbreviation 命令以除去缩写,其中 Abbreviation 变量指定不再想缩写的字符串。
要设置(定义)缩写 输入 :ab Abbreviation String 命令来设置缩写,其中 Abbreviation 变量指定定义为缩写的字符串,而 String 变量指定被缩写的字符串。 只有当缩写是单独的单词时,缩写可以替代字符串。
例如, 如果输入 :ab kn upper 命令,然后当处于文本输入方式时输入 acknowledge,因为单词 acknowledge 中的 kn 字符串不是单独的单词,所以不启动 set 命令 :ab abbreviation string 命令。

然而,如果输入 :ab kn upper命令,然后当处于文本输入方式时,输入 make the kn line all kncase,结果是 make the upper line all uppercase。

标志

-cSubcommand 在开始查看 vi 之前,执行 ex 编辑器子命令。光标移到被最近执行的命令影响的行。当输入一个空操作数时,如 -c' ',vi 编辑器将光标置于文件的第一行。-c 标志不能与 + 标志兼容。不要同时指定这两个标志。
-l 用 LISP 方式进入 vi 编辑器。在这种方式中,vi 编辑器适当地为 LISP 代码创建缩排,(, ), {, }, [[ 和 ]] 子命令被修改以便正确地为 LISP 进行操作。
-r[File] 在 vi 编辑器或系统故障之后恢复文件。如果不指定 File 变量, vi 编辑器显示所有保存过的文件列表。
-R 设置只读选项以保护文件使其不被覆盖。
-tTag 编辑包含 Tag 变量的文件并将 vi 编辑器定位于它的定义。要使用该标志,必须首先使用 ctags 命令创建一个函数名及它们位置的数据库。
-v 用详细方式进入 vi 编辑器。
-wNumber 将缺省窗口大小设置为 Number 变量指定的值。当在低速线路上使用 vi 编辑器时,这个标志十分有用。
-yNumber 用任何大于 1024 的值覆盖 1,048,560 的最大行设置。由于 vi 编辑器为缓冲区控制使用额外的行,请求的行数应该是需要的两倍。
+[Subcommand] 在开始编辑之前,执行 ex 编辑器子命令。如果没有指定 Subcommand 变量,光标将置于文件的首行。这个 + 标志与 -c 标志不兼容。不要同时指定这两个标志。

vi 常规子命令语法
使用以下常规语法来输入子命令:

[Named_Buffer] [Operator] [Number] Object

注:
方括号标识任选项。
[Named_Buffer] 指定临时文本存储区域。
[Operator] 指定子命令或操作;指导 vi 编辑器。
[Number] 将操作范围或行地址指定为一个整数。
Object 指定操作对象,如文本对象(字符、单词、句子、段落、节、字符串)或文本位置(一行、在当前行中的位置、屏幕位置)。

在子命令之前计数
可以在许多子命令前放一个数字。vi 编辑器以下面方式中的一种解释这个数字:

转至由 Number 参数指定的行:
5G
10Z
转至由 Number 参数指定的列。
25|
上下滚动由 Number 参数指定的行数:
10Ctrl-U
10Ctrl-D
vi 编辑器子命令
使用子命令执行以下种类的操作:

移动光标
编辑文本
控制文件
其它操作
移动光标
按以下方式使用子命令在文件内移动光标:

在行内移动
按字符位置在行内移动
移到单词
按行位置移动
移到句、段落或节
通过重绘屏幕移动
翻页和滚动
搜索模式
在文件中标记特殊位置并返回
在行内移动
在命令方式输入以下命令。可以通过按 Esc 键取消不完整的命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

左箭头或 h 或 Ctrl-H 将光标向左移动一个字符。
下箭头或 j 或 Ctrl-J 或 Ctrl-N 将光标向下移动一行(它保持在同一列)。
上箭头或 k 或 Ctrl-P 将光标向上移动一行(它保持在同一列)。
右箭头或 l 将光标向右移动一个字符。

按字符位置在行中移动
在命令方式输入以下命令。可以通过按 Esc 键取消不完整的命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

^ 将光标移到第一个非空字符。
0 将光标移到行的开始。
$ 将光移到行尾。
fx 将光标移到下一个 x 字符。
Fx 将光标移到最后一个 x 字符。
tx 将光标移到下一个 x 字符的前一列。
Tx 将光标移到下一个 x字符的后一列。
; 重复最近的 f、F、t 或 T 子命令。
, 以反方向重复最近的 f、F、t 或 T 子命令。
Number| 将光标移到指定列。

移到单词
在命令方式输入以下命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

w 将光标移到下一个小字。
b 将光标移到前一个小字。
e 将光标移到小字的倒数第二个字母。
W 将光标移到下一个大字。
B 将光标移到前一个大字。
E 将光标移到大字的倒数第二个字母。

按行位置移动
在命令方式输入以下命令。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。

H 将光标移到屏幕的顶行。
L 将光标移到屏幕的最后一行。
M 将光标移到屏幕的中间行。
+ 将光标移到它的第一个非空字符的下一行。
- 将光标移到它的第一个非空字符的前一行。
Enter 将光标移到它的第一个非空字符的下一行。

移到句、段落或节
在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

( 将光标置于前一句的开始,或前一个 s-表达式(如果处于 LISP 方式)。
) 将光标置于下一句的开始,或下一个 s-表达式(如果处于 LISP 方式)。
{ 将光标置于前一个段落的开始,或下一个列表(如果处于 LISP 方式)。
} 将光标置于下一个段落的开始,如果处于 C 方式,则置于下一节,或者如果处于 LISP 方式则置于下一列表。
]] 将光标置于下一节,或者函数(如果处于 LISP 方式)。
[[ 将光标置于前一节,或者函数(如果处于 LISP 方式)。

通过重绘屏幕移动
在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

z 用当前行重绘屏幕顶部。
z- 用当前行重绘屏幕底部。
z. 用当前行重绘屏幕中间。
/Pattern/z- 用包含由 Pattern 参数指定的字符串的行重绘屏幕底部。

翻页和滚动
在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

Ctrl-U 向上滚动 1/2 屏幕。
Ctrl-D 向下滚动 1/2 屏幕。
Ctrl-F 向前滚动一个屏幕。
Ctrl-B 向后滚动一个屏幕。
Ctrl-E 将窗口向下滚动一行。
Ctrl-Y 将窗口向上滚动一行。
z+ 向上翻页
z^ 向下翻页

搜索模式
在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

[Number]G 将光标置于由 Number 参数指定的行号,或者最后一行(如果没有指定 Number 参数)。
/Pattern 将光标置于包含由 Pattern 参数指定的字符串的下一行。
?Pattern 将光标置于包含由 Pattern 参数指定的字符串的上一行。
n 在同一方向重复上次对 Pattern 参数指定的文本的搜索。
N 在相反方向重复上次对 Pattern 参数指定的文本的搜索。
/Pattern/+Number 将光标置于在与 Pattern 参数指定字符串相匹配的行的后面指定的行数。
?Pattern?-Number 将光标置于在与 Pattern 参数指定字符串相匹配的行的前面指定的行数。
% 查找与当前光标位置的括号或大括号相匹配的括号或大括号。

编辑文本
用于编辑的子命令使您能执行以下任务:

在文件中标记具体位置并返回
添加文本到文件
当处于输入方式时更改文本
从命令方式更改文本
复制和移动文本
恢复和重复更改
在文件中标记具体位置并返回
在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

" 将光标移到当前行的前一位置。
" 将光标移到包含当前行前一位置的行的开始。
mx 用 x 参数指定的字母标记当前位置。
`x 将光标移到由 x 参数指定的标记。
'x 将光标移到包含由 x 参数指定的标记的行的开始。

添加文本到文件(文本输入方式)
在命令方式输入以下命令,将 vi 编辑器更改为文本输入方式。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。

aText
在光标后面插入由 Text 参数指定的文本。按 Esc 键结束文本输入方式。
AText
添加由 Text 参数指定的文本到行尾。按 Esc 键结束文本输入方式。
iText
在光标前面插入由 Text 参数指定的文本。按 Esc 键结束文本输入方式。
IText
在行中的第一个非空字符前插入由 Text 参数指定的文本。按 Esc 键结束文本输入方式。
o
在当前行的下面添加一个空行。按 Esc 键结束文本输入方式。
O
在当前行的上面添加一个空行。按 Esc 键结束文本输入方式。

当处于输入方式时更改文本
仅当处于文本输入方式时使用以下子命令。这些命令在命令方式中有不同的意思。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

Ctrl-D
回退到前一个自动缩排停止位。
^ Ctrl-D 只结束该行的自动缩排。
0Ctrl-D 将光标退回到左页边。
Esc 结束插入并返回到命令状态。
Ctrl-H 擦除上个字符。
Ctrl-Q 如果 xon 禁用则输入任意字符。
Ctrl-V 输入任意字符
Ctrl-W 擦除上个的小字。
\ 引用擦除并杀死字符。
Ctrl-? 中断和结束插入或 Ctrl-D 按键顺序。

从命令方式更改文本
在命令方式使用以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

C
更改行的剩余部分(同 c$ 一样)。
cc
更改一行
cw 更改一个单词
cwText 将字更改为 Text 参数指定的文本。
D 删除行的剩余部分(同 d$ 一样)。
dd 删除一行。
dw 删除一个单词。
J 连接行。
rx 用 x 指定的字符替换当前字符。
RText
用 Text 参数指定的文本覆盖字符。
s
替代字符(同 cl 一样)。
S
替代行(同 cc 一样)。
u 撤销上次更改。
x 删除光标位置的字符。
X 删除光标前的一个字符(同 dh 一样)。
<< 将一行向左移位。
<L 将所有的行从光标位置向左移到屏幕末尾。
>> 将一行向右移位。
>L 将所有的行从光标位置向右移到屏幕末尾。
~ 将光标位置的字母更改为相反的大小写格式。
! 缩排 LISP。

复制和移动文本
在命令方式使用以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

p 在光标之后将撤销缓冲区中的文本还原。
P 在光标之前将缓冲区中的文本还原。
"xp 将 x 缓冲区中的文本还原
"xd 将文本删除到 x 缓冲区。
y 将跟随的对象(例如 word 为w)放到撤销缓冲区。
"xy 将跟随的对象放到 x 缓冲区,其中 x 为任意字母。
Y 将行放到撤销缓冲区。

恢复和重复更改
在命令方式使用以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

u 撤销最后一次更改。

注:
撤销后,光标移到更新过的当前行的第一个非空字符。
U 如果最后一次更改以来光标还没有离开行,则恢复当前行。
. 重复上次更改或增加 "np 命令。

注:
这条子命令将重复最后一次的更改,包括一条撤销命令。因此,一次撤销后,重复一次撤销而不是最后一次更改。
这条子命令不是为和宏一起使用设计的。输入 @@ (两个位于字符)以重复宏。

"n p 检索完整行和行块的倒数第 n 次删除。

操作文件
用于操作文件的子命令允许执行在以下各节中概述的任务:

将更改保存至文件
编辑另一文件
编辑一系列文件
查找文件信息
将更改保存至文件
在命令方式使用以下命令。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。

:w 将编辑缓冲区内容写到原始文件中。如果正在 ex 编辑器中使用这条子命令,不必输入 :(冒号)。
:w File 将编辑缓冲区内容写入由 File 参数指定的文件中。如果正在 ex 编辑器中使用这条子命令,不必输入 :(冒号)。
:w! File 用缓冲区内容覆盖由 File 参数指定的文件。如果正在 ex 编辑器中使用这条子命令,不必输入 :(冒号)。

编辑另一文件
在命令方式输入以下命令。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。

:e File 编辑指定文件。如果正在从 ex 编辑器使用这条子命令,不必输入 :(冒号)。
:e! 重新编辑当前文件并废弃所有更改。
:e + File 从最后开始编辑指定文件。
:e + Number File 从指定行号开始编辑指定文件。
:e # 编辑备用文件。在用 :e 命令访问另一个文件之前,备用文件通常是以前的文件名。但是,如果当调用一个新文件时在当前文件中暂挂更改,那么新文件成为备用文件。这条子命令和 Ctrl-A 子命令相同。
:r File 通过在当前行下面添加新行,将文件读取到编辑缓冲区。如果正在从 ex 编辑器使用这条子命令,不必输入 :(冒号)。
:r !Command 通过在当前光标位置下面添加新行,运行指定命令并将它的输出放到文件中。
:ta Tag 从标记位置开始,编辑包含 Tag 标记符的文件。要使用这条子命令,必须首先使用 ctags 命令创建一个函数名及它们位置的数据库。如果正在从 ex 编辑器使用这条子命令,不必输入 :(冒号)。
Ctrl-A 编辑备用文件。备用文件通常使用前个当前文件名。但是,如果当调用一个新文件时在当前文件中暂挂更改,那么新文件成为备用文件。这条子命令和 :e # 子命令相同。

编辑文件列表
在命令方式输入以下命令。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。

:n 编辑命令行上输入的列表中的下一个文件。如果正从 ex编辑器使用这条子命令,则不需要 :(冒号)。
:n Files 指定将要编辑的文件的新列表。如果正从 ex 编辑器使用子命令,则不需要 :(冒号)。

查找文件信息
在命令方式输入以下子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

Ctrl-G 显示当前文件名、当前行号、文件中行数和光标定位于文件整体的百分比。

其它操作
vi 编辑器提供以下各节描述的子命令:

调整屏幕
输入外壳程序命令
中断和结束 vi 编辑器
调整屏幕
在命令方式输入以下命令。可以通过按 Esc 键取消不完整的子命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

Ctrl-L 清除和重绘屏幕。
Ctrl-R 重绘屏幕和消除标有 @ (位于符号)的空行。
zNumber 使窗口长度能显示指定行数。

输入外壳程序命令
以下子命令允许在 vi 编辑器内运行命令。在命令方式输入以下命令。如果需要关于 vi 子命令格式的信息,请参阅“vi 常规子命令语法”。

:sh 进入外壳程序以便能运行多条命令。通过按 Ctrl-D 按键顺序可以返回到 vi 编辑器。如果正在 ex 编辑器中使用这条子命令,则不需要 :(冒号)。
:!Command 运行指定的命令然后返回到 vi 编辑器。如果正在 ex 编辑器中使用这条子命令,则不需要 :(冒号)。

注:
当后跟 :! 子命令时,#(备用文件)、%(当前文件)和 ! (前面的命令)特殊字符都会扩展。要避免这些字符中的任意字符被扩展,可使用 \ (反斜杠)。
:!! 重复最近一次的 :!Command 子命令。
Number!!Command 运行指定的命令并用命令输出替代由 Number 指定的行。如果没有指定数目,则缺省值是 1。如果命令需要标准输入,则指定的行用作输入。
!Object Command 运行指定命令,并用命令输出替代由 Object 参数指定的对象。如果命令需要标准输入,则指定的对象用作输入。

中断和结束 vi 编辑器
在命令方式输入以下命令。如果需要有关 vi 子命令的信息,请参阅“vi 常规子命令语法”。

Q 以命令方式进入 ex 编辑器。
ZZ 退出 vi 编辑器,保存更改。
:q 退出 vi 编辑器。如果更改了编辑缓冲区的内容,vi 编辑器显示一条警告消息并且不退出。如果正从 ex编辑器使用这条子命令,则不需要 :(冒号)。
:q! 退出 vi 编辑器,废弃编辑缓冲区。如果正从 ex编辑器使用这条子命令,则不需要 :(冒号)。
Esc 结束文本输入或结束一条不完整的子命令。
Ctrl-? 中断一条子命令。

出口状态
vi 命令返回以下出口值:

0 指示成功完成。
>0 指示发生错误。

输入文件
输入文件必须是文本文件或和文本文件相似的文件,除了长度不超过 LINE_MAX -1 字节并且包含非空字符的不完整的最近行。

.exrc 文件必须是由 ex 命令组成的文本文件。

缺省情况下,vi 编辑器从被编辑的文件读取文本,而不将这些行中任意一行解释成任何格式的 vi 编辑器命令。

可视模式让你可以选择文件的一部分内容,以便作比如删除,复制等工作。

进入可视模式

v

用v命令进入可视模式。当光标移动时,就能看到有一些文本被高亮显示了,它们就是被选中的内容。

三种可视模式

v

一个字符一个字符地选。从按下v的那个字符起,一直到光标所移动到的位置之间的内容都被选中。

V

一行一行地选。从按下V的那行起,一直到光标所移动到的行之间的所有行都被选中。

Ctrl-v

它选中屏幕上的一个矩形区域。以按下Ctrl-v的位置为一个角,光标所在位置为它的对角。

离开可视模式

按下就会离开可视模式。

可视模式下的编辑

在可视模式下删除文本

d

删除所选中的部分。

D

删除所选中部分所在的行。即使没有把一行都选中,也把一行都删除。

复制

v

复制选中的部分。

D

复制所选中部分所在行。即使没有把一行都选中,也把一行都复制。

更改模式

可以随时在可视模式中的三种之间切换,只需按进入想要切换到的模式的命令即可。

更改文本

c

删除所选中的部分并切换到输入模式。

C

删除所选中的部分所在的行并切换到输入模式。

合并行

当选中想合并在一起的行以后,按下

J(大写)

就可以了。

程序员的命令

>

所选中的部分都缩进一个tab。

在所选中的部分删除一个tab的缩进。

=

自动排列所选中的内容。

查看man

K

命令查看关键字的man page,在可视模式它会以选中的文本为关键字。

可视块模式

通过Ctrl-v进入的模式为可视块模式,它会选中一个矩形区域。

插入内容

I字符串

会在每一行所选中内容的开始前添加”字符串”

改变文本

c字符串

会把选中的内空删除并进入输入模式。你只需要在选中的第一行输入一个字符串,当按下后所有行的选中部分都会和第一行一样。这里的字符串中不能包含换行符,如果包含了换行符的话,它就不会这么神奇,就会根普通模式下的c一样了。

C(大写)

会直接删除到行尾,其它与c一样。

A(大写)

会在选中的块后面添加文本。它们是对齐的。

如果要在选中的块紧接每行末尾添加内容,则需用$来指定选择到行尾,而不是简单地用光标。

替换内容

r

用来把选中的内容替换成同一个字符。

缩进

>

>将选中的块缩进一个shiftwidth

固定链接 留言

Vim简明教程5:窗口

九月 3, 2006 @ 9:17 am · 归类于 Vim

打开一个新窗口

最简单的打开新窗口的方法是

:split

它把一个窗口分成两个,光标留在上面的那个窗口中。

通过

Ctrl-w+方向键

来在窗口间切换

比如

Ctrl-ww 或 Ctrl-w Ctrl-w

切换到下一个窗口;

Ctrl-wj 和 Ctrl-wk

分别切换到下一个窗口和上一个窗口。

要关闭窗口,用

:q 或 ZZ 或 Ctrl-wc

找开一个新窗口并在其中打开一个文件

:split 文件名

也可以给split命令分配一个初始命令,也就是说执行完split接着要做的

:split +命令 文件名

比如

:split +/printf three.c

命令会把当前窗口分成两个然后在上面的窗口中查找printf这个字符串。

控制窗口大小

如果给split命令指定一个参数,则表示新找开窗口的高度

比如

:3split alpha.c

打开一个高度为3的窗口并在其中打开alpha.c

:new命令

:new

命令用起来就跟split差不多,只有一点不同:new命令会在新窗口中新建一个文件,而split只是在新窗口中打开原窗口中的内容。

分割并查看(Split and View)

:sview

命令新建一个窗口并且其中的内容是只读的。

改变窗口大小

行数Ctrl-w+

把当前窗口高度增加”行数”行(如不指定行数,默认为1)

行数Ctrl-w-

把当前窗口高度减少”行数”行(如不指定行数,默认为1)

Ctrl-w=

让所有窗口一样高

行数Ctrl-w_

把当前窗口的高度设为”行数“,如不指定则把它最大化。

缓冲

Vim用缓冲来代表一个文件。当你在编缉一个文件时,只是在编缉它的缓冲。当你完成编辑保存时,Vim把缓冲中的内容保存进文件。当然,事情并不是 这么简单。在Vim中设置的标记之类的也保存在缓冲中。你可以同时拥有多个缓冲,当你编辑多个文件时就是这样。当你想要一个Vim窗口,并且想编辑多个文 件时,把这个窗口最大化是不管用的,因为这不是一个窗口,其它的窗口还是能看得见的。此时你可以把不编辑的缓冲隐藏(hide),用命令

:hide

一个缓冲有三种可能的状态:

活动:显示在屏幕上的窗口

隐藏:没有显示在屏幕上的在编辑的缓冲

不活动:缓冲没有在编辑,但是保存着它的信息

第三种状态需要多解释一下,当你编辑另一个文件时,当前文件的内容就没有用了。Vim就关掉它。但是它的一些其它信息可能还有用。(这一部分比较混乱,原文说得也不是很清楚,不懂也无所谓)

要查看缓冲的列表,用

:buffers

命令。输出的第一列是缓冲编号,第二列是状态,第三列是与缓冲对应的文件。

状态共且以下几种:

- 不活动的缓冲
h 隐藏的缓冲
% 当前缓冲
# 其它缓冲
+ 文件被编辑而未保存

选择一个缓冲

:buffer 缓冲编号

如果你不知道缓冲的编号,可以用

:buffer 文件名

下面的命令分割窗品并编辑指定的缓冲

:sbuffer 缓冲编号

:sbuffer 文件名

还有很多关于缓冲的命令:

:bnext 去下一个缓冲
:count bnext 执行count次去下一个缓冲
:count sbnext 先分割窗口,然后执行:count bnext
:count bprevious 去上一个缓冲。如果指定了count,则执行count次
:count sbprevious 先分割窗口,然后执行:count bprevious
:count bNext 同:count bprevious
:count sbNext 同:count sbprevious
:blast 去最后一个缓冲
:sblast 先分割窗口再执行:blast
:brewind 去第一个窗口
:sbrewind 先分割窗口再执行:brewind
:bmodified count 去第count个编辑过的缓冲
:sbmodified count 等于:split加:bmodified

缓冲选项

通常当所有编辑一个文件的窗口都关掉后,这个窗口的缓冲就变成”不活动”,如果不想这样,可以设置

:set hidden

让它变成隐藏而不是不活动。

通常分割/缓冲相关的命令会分割当前窗口,但是也可以让Vim在已经有窗口打开所指定的缓冲时,切换到那个窗口而不是新建一个:

:set switchbuf=useopen

更多关于switchbuf的内容参见23章。

固定链接 留言

Vim简明教程4:块和多文件编辑

九月 1, 2006 @ 11:04 am · 归类于 Vim

这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com。

剪切,粘贴和复制

当你在删除文字的时候,比如d, x之类的,被删除的内容都被保存了下来。你可以通过

p

来粘贴它们。

交换字符
有时你会把两个字母打反,比如把the打成teh。用

xp

命令就可以把它们调换位置。原理是这样的,首先x会把e删除并保存,p会把它粘贴到光标所在位置,也就是h之后。

关于粘贴的更多
p命令可以用多次。p命令把内容粘贴在光标之后,而

P

把内容粘贴在光标之前。

标记

Vim允许你在文本中做标记。命令

ma

会在光标所在处做一个名为a的标记。你最多可以在文本中做26个标记(a-z)。

要移动到一个标记,用命令

`标记

其中`是在键盘左上角数字一左边的那个键

要移动到一个标记所在行的行首,用命令

‘标记

其中‘是单引号

标记在删除大量文件内容人时很有用。比如

在你想要删除的文本的开始处做标记ma

然后移动到想删除文本的末尾,用d`a删除从此位置到标记a间的内容。

注意,标记会跟着它所标记处的文本移动(比如在它之前插入或删除了东西)

标记都在哪呢?

:marks

命令会列出所有标记的列表。

复制

y

命令用来复制,它的用法与d很相似。

复制一行

Y(大写)

复制一行内容

管道

!动作 命令

会把由”动作”选中的文本作为”命令”的输入,并用”命令”的输出替换选中的文本。

举个例子,sort命令会对一个文件的内容排序。如果想对当前正在编辑文件的前10行排序,可以这样:

先把光标移动到第一行,然后

!10G sort

!!命令

命令把当前行作为“命令”的输入。(这是一个把系统命令的输出放到文件里的好方法)。

编辑另一个文件

:vi 或 :e

可以关闭当前文件,并打开新的文件。

如果当前文件没有保存,则会出现提示。这时使用

:w

会保存未保存的文件。

View命令

:view 文件

会在Vim中以只读方式打开文件。

处理多个文件

可以在调用Vim时指定多个参数以依次编辑多个文件

Vim 文件1 文件2 文件3 …

默认情况下Vim每次只会编辑一个文件,当编辑完一个文件时,

:next

命令会关闭光前文件打开下个文件开始编辑。

我在哪里
当你在编辑多个文件时有时会忘了自己在编辑哪个。

:args

命令会显示当前正在编辑哪个文件。

编辑上一个文件

当要编辑上一个文件时,用命令

:previous 或 :Next。

编辑每一个或最后一个文件

要编辑第一个文件,用

:rewind

要编辑最后一个文件,用

:last

编辑两个文件

当同时编辑两个文件时,正在编辑的是当前文件,没在编辑的会被当成“另一个文件”,在这两个文件间切换要方便的多。用命令:

Ctrl+^

固定链接 留言

Vim简明教程3:查找

九月 1, 2006 @ 10:55 am · 归类于 Vim

这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com。

简单查找

/要查找内容

用/向后查找,紧随其后的要查找的内容。然后按下回车,Vim就会去为你找你想要的东西了。

要注意

.*%/\?!$ 还有空格

都有特殊意义,如果要查找的内容中包含这些字符,要在前面加上一个\。

要查找区配的下一处,用命令

\ 或 n

它们的作用是相同的。

查找历史

查找命令可以允许你来查看查找的历史,在输入一个/以后,不要按回车,然后再按上下键就可以查看上一条或下一条查工历史了。在某个历史处如果按回车,就会查找此内容。

查找选项

高亮

:set hlsearch

命令可以让所有的查找都高亮显示匹配的部分。

:set nohlsearch

取消高亮选项

增量查找

一般情况下,Vim在查找时要等待用户输入整个要查找的内容,然后再去查找。增量查找则是不等用户输入完毕,就查找已输入的部分。要使用它需要进行下面设置:

:set incsearch

如查取消,则

:set noincsearch

反向查找

?要查找的内容

命令从当前位置开始反向查找,即向文件的开始查找。

改变方向

N

命令可以改变查找的方向并查找改变方向后的下一处匹配。

基本的正则表达式

行首(^)和行尾($)

^表示一行的开始,include会匹配每一处的include,而^include只会匹配在行首的include。
$表示一行的结束,was$只会匹配在行末的was。
如果想要匹配只有一个词the的行,用^the$。

匹配任意单个字符(.)

.匹配任一个字符,比如c.m表示以c开头以m结尾的有三个字母的字符串。

匹配特殊字符

好多字符在正则表达式中有特殊含意。要匹配这一类字符,要在前面加一个\。比如,要匹配the.,就要用the\.

固定链接 留言

Vim简明教程2:编辑得更快一些

八月 30, 2006 @ 12:43 pm · 归类于 Vim

这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com。

按词移动

w

按下w会前进一个词。

b

按下b会后退一个词。

这里,就像在Vim中的大部分情况下一样,在这两个命令前面加上一个数字可以让它们重复做多次。

移动到行首或行末

$

$会让你移动到所在行的末尾。

^

^会让你移动到所在行的开始。也可以做相似的事。不过^会移动到第一个非空的字符处,而会移动到行首。

这两个命令也接受数字参数,比如

2$

会移动到下一行末。

在行上查找

f要查找的字符

f用来在一行上查找一个字符并移动到该字符所在处。比如

fx

用来移动到此行当标后第一个x处。如果有一个数字参数,就可以指定移动到某个指定的匹配位置。

F

F用来向左查找。

移动到指定行

行号G

G命令会把你带到用行号指定的行。如果使用没有行号的G,将会移动到最后一行。

显示当前所在位置

:set number

Vim的可制定性是很强的,所以你可以通过:set设定很多选项。number就是其中之一。它是一个布尔选项,用来控制是否在最左边显示行号。

:set number

可以把它打开。

:set nonumber

则可以关闭此选项。

Ctrl+g

Ctrl+g会显示当然后在的位置。

向上和向下翻屏

Ctrl+u

会向上翻半屏

Ctrl+d

会向下翻半屏

删除文本

dw

dw会删除一个词。你应该可以看得出来,这里的w代表的就是word(词).其实d后面可以加好多东西来控制删除的对象。比如:

d$

会删除从当前位置到行末的所有内容。

数字放在哪

这里有一个疑问,如果想删除三个词,那么应该怎么办?是d3w,还是3dw。其实它们都能做到,不过原理不太一样。d3w是一次删除三个词,而3dw是执行三次删除一个词。其实这两者可以混起来,比如2d3w。

改变文本

c

c用来改变文本。它的用法跟d一样。

cc

用来删除一行并进入输入状态。

cw

用来删除一个词并进入输入状态等。

但是cw跟dw有一个不同之处。dw删除了一个词以后,还删除该词后面的空格。而cw只是会删除这个单词,空格仍然保留。

.

.命令会重复上一次所做的删除(d, x)或改变(c)命令。

合并行

J

J(大写)将当下一行接在当前行后,并在两者间插入一个空格来合并这两行。

替换字符

r替换的字符

r命令把当标处的字符替换成在r命令中指定的字符。

更改大小写

~

通过~可以把光标处的字符用它的大写(如果现在是小写)或小写(如果现在是大写)替换。

Vim有着简洁而强大的宏功能。

q宏名

按下 q+宏名 后会进入宏录制状态,也就是说,此后发生的一切操作都会记录到名为“宏名”的宏中。如果名为“宏名”的宏已经存在,则将它覆盖。

@宏名

会调用名为“宏名”的宏。

特殊字符

当要输入特殊字符时,可以用

Ctrl+k特殊字符代号

可以通过命令

:digraph

来得到一个完整的对应表,来查看特殊符号所对应的代号。

比如,要输入á, 则要通过下面的方法

Ctrl+ka’

固定链接 留言

Vim简明教程1:基本编辑

八月 30, 2006 @ 12:37 pm · 归类于 Vim

这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com。

开始之前要做的

touch ~/.Vimrc

这会创建空的~/.Vimrc文件,这会告诉Vim你想要让Vim以Vim方式工作。如果不这样做的话,Vim会以Vi兼空模式运行,会有好多有用的功能没法使用。这也可以在Vim运行过程中通过

:set nocompatible

来实现。

第一运行Vim

gVim file.txt

会运行gvim(Vim的图行化前端),并在其中打开file.txt文件

Vim命令

Vim

会让你在终端打开Vim编辑,而不是像刚才那样打开一个新的窗口。

模式

Vim是一个模式化的编辑器。也就是说,它在不同的模式下会有不同的表现。当最下面的一行是文件名或为空时表示正在普通模式。如果是–INSERT–表示是在编辑模式。而–VISUAL–则表示目前是可视化模式。

插入文本

i

键入i后会从普通模式转变到编辑模式。此时输入的东西将会作为文件的一部分。

当你编辑完毕后,按下就会从编辑模式转回普通模式。同时,不管现在是在什么模式下,都会把你带回普通模式。

移动光标

当你回到命令模式(即普通模式)时,可以用下面的键来移动光标

h(左), j(下), k(上), l(右)

这可能看上去比较奇怪,谁会用l去表示右???但是实际上这是有原因的。移动光标上是在编辑过程中经常要做的,而h , j, k, l就在放右手手指的地方,也就是说按这几个键是最快的。当然,也可以用方向键来移动光标,不过那会大大减低你的编辑速度。

删除字符

x

当你想删除一个字符时,把光标移动到它上面,然后按下x键,它就会消失。

撤消和重做

u

在普通模式下按下u会撤消上一布的操作。

Ctrl+R

如果撤消的次数过多,按下 Ctrl+R 会重做上次撤消的操作。

U

U(大字)是一个特殊的撤消键,它会撤消在在最后编辑的行上所作的所有操作。

退出

ZZ

ZZ会退出Vim并对所编辑的文件保存。

取消修改

:q!

当你编辑完一个文件发现你并不想这样编辑它时,:q! 会让你退出Vim而不保存所作的修改。

追加

a

i会在光标所在安符前插入字符,而a会让你在当标所在的位置之后继续输入内容。

删除一行

dd

dd命令会删除当前所在的一行内容。

新开始一行内容

o

o命令会在光标所在行下面加入一行,并将光标移动的此行的开始以供输入。

O

如果想在光标所在行的上面加入一行,请使用命令O(大写)

获得帮助

:help

:help命令让你可以进入和查看Vim的帮助。用ZZ退出帮助。同时可以用像在Vim一样的h, j, k, l键来移动光标。帮助中会有一些被竖线括起来的词,那其实是超级链接。用Ctrl+]就可以跟随它,Ctrl+t用来后退。如果要查找某一特定主题的帮助,使用

:help 主题

同时

也会起到和:help一样的效果。

重复命令

当要做多次同样的操作时,可以用计数来加快这一过程。

9k

会让你向上移动9行。通过在命令前加一个数字n,就可以执行这一命令n次。

Vim教程

Vim自带了一份Vim教程

:vimtutor

会打开它。

Linux下vi使用手册相关推荐

  1. Linux下vi简明手册

    掌握了一下基本用法,就很容易编写Linux下的文件了 vi 文件名 编辑文件 :i       插入文本 :W     写入文件 :wq   写入并退出 :q      退出 :q!    不存盘,强 ...

  2. linux下Vi编辑器命令大全

    linux下Vi编辑器命令大全 /根目录下的文件夹 输入"/",回车 里面有很多文件夹,如:etc,home,lib,mnt等等 etc:存放用户名和密码 home:每个用户有个文 ...

  3. linux vi de ce,linux下vi命令Vi命令集

    linux下vi命令Vi命令集 熟悉VI 是学习UNIX 系统的一个关口 (feming) vi 是visual edit 的缩写 文本编辑器是所有计算机系统中最常用的一种工具.UNIX下的编辑器有e ...

  4. linux 文档编辑器 word,linux下vi编辑器命令大全

    常用命令linux下vi编辑器命令大全来源:考试大 [学而优则进,考试大以成!] 2007年8月14日 文本编辑器是所有计算机系统中最常用的一种工具.UNIX下的编辑器有ex,sed和vi等,其中,使 ...

  5. linux下vi编辑器的命令大全,linux下VI编辑器命令大全(超级完整版)

    linux下VI编辑器命令大全(超级完整版) NOTICE:把这里提到的命令牢记心间,行走LINUX才能轻松自如! 这是基本功,练就此身本领后,方可学习上乘功夫 如若不按此步骤修练,结果会经脉尽断,真 ...

  6. Linux下vi命令编辑器怎样编辑,怎样保存退出

    摘要 博主在倒腾服务器配置禅道时遇到的问题,Linux下vi命令编辑器怎样编辑,怎样保存退出,liunx这玩应真的是一段时间不用全忘完. 方法/步骤 vi 文件名,接着按回车即可打开对应的文件,如果没 ...

  7. linux 编辑my.cnf,linux下 vi命令编辑/etc/my.cnf

    linux下 vi命令编辑/etc/my.cnf (2011-01-22 16:31:07) 标签: 杂谈 请高手把详细步骤写好.把my.cnf配置文件加个max_connections包括(插入命令 ...

  8. linux中vim文本编辑器的默认模式是,Linux 下 vi/vim 文本编辑器超详细使用指南

    Linux下的编辑器最经常使用的就是vim或者vi文本编辑.vi 和vim 编辑器的区别是vim是vi的改进版本,在vi 编辑器的基础上上扩展了不少实用的功能. 大多数的linux/unix 发行版本 ...

  9. Linux 下 vi/vim 文本编辑器超详细使用指南(转载)

    转载于 https://blog.csdn.net/kingmax54212008/article/details/54142633 Linux下的编辑器最常用的就是vim或者vi文本编辑.vi 和v ...

最新文章

  1. 转: 用css把图片转为灰色图
  2. Codeforces 809A - Do you want a date?(数学+排序)
  3. VS2019调试查看变量_PL/SQL调试存储过程?看这篇就够了
  4. (R)?ex 0.41.2 发布,软件配置和部署
  5. ITK:从二进制图像中提取最大的连接组件
  6. Android 时间轴
  7. dj鲜生-05-配置-静态目录-模板目录-后台语言时区
  8. 高考语文再现奇葩作文题!大数据分析高考作文,看看哪年最坑爹?
  9. 鼠标样式css设置 cursor
  10. 深入了解基于容器的红帽PaaS和OpenShift
  11. server2012文件服务器的开始按钮,Windows Server 2012实用技巧集锦
  12. java 微信高级群发_java微信平台,高级群发接口开发
  13. 挖掘用户反馈中的宝藏——NLP文本标签化解密
  14. 房子装修真的好累~~
  15. 鼠标指针(光标)变成黑方块的解决方法
  16. SpringBoot集成微信支付V3
  17. 基于android的检测心率,基于Android系统的心率信息监测软件的研究与实现
  18. 计蒜客 王子救公主 dfs
  19. 大数据数据科学家常用面试题_想要成为数据科学家,解决数据科学面试的简单指南...
  20. 概率论与数理统计之条件概率乘法公式

热门文章

  1. vue3之watch和watchEffect实战总结
  2. 微信小程序社区疫情防控+后台管理系统|前后分离VUE
  3. 继承父类求解矩形,圆形的面积和周长
  4. 网易云音乐歌单可视化,有多少是你收藏过的呢
  5. 经典力学(动力学)——牛顿定律
  6. CDR插件开发之Addon插件007 - Addon插件简介和案例演示
  7. IOS获取农历节日.节气
  8. 解决 WKWebView goback执行无效的bug
  9. 拼多多店铺如何快速装修?
  10. 面了一个4年经验的测试工程师,自动化都不会也要15k,我真是醉了...