帮助总览 ·
快速参考 ·
命令索引 ·
函数列表 ·
选项列表 ·
用户手册 ·
参考手册 ·
Vim 的意思是 Vi IMproved (Vi 改进版)。以前它是 Vi IMitation (Vi 模仿版) 的缩
写,但是由于做了许多改进,改一下名字还是合适的。Vim 文本编辑器包含了 unix "Vi"
编辑器的几乎所有的命令并且还加入了许多新的命令。这对于编写程序和编辑普通的文本
文件是非常有用的。
所有的命令都可以通过键盘来输入。这样的优点在于: 你可以通过把手放在键盘上,
把眼睛放在屏幕上,集中精力在编辑的任务上。如果你需要,Vim 提供对鼠标的支持,并
且还有带有滚动条和菜单的图形界面版本 (参见: gui.txt )。
本手册的概述可以参见 "help.txt" 文件, help.txt 。在 Vim 里,按 <help>
或 <f1>
键就可以访问该文件,使用 :help 命令也可以 (只键入 ":help" 即可,没有竖线或引
号)。
如果帮助文件不在默认的位置,可以使用选项 'helpfile' 来指定。你可以通过标签
跳转到相应的主题: 用 CTRL-]
跳转至当前光标下的主题,用 CTRL-T
跳回来。
欲知 Vim 与 Vi 有何不同,请参考 vi_diff.txt 。
本手册说明各种系统上的 Vim。不同的计算机和不同的终端之间可能有一点儿不同。除了
本文给出的一些建议,每个支持的系统还有单独的文档,见 sys-file-list 。
pronounce
Vim 的念法是一个词,像 Jim,而不是 vi-ai-em。拼法由大写字母打头,因为它是一个
名字,还是像 Jim。
这是一本包含 Vim 所有命令和选项的参考手册。它不是一本介绍如何使用 Vi 或 Vim 的
书,从某种意义上讲,它有些复杂了。对于初学者,有一个可供实地演练的 tutor 可
以试试。想要学习怎样使用 Vim,请阅读用户手册 usr_toc.txt 。
book books
许多介绍 Vi 和 Vim 的书都会有一个专门为初学者准备的章节。其它的书花更多笔墨在
特定的功能上。这里可以看到 Vim 书的总览:
http://iccf-holland.org/vim_books.html
Vim 的大部分是由 Bram Moolenaar <Bram@vim.org> 开始的。
部分文档来自于由:
W.N. Joy
Alan P.W. Hewett
Mark Horton
编写的多种 Vi 手册。
Vim 编辑器是在 Stevie 的基础上并汲取了其它软件的思想开发出来的。这里提一下为
Vim 工作过的人士。还有许多朋友通过发补丁、对 Vim 提出建议以及各种正反反馈的方
式,给予我很大的帮助,这里恕不一一提及。
如果没有这些人的贡献,Vim 永远不可能成为现在这个样子!
Ron Aaron Win32 图形界面版本更改
Mohsin Ahmed 加密
Zoltan Arpadffy VMS 版本的移植工作
Tony Andrews Stevie 的作者之一
Gert van Antwerpen 对 DJGPP 的 MS-DOS 版本修改
Berkeley DB(3) 交换文件实现的想法
Keith Bostic Nvi 作者
Walter Briscoe Makefile 的更新和各种补丁
Ralf Brown MS-DOS 上的 SPAWNO 库
Robert Colon 提供了许多有用的建议
Marcin Dalecki GTK+ 图形界面的移植,工具栏的图标,gettext()
Kayhan Demirel 给我发送乌干达的信息
Chris & John Downey xvi (多窗口的思想)
Henk Elbers 最先移植到 VMS
Daniel Elstner GTK+ 2 移植
Eric Fischer Mac 系统移植、'cindent' 、其它的改进
Benji Fisher 解答了许多用户问题
Bill Foster Athena 图形界面移植 (后来删除了)
Google 让我每星期可以在 Vim 上工作一天
Loic Grenie xvim (多窗口思想)
Sven Guckes Vim 促进者和前网站维护者
Darren Hiebert Exuberant ctags 作者
Jason Hildebrand GTK+ 2 移植
Bruce Hunsaker 改进了 VMS 移植版本
Andy Kahn Cscope 支持,GTK+ 的图形界面移植
Oezguer Kesim Vim 邮件列表的维护者
Axel Kielhorn Macintosh 移植的工作
Steve Kirkendall Elvis 作者
Roger Knobbe Windows NT 最初移植
Sergey Laskavy Vim 来自莫斯科的帮助
Felix von Leitner 前任 Vim 邮件列表的维护者
David Leonard 将 Python 扩展移植到 Unix
Avner Lottem 在窗口里从右向左编辑
Flemming Madsen X11 客户端-服务器,许多功能和补丁
Tony Mechelynck 回答了许多用户的问题
Paul Moore Python 接口扩展,许多补丁
Katsuhito Nagano 多字节版本的工作
Sung-Hyun Nam 多字节版本的工作
Vince Negri 增强了 Win32 图形界面和控制台版本
Steve Oualline 第一本介绍 Vim 的书的作者 frombook
Dominique Pelle Valgrind 报告及许多修正
A.Politz 很多漏洞报告及一些修正
George V. Reilly 最先从事 Win32 及其图形界面版本的移植工作
Stephen Riehm 漏洞收集者
Stefan Roemer 各种补丁以及为用户提供帮助
Ralf Schandl IBM OS/390 移植
Olaf Seibert DICE 和 BeBox 版本、强化了正则表达式
Mortaza Shiran 波斯语补丁
Peter da Silva termlib
Paul Slootman OS/2 移植
Henry Spencer 正则表达式
Dany St-Amant Macintosh 移植
Tim Thompson Stevie 的作者之一
G. R. (Fred) Walter Stevie 的作者之一
Sven Verdoolaege Perl 接口
Robert Webb 命令行补全、图形界面版本和许多补丁
Ingo Wilken Tcl 接口
Mike Williams PostScript 打印
Juergen Weigert Lattice 版本、AUX 改进、UNIX 和 MS-DOS 移植及
autoconf
Stefan 'Sec' Zehl vim.org 的维护者
Yasuhiro Matsumoto 许多 MS-Windows 改进
Ken Takata 修正和功能
Kazunobu Kuriyama GTK 3
Christian Brabandt 许多修正、功能、用户支持等等
Yegappan Lakshmanan 许多快速修复功能
我很希望能感谢所有向我报告 bug 和给我建议的人,但是人太多在这里不能一一提及。
如果没有他们的帮助,Vim 不可能成为现在这个样子: 他们是 Vim 的生命之源。
love peace friendship gross-national-happiness
在这篇文档里,有些地方还会提到其它版本的 Vi :
Vi vi
Vi "原始版本"。如果不提及,这里指 Sun OS 4.x 里出现的 Vi。":version" 返回
结果 "version 3.7, 6/7/85"。有时也指别的版本的 Vi。只在 Unix 里运行。
现在可以在遵循 BSD 风格许可证的条件下得到源代码。Vi 的更多信息:
http://ex-vi.sourceforge.net/
Posix
Posix 来自 IEEE 1003.2 标准第 2 部分: 外壳和工具。通常叫做 "Posix"。这是关于
Vi 应该怎样工作的文本描述。
参见 posix-compliance 。
Nvi
Nvi "新 (New)" vi 的缩写。4.4 BSD 和 FreeBSD 所带的 Vi 版本。很好地兼容了
原始版本的 Vi,并且增加了一些功能。这里所指的版本是 1.79。"version" 返
回信息是 "version 1.79 (10/23/96)"。最近几年一直没有新版本放出,但是有
一个正在开发的 1.81 版。
源代码自由发放。
Elvis
Elvis 另一个 Vi 的克隆,作者是 Steve Kirkendall。非常简洁但是不及 Vim 灵活。
开发停止了,猫王已经不在了 (译者注
: 原文是 Elvis has left the
building,意为表演结束了,Elvis 这里有双关意思)!源代码自由发放。
Neovim
Neovim 一个 Vim 的克隆。2014 年从 Vim 源代码分叉出去,并朝着不同的方向发展。
和 github 绑定很紧且有多许多的依赖,使得开发更复杂且移植性受限。代码已
经被重整过,使补丁和 Vim 不能交换使用。支持远程 GUI 和脚本语言的集成。
如果阅读本文时使用了语法高亮功能,那些不按本义输入的文字通常会用 Special 组高
亮显示。例如在 (),{}
和 <>
里的项目,以及 CTRL-X
这样的内容。
注意
Vim 的命令使用所有可能的字符。有时候也需要直接输入 [],{}
和 <>
,具体依上
下文而定。
[] 方括号里的字符可选。
count [count]
[count]
可选的数值,可用在命令前以倍数或重复该命令。在没有特殊说明的情
况下,省略时假定计数为一。注意
,在本手册里 [count]
不出现在命
令的描述中,只在解释中有提及。这样做可以使查找命令更简单。如果
打开了 'showcmd' 选项,(部分) 输入的计数 (count) 会显示在窗口
底部。可以用 <Del>
键删除最后输入的数位 ( N<Del> )。
[quotex]
["x] 可选的用于存储文本的寄存器。参见 registers 。x 代表从 'a' 到
'z' 或从 'A' 到 'Z' (大小写英文字母) 以及 '"' 中的一个字符,在
某些情况下 (比如在 put 命令中) 还可以是 '0' 到 '9'、'%'、'#'
或其它字符。大写和小写字母指的是同一个寄存器,但是使用小写字母
会覆盖原先寄存器中的内容,而使用大写字母会将新的内容追加在原内
容之后。若省略 ""x" 或使用 """",则把文本存储到无名寄存器中。
{}
{}
花括号里的内容是命令中必须出现的,但是可以取不同的值。Vim 与
Vi 的不同之处也同样在花括号里给出 (这可以通过上下文清楚地分辨
出来)。
{char1-char2}
{char1-char2}
在 char1 到 char2 区间内的一个字符,例如: {a-z}
是一个小写字
母。多个区间可以串接,例如: {a-zA-Z0-9}
代表任一数字或字母。
{motion} movement
{motion}
移动光标的命令,或动作。它们在 motion.txt 里有解释。例如:
w 移动至下一个单词的首部
b 移动至当前单词的首部
4j 下移四行
/The<CR>
移动至下一个 "The"
这些命令可以跟在一个操作符 operator 后面,以指定操作符所作用
的范围。
- 如果动作包含计数,并且操作符中也包含计数,那么最后的效
果是两个数值的乘积。例如: "2d3w" 删除六个单词。
- 动作可以是反向的,例如: "db" 删除至当前单词首部。
- 动作也可以是鼠标点击。但不是所有的终端都支持鼠标。
- ":omap" 命令可以对字符在操作符等待状态时进行映射。
- 可以使用 Ex 命令来移动光标。这可以用来调用函数做一些复杂移
动。无论你使用什么 ":" 命令,这里的动作总是面向字符且为开
(exclusive) 的。意思是你不可能包括行末字符而不带上换行符 (除
非设置了 'virtualedit' 属性)。
如果 Ex 命令改变了操作符开始位置之前的文本或者跳转到别的缓冲
区,那么结果不可预测。改变之后的文本是可以的。如果当前的缓冲
区没有卸载,跳转到别的缓冲区也是可以的。
{Visual}
{visual}
选中的文本区域。先用 "v"、"V" 或者 CTRL-V
设定开始位置,然后用
移动光标的命令来选定选择文本的另一端。
在操作符 operator 命令之前应用,高亮文本用作操作符的作用范
围。
参见 visual-mode 。
<character>
<character>
下表中的特殊字符,可以带修饰符,也可以是带有修饰符的单个 ASCII
字符。
'character'
'c' 单个 ASCII 字符。
CTRL-{char}
CTRL-{char}
作为控制字符输入的 {char}
;也就是说,按住 CTRL 键再按 {char}
。
{char}
是大写字母还是小写字母都没关系;就是说 CTRL-A
和 CTRL-a
是一样的。但是在有些终端里,用 SHIFT 键会生成别的编码,如果是
这样,就别这么用。
'option'
'option' 用单引号括起来的是选项,或参数。可以被赋值。参见 options 。
quotecommandquote
"command" 用双引号括起来的是可以输入的命令。
command
新风格的命令,以便和其他用引号括起的文本和字符串相区隔。
(译者注
: 这里是反引号括起,但显示被隐藏)
key-notation key-codes keycodes
下面这些按键的名称文档里会用到。它们也可以用在 ":map" 命令里 (按下 CTRL-K
再按
下你想输入的键就可以输入该键的键名)。
标识符 含义 等价于 十进制数值
备注
: Shift+方向键,帮助键和撤销键只在少数终端里有效。在 Amiga 机器上,Shift
+功能键 10 生成命令序列引入码 (CSI),也用于键序列。只有再按一个键,该代码才能
被识别出来。
备注
: Delete 键有两个键码。一般是十进制的 ASCII 码 127,这个总能认出来。但有些
delete 键会发送 termcap 项 "kD" 的值。这两个值有同样的效果。另见 :fixdel 。
备注
: 小键盘上的按键与其对应的 "正常" 按键一样。例如,<kHome>
与 <Home>
有同样
的效果。如果小键盘上的键发送的原始键码与 "正常" 键相同,那么将被认为是按下了
"正常" 键。例如,如果 <kHome>
发送的键码与 <Home>
相同,当按下 <khome>
的时
候,Vim 会认为你按下了 <Home>
。<kHome>
的映射此时不会有效。
<>
例子中经常使用 <>
记法。有时这只是用来说明你需要输入什么,但经常它需要照本义键
入,例如在 ":map" 命令里。规则是:
1. 任何可显示的字符都可以直接键入,反斜杠和 '<' 除外。
2. 反斜杠用两个反斜杠表示 "\\",或者用 "<Bslash>
"。
3. 真正的 '<' 用 "\<" 或 "<lt>
" 表示。只有在没有歧义的时候才可以直接用 '<'
表示。
4. "<key>
" 的意思是特殊键。其含义上面的表格都有介绍,下面是一些例子:
<Esc>
Escape 键
<C-G>
CTRL-G
<Up>
光标上移键
<C-LeftMouse>
Control+鼠标左键点击
<S-F11>
Shift+功能键 11
<M-a>
Meta- a (第 8 位置位的 'a')
<M-A>
Meta- A (第 8 位置位的 'A')
<t_kd>
termcap 的 "kd" 项 (光标下移键)
尽管你可以指定 {char}
为多字节字符的 <M-{char}
>,Vim 可能不知道那对应什么
字节序列,所以不能工作。
如果你想在 Vim 里使用 <>
的完整记法,必须确定 'cpoptions' 里不包括 '<' 标志位
(如果没有置位 'compatible' ,默认值就是这样)。
:set cpo-=<
这里,<>
记法使用 <lt>
来抵消键名的特殊含义。使用反斜杠也可以,但是需要去掉
'cpoptions' 里的 'B' 标志位。
下面的例子是把 CTRL-H
映射成六个字符 "<Home>
":
:imap <C-H>
\<Home>
:imap <C-H>
<lt>
Home>
第一种方法只有在 'cpoptions' 里没有 'B' 标志位才好用。第二种总成立。
要在映射中得到按本义出现的 "<lt>
" 这几个字符:
:map <c-l> <lt>lt>
对于映射,缩写和菜单命令你可以用复制-粘贴直接使用手册里的例子。你也可以手动键
入它们,包括 '<' 和 '>'。但是在其它命令里,比如 ":set" 和 "autocmd",这是 不
行的!
此记法可用于双引号字符串内,以 "\<" 开始,如 "\<C-Space>
"。这样就会生成特殊键
值。要转换回可读的文本,可用 keytrans() 。
Vim 有七种 基本
模式:
Normal Normal-mode command-mode
普通模式 在普通 (normal) 模式里,你可以输入所有的普通编辑命令。
启动编辑器之后就处于该模式 (除非你置位了 'insertmode'
选项,下面会有说明)。亦称为命令 (command) 模式。
可视模式 该 (visual) 模式与普通模式相似,但是移动光标的命令会扩
展高亮的区域。非移动命令作用于高亮的区域。见
Visual-mode 。
如果置位了 'showmode' 选项,窗口底部会出现
"--VISUAL--" 字样。
选择模式 该 (select) 模式看起来与 MS-Windows 的选择模式很像。键
入一个可显示字符会删掉所有被选择的字符并且进入插入模
式。见 Select-mode 。
如果置位了 'showmode' 选项,窗口底部会出现
"--SELECT--" 字样。
插入模式 在插入 (insert) 模式下你键入的内容会插入到缓冲区。见
Insert-mode 。
如果置位了 'showmode' 选项,窗口底部会出现
"--INSERT--" 字样。
命令行模式 在命令行 (command-line 或 Cmdline) 模式里你可以在窗口
底部输入一行命令。执行 Ex 命令使用 ":",查找使用 "?"
和 "/",调用过滤命令使用 "!"。 Cmdline-mode
Ex 模式 与命令行模式类似,但是执行完一条命令后,你会继续停留在
Ex 模式。提供非常有限的命令行编辑。 Ex-mode
终端作业模式 在终端窗口中和作业互动。输入的键传给作业,作业输出在终
端窗口中显示。 terminal 说明如何切换到其它模式。
还有七种 附加
模式。这些都是在基本模式的基础上变化而来的:
Operator-pending Operator-pending-mode
操作符等待模式 该 (operator-pending) 模式与普通模式类似,但是在操作符
之后,Vim 等待一个动作 {motion}
以确定操作符的作用范
围。
替换模式 替换 (replace) 模式是插入模式的特殊情况。你可以做和插
入模式里相同的事情,但是你输入的字符会覆盖原先的字符。
见 Replace-mode 。
如果置位了 'showmode' 选项,窗口底部会出现
"-- REPLACE --" 字样。
虚拟替换模式 虚拟替换 (virtual replace) 模式类似于替换模式,但你替
换的不是文件的字符,而是屏幕上占据的位置。见
Virtual-Replace-mode 。
如果置位了 'showmode' 选项,窗口底部会出现
"-- VREPLACE --" 字样。
插入普通模式 在插入模式里输入 CTRL-O
(见 i_CTRL-O ) 可进入该
(insert normal) 模式。与普通模式类似,但是只能执行一条
命令然后返回到插入模式。
如果置位了 'showmode' 选项,窗口底部会出现
"-- (insert) --" 字样。
终端普通模式 在终端窗口中使用普通模式。不能作任何修改。插入命令如
"a" 或 "i" 会返到终端作业模式。
插入可视模式 在插入模式里进行可视模式的选择,例如,在插入模式里键入
CTRL-O
然后键入 "v" 或 "V" 或 CTRL-V
,可进入该 (insert
visual) 模式。可视选择结束时,返回到插入模式。
如果置位了 'showmode' 选项,窗口底部会出现
"-- (insert) VISUAL --" 字样。
插入选择模式 在插入模式里启动选择模式可进入该 (insert select) 模
式。例如,用鼠标拖拽或 <S-Right>
。如果选择模式结束,
Vim 返回插入模式。
如果置位了 'showmode' 选项,窗口底部会出现
"-- (insert) SELECT --" 字样。
如果因为某种原因你不知道处于哪种模式,你总是可以通过按两下 <Esc>
返回普通
模式。不过不能在 Ex 模式里这么做,那里,用 ":visual" 返回普通模式。
如果在你按下 <Esc>
后发现屏幕闪烁或者听到响声,这证明你已经回到普通模式。
然而,在插入模式里按下 CTRL-O
后再按下 <Esc>
也会听到喇叭的响声,但是你仍然处
于插入模式,再按一下 <Esc>
即可。
i_esc
切换 到 模式
普通 可视 选择 插入 替换 命令行 Ex
从 模式
普通 v V ^V *4 *1 R gR : / ? ! Q
可视 *2 ^G c C -- : --
选择 *5 ^O ^G *6 -- -- --
插入 <Esc>
-- -- <Insert>
-- --
替换 <Esc>
-- -- <Insert>
-- --
命令行 *3 -- -- :start -- --
Ex :vi -- -- -- -- --
-- 不可能
*1 从普通模式切换到插入模式可以用这些命令: "i"、"I"、"a"、"A"、"o"、"O" "c"、
"C"、"s" 或 "S"。
*2 从可视模式切换到普通模式可以使用一个不移动光标的命令,这样命令执行后就会返
回普通模式。也可以使用 <Esc>
"v"、"V" 或 "CTRL-V
" (见 v_v ),这几个命令可
以没有副作用地终止可视模式。
*3 从命令行模式切换至普通模式:
- 敲 <CR>
或 <NL>
,使得键入的命令得以执行。
- 删除整行 (例如,用 CTRL-U
) 最后再按一下 <BS>
。
- 敲 CTRL-C
或 <Esc>
可以退出命令行模式而不执行已经键入的命令。
在最后一种情况里,<Esc>
可能被 'wildchar' 定义,这样 <Esc>
就会作为命令行模
式里的命令补全键。你可以再按一下 <Esc>
忽略补全的命令。
*4 从普通模式切换到选择模式:
- 如果 'selectmode' 里包含 "mouse",当使用鼠标选择文本时即可切换。
- 如果 'selectmode' 里包含 "key",那么按住 Shift 键然后用不可显示的命令来移
动光标。
- 如果 'selectmode' 包含 "cmd",那么用 "v"、"V" 或 "CTRL-V
"
- 使用 "gh"、"gH" 或 "g CTRL-H
" g_CTRL-H
*5 使用不可显示的命令移动光标 (不要按 Shift) 可以从选择模式转到普通模式。
*6 输入一个可显示字符可以从选择模式切换到插入模式。插入该字符的同时删除被选择
的部分。
如果打开了 'insertmode' 选项,编辑文件时将直接进入插入模式。
CTRL-\_CTRL-N i_CTRL-\_CTRL-N c_CTRL-\_CTRL-N v_CTRL-\_CTRL-N
另外,CTRL-\
CTRL-N
或 <C-\><C-N>
可以用来从其它模式切换到普通模式。这样可以确
保 Vim 处于普通模式而不会像 <Esc>
那样产生响声。然而,它不能用在 Ex 模式。当用
在一个需要参数的命令,诸如 f 、 m 等之后,等待时间由 'ttimeoutlen' 决定。
焦点在终端窗口时,CTRL-\
CTRL-N
切换到普通模式,直到键入某编辑命令为止,见
t_CTRL-\_CTRL-N 。
CTRL-\_CTRL-G i_CTRL-\_CTRL-G c_CTRL-\_CTRL-G v_CTRL-\_CTRL-G
如果置位了 'insertmode' ,则 CTRL-\
CTRL-G
或 <C-\><C-G>
切换到插入模式,否则切
换至普通模式。这可以让 Vim 处于 'insertmode' 所指定的模式,而不必关心当前的模
式。
Q mode-Ex Ex-mode Ex EX E501
Q 切换至 "Ex" 模式。有点像一个接一个的 ":" 命令,除了:
- 你不需要输入 ":"。
- 屏幕不会在每个命令执行完后更新。
- 没有正常的命令行编辑。
- 映射和缩写无效。
实际上,你正在使用一个 "标准的" 行编辑器。(<Del>
或
<BS>
删除一个字符,CTRL-U
删除整行)。
如果使用 "ex" 或 -e 命令行参数调用 Vim,Vim 缺省进入
该模式。
用 ":vi" 命令 :visual 退出 "Ex" 模式。
注意
: 老版本的 Vim 里,"Q" 用来排版文本,现在那个功能
使用 gq 。但是如果你使用 vimrc_example.vim 脚本或
defaults.vim ,那么 "Q" 会和 "gq" 一样。选择模式除
外。
gQ
gQ 同 "Q" 一样切换到 "Ex" 模式,但与一条接一条的 ":" 命令
相当。所有的行编辑、补全等功能都可用。
用 :vi 命令 ( :visual ) 退出 "Ex" 模式。
在普通模式和插入/替换模式里屏幕窗口显示当前缓冲区里的内容: 所见即所得。但有两
个例外:
- 如果 'cpoptions' 选项里包含 '$',并且改动在一行之内,被改动的文本没有直接删
除,而是在被删除的最后一个字符放上 '$'。
- 当在一个窗口输入文本的时候,监视相同文本的其它窗口不会立即更新,直到插入结束
为止。
除非关闭了 'wrap' 选项,否则长度大于窗口宽度的文本会被回绕 (见下面)。置位
'linebreak' 选项可以使文本只在空白字符处被回绕。
如果已经到达了缓冲区的最后一行,但是当前窗口还有显示空间,Vim 会在末行之后的第
一列显示一个 '~',像这样:
+-----------------------+
|some line |
|last line |
|~ |
|~ |
+-----------------------+
也就是说,'~' 意味着到达了缓冲区的末尾。
如果当前窗口不能完整地显示最后一行,Vim 会在窗口的最后几行的第一列用 '@' 字符
指示这一点,就像这样:
+-----------------------+
|first line |
|second line |
|@ |
|@ |
+-----------------------+
也就是说,'@' 表示这一行窗口里放不下。
如果 'display' 选项里出现 "lastline" 标志位,你就不会看到窗口最左边的 '@' 字
符。如果最后一行不能完全放入窗口,只显示能放下的部分并且用 "@@@" 代替该行的最
后三个字符,像这样:
+-----------------------+
|first line |
|second line |
|a very long line that d|
|oesn't fit in the wi@@@|
+-----------------------+
如果文本中只包含一行,窗口里放不下,这是很特殊的情况。Vim 只会显示光标所在位置
周围的部分行。不会显示特殊字符,这样你可以编辑该行的任何部分。
在 'highlight' 选项里出现的 '@' 可以用来为 '@' 和 '~' 设置特殊的高亮方式。这使
它们能够和缓冲区里的真实字符得以区分。
选项 'showbreak' 定义回绕行的前端包含的字符串。
wrap-off
如果关闭了 'wrap' 选项,长行不会被回绕。只显示能放到窗口里的那一部分。如果光标
移动到没有显示的部分,屏幕会水平方向滚动。这样做的好处是可以正常显示文本列而窗
口里放不下的行也可编辑。缺点是你不能一次看见一行的所有字符。选项 'sidescroll'
可以设定滚动列数的最小值。
所有正常的 ASCII 字符直接显示在屏幕上。<Tab>
用相应数量的空白代替。其余不可显
示的字符用 "^{char}
" 代替。其中的 {char}
为不可显示字符的值加 64。比如,响铃字
符 (7) 显示为 "^G"。ASCII 值在 127 至 160 的字符用 "~{char}
" 代替,{char}
是该
字符的数值减去 64。这些字符在屏幕上要多占一个位置,而光标只能放在其中的第一个
位置上。
置位 'number' 选项时,所有的行前面会加行号。提示: 如果不喜欢回绕行和行号混杂,
可以把 'showbreak' 选项设置成八个空格:
:set showbreak=\ \ \ \ \ \ \ \
置位 'list' 选项时,<Tab>
字符不会显示成多个空格,而是 "^I"。'$' 字符会出现在
每一行的末尾,这样你可以发现尾部的空白字符。
在命令行模式里,只有命令行自己被正确地显示。缓冲区内容的显示在返回命令模式 (即
普通模式) 的那一刻才进行更新。
窗口的最后一行用来显示状态和其它信息。状态信息只有在对应选项打开的时候才可用:
状态信息 选项 缺省 Unix 缺省
当前模式 'showmode' 开 开
命令字符 'showcmd' 开 关
光标位置 'ruler' 关 关
当前模式是 "-- INSERT --" 或 "-- REPLACE --",见 'showmode' 。命令字符是你输
入的但还没执行的命令。
如果你使用慢速终端,可以关闭状态信息以加速编辑:
:set nosc noru nosm
如果出错,错误信息会保持至少一秒钟 (使用反转显示)。
有些命令会显示有多少行受影响。只有行数超过 'report' 选项控制的阈值 (默认是 2)
时,这才会发生。
在 Amiga 系统上,Vim 在 CLI 窗口里运行。Vim 的名字和当前文件的全名在标题栏里显
示。窗口大小改变的时候,Vim 自动重画窗口。你可以把窗口搞的很小,但是如果太小了
就连一行文本也装不下了。尽量让窗口保持至少 40 个字符的宽度,这样可以阅读最后一
行 (状态行) 的大多数信息。
在大多数 Unix 系统上,Vim 可以正确地识别和处理窗口大小的调整。
缓冲区 包含文本行,通常从一个文件中读入。
屏幕 Vim 所用的整个工作区域。可以是一个终端模拟窗口。也被叫
做 "Vim 窗口"。
窗口 缓冲区视图。同一个缓冲区可有多个窗口。
一个屏幕包含一个或多个窗口,被状态行和屏幕底部的命令行分割。
+-------------------------------+
屏幕 | 窗口 1 | 窗口 2 |
| | |
| | |
|=== 状态行 ===|==== 状态行 ===|
| 窗口 3 |
| |
| |
|========== 状态行 =============|
|命令行 |
+-------------------------------+
命令行也用来输出信息。如果命令行没有足够的空间来显示信息,屏幕会上滚。
四种不同类型的 "行":
缓冲 行 缓冲区里的行。与读出/写入文件的行的内容相同。每一行可
以包含成千上万个字符。
逻辑 行 应用过折叠的缓冲行。关闭折叠里的缓冲行被折叠成一个逻辑
行: "+-- 99 行 折叠"。逻辑行也可以包含成千上万个字符。
窗口 行 窗口里显示的行: 被回绕的逻辑行,换行符,等等,都在这里
应用。窗口行的长度不能超过窗口允许的宽度,多出的部分会
被回绕或截断。
屏幕 行 Vim 使用的屏幕中的行。包括所有窗口的窗口行、状态行以及
命令行。它们的长度受屏幕的宽度的限制。如果命令行里命令
的长度大于屏幕的宽度,则自动回绕并滚屏以腾出空间。
缓冲 行 逻辑 行 窗口 行 屏幕 行
1. 一 1. 一 1. +-- 折叠 1. +-- 折叠
2. 二 2. +-- 折叠 2. 五 2. 五
3. 三 3. 五 3. 六 3. 六
4. 四 4. 六 4. 七 4. 七
5. 五 5. 七 5. === 状态行 ===
6. 六 6. aaa
7. 七 7. bbb
8. ccc ccc c
1. aaa 1. aaa 1. aaa 9. cc
2. bbb 2. bbb 2. bbb 10. ddd
3. ccc ccc ccc 3. ccc ccc ccc 3. ccc ccc c 11. ~
4. ddd 4. ddd 4. cc 12. === 状态行 ===
5. ddd 13. (命令行)
6. ~
vim:tw=78:ts=8:noet:ft=help:norl: