VIM 参考手册    by Bram Moolenaar
                                译者: Willis、tocer
终端信息                                                 terminal-info 
Vim 使用你使用的终端的信息来填充屏幕和识别你输入的键。如果信息不正确,屏幕可能
会混乱,而一些键也可能识别不了。屏幕上必须执行的动作是通过输出字符串完成的。特
殊键会产生一系列字符的序列。这些字符串存在终端选项里,见  terminal-options 。
注意: 运行  GUI  的时候这里多数都用不到。
1. 启动                          startup-terminal 
2. 终端选项                      terminal-options 
3. 窗口大小                      window-size 
4. 慢速和快速终端                slow-fast-terminal 
5. 使用鼠标                      mouse-using 
1. 启动 startup-terminal
Vim 启动时,假定一个缺省终端类型。Amiga 上,这是一个标准的 CLI 窗口, MS-Windows 是 pc 终端,而 Unix 则是 ansi 终端。还有一些终端类型,它们都总是可 用的,见下 builtin-terms 。 使用 '-T' Vim 参数,你可以给出终端名。如果没有给出,Vim 会试图从 TERM 环境变量 里读取名字。 termcap terminfo E557 E558 E559 Unix 系统使用 terminfo 数据库或者 termcap 文件。在所有的文档里,这被统称为 "termcap"。编译时,configure 的运行会自动决定是用 terminfo 还是 termcap。如果 运行 Vim 时,":version" 的输出显示 +terminfo 的话,就意味着使用的是 terminfo。另见 xterm-screens 。 在非 Unix 系统中,termcap 只有在 Vim 编译时定义 TERMCAP 才有效。 builtin-terms builtin_terms 有若干内建的终端可用。从 9.0.0280 补丁开始,不同 Vim 版本间此支持不再有区别。 用 `:set term=xxx` (在不运行 GUI 的时候),可以看到可用的内建终端类型列表。另见+builtin_terms 。
如果包含了 termcap 的代码,Vim 会试图从 termcap 文件和内建的 termcap 里得到你
使用的终端的字符串。如果你使用的终端项目确实存在,两者都会使用。哪个在前面决定
于 'ttybuiltin' 选项的设置:
'ttybuiltin' 打开       1: 内建 termcap         2: 外部 termcap
'ttybuiltin' 关闭       1: 外部 termcap         2: 内建 termcap
如果其中某个选项不存在,就从另外一个那里读取。如果两个都存在,就从排名前面的那
个读取。
使用哪个外部 termcap 文件和不同的系统有关,也可能依赖于环境变量 "TERMCAP" 和
"TERMPATH"。见 "man tgetent"。
依赖于终端的设置                                 term-dependent-settings 
如果你想根据终端名字设置选项或者映射,最好在 .vimrc 里设置。示例:
   if &term == "xterm"
     ... xterm 映射和设置 ...
   elseif &term =~ "vt10."
     ... vt100、vt102 映射和设置 ...
   endif
                                                 raw-terminal-mode 
普通的编辑会把终端设为原始 ("raw") 模式。't_ti'、't_TI' 和 't_ks' 定义的字符串
会送到终端上。正常情况下,这把终端设为一个状态,该状态下能合法给出 termcap 代
码,并激活光标和功能键。
Vim 退出终端时,它会回到 Vim 启动前的模式。't_te'、't_TE' 和 't_ke' 定义的字符
串会发送给终端。在 Amiga 上,执行外部命令的命令 (例如 "!!") 会把终端暂时置回普
通模式。这意味着你可以按打印键停止到屏幕的输出。输出在按 <BS> 时继续。
注意: 如果 't_ti' 非空,Vim 假定它会切换到轮换屏幕上。执行外壳命令或退出 Vim
时产生的结果可能会因此稍有不同。如果不想如此,用 't_TI' 和 't_TE' (但要附加而
不是覆盖)。
Vim 会试图用 't_RK' termcap 项目来检测终端使用的键盘协议。它会在 't_TI' 之后发
送,但只在没有工作的时候才会做 (没有预输入或等待中的命令)。这是为了防止返回的
响应出现在外壳命令中或 Vim 结束后才到达。
                                                 xterm-bracketed-paste 
如果设置了 't_BE' 选项,进入 "raw" 模式时会发送 't_BE' 到终端,退出 "raw" 模式
时则发送 't_BD'。终端应在粘贴文本之前发送 't_PS',而粘贴文本之后发送 't_PE'。
这样 Vim 就能区隔粘贴的文本和键入的字符。粘贴文本的处理就像使用了鼠标中键,按
本义插入而不作命令解释。
请 注意: 尽量括号内的粘贴试图防止粘贴时讨厌的副作用 (如 CTRL-C 或 <Esc> 键),
它不应被视作安全保证,因为不同的终端实现的方式可能略有不同。粘贴到 Vim 时仍应
小心。
光标在首列时,在光标前插入粘贴文本。否则在光标位置之后附加粘贴文本。这意味着你
不能在首列之后粘贴。不幸的是 Vim 没有办法知道鼠标指针在哪里。
注意 有些情况下 Vim 不能识别这种括号内的粘贴,而只能得到原始的文本。在其它一些
情况下,Vim 只能得到首个粘贴的字符而丢失其余的部分,例如在使用 "r" 命令时。如
果你对此不满意,在 .vimrc 这样关闭带括号的粘贴:
        set t_BE=
如果这样做,Vim 运行时发送 't_BD' 给终端以关闭括号内的粘贴。
如果不设置  t_PS  或  t_PE ,不使用  t_BE 。围绕粘贴文字的转义码如果不能识别,
这样可以确保括号内的粘贴不打开。
注意: 'esckeys' 选项如没有置位,关闭括号内的粘贴模式 (置位 'compatible' 选项时
也是)。
如果你的终端支持括号内的粘贴但没有自动设置相关选项,可以试试下面:
        if &term =~ "screen"
          let &t_BE = "\e[?2004h"
          let &t_BD = "\e[?2004l"
          exec "set t_PS=\e[200~"
          exec "set t_PE=\e[201~"
        endif
    if !has('gui_running') && &term =~ '^\%(screen\|tmux\)'
        " 更好鼠标支持,见 :help 'ttymouse'
        set ttymouse=sgr
        " 打开真彩,见 :help xterm-true-color
        let &termguicolors = v:true
        let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
        let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
        " 打开括号内的粘贴模式,见 :help xterm-bracketed-paste
        let &t_BE = "\<Esc>[?2004h"
        let &t_BD = "\<Esc>[?2004l"
        let &t_PS = "\<Esc>[200~"
        let &t_PE = "\<Esc>[201~"
        " 打开焦点事件跟踪,见 :help xterm-focus-event
        let &t_fe = "\<Esc>[?1004h"
        let &t_fd = "\<Esc>[?1004l"
        execute "set <FocusGained>=\<Esc>[I"
        execute "set <FocusLost>=\<Esc>[O"
        " 打开带修饰符的光标键,见 :help arrow_modifiers
        execute "silent! set <xUp>=\<Esc>[@;*A"
        execute "silent! set <xDown>=\<Esc>[@;*B"
        execute "silent! set <xRight>=\<Esc>[@;*C"
        execute "silent! set <xLeft>=\<Esc>[@;*D"
    endif
                                                         cs7-problem 
注意: 如果终端设置在运行 Vim 以后改变,你可能会碰到不合法的设置组合。有报告说
Solaris 2.5 上 "stty cs8 parenb",使用 "stty cs7 parenb" 恢复就会有这个问题。
如果你使用 "stty cs8 -parenb -istrip",就能正确恢复了。
有些 termcap 项目在某种意义上是错误的,因为发送 't_ks' 后光标键发送的代码和
termcap 定义的不同。要避免这一点,你需要设置 't_ks' (和 't_ke') 为空值。这必须
在初始化时进行 (见  initialization ),不然就太晚了。
有些终端项目假设最高位总是被复位的。例如: Amiga 上光标向上项目可以是
":ku=\E[A:"。但是 Amiga 实际发送 "\233A"。如果最高位被复位,这没有问题,比如在
串行线使用 Amiga 的时候。如果光标键不工作,尝试一下项目 ":ku=\233A:"。
有些 termcap 项目使用 ":ku=\E[A:"。但 Amiga 实际发送 "\233A"。输出结果 "\E["
和 "\233" 经常是等价的,但输入时则不然。要修正这一问题,你需要修改 termcap 项
目,或者用 :set 命令改变键码 (译者注: 这段内容有重复,但原文如此)。
许多光标键以单个 <Esc> 开始。Vim 必须找出是否这确实是 <Esc> 键单击,还是光标键
序列的开始。它等待下一个字符到达。如果一秒钟不出现,就假设是单个 <Esc>。在很慢
的系统里,这可能失败,使得有时候光标键不能工作。如果你发现这一问题,复位
'timeout' 选项。Vim 会在 <Esc> 之后等待下一个字符的来临。如果你需要输入单个
<Esc>,必须输入两次。复位 'esckeys' 选项在插入模式下避免这个问题,但是这样你不
能在插入模式下使用光标和功能键。
Amiga 上窗口调整大小的识别只有在终端名为 "amiga" 或 "builtin_amiga" 才有可能。
有些终端的光标键的代码不明确。televideo 925 就是这样的一个终端。光标左键发送的
是 CTRL-H。这使得退格和光标左键无法区别。要避免这一问题,CTRL-H 永远不会识别为
光标左键。
                                         vt100-cursor-keys   xterm-cursor-keys 
其它终端 (例如,vt100 和 xterm) 的光标键发送 <Esc>OA、<Esc>OB,等等。不幸的
是,这些是插入模式下合法的命令: 结束插入,在上面打开新行,开始插入 'A'、'B',
等等。Vim 不会执行这些命令,相反,它会把该输入键序列识别为光标键的移动。要避免
这一点而使 Vim 在两种情况下都能工作,你需要以下设置:
        :set notimeout          " 映射时不检查超时
        :set ttimeout           " 终端键码检查超时
        :set timeoutlen=100     " 超时为 100 毫秒
这要求键码在 100 毫秒的间隔内发送,从而能识别其为光标键。正常情况下,你的输入
不会那么快,所以它们能被识别为单独输入的命令,即使 Vim 收到了相同的字节序列。
                                 vt100-function-keys   xterm-function-keys 
xterm 可以用两种模式发送功能键 F1 到 F4: vt100 兼容模式或不兼容模式。因为 Vim
可能不知道 xterm 发送的是哪种,两种都被识别。<Home> 和 <End> 键情况相同。
                        普通                    vt100 
        <F1>    t_k1    <Esc>[11~       <xF1>   <Esc>OP      <xF1>-xterm 
        <F2>    t_k2    <Esc>[12~       <xF2>   <Esc>OQ      <xF2>-xterm 
        <F3>    t_k3    <Esc>[13~       <xF3>   <Esc>OR      <xF3>-xterm 
        <F4>    t_k4    <Esc>[14~       <xF4>   <Esc>OS      <xF4>-xterm 
        <Home>  t_kh    <Esc>[7~        <xHome> <Esc>OH      <xHome>-xterm 
        <End>   t_@7    <Esc>[4~        <xEnd>  <Esc>OF      <xEnd>-xterm 
Vim 启动时,<xF1> 被映射到 <F1>,<xF2> 到 <F2> 等等。这意味着缺省两种代码做相
同的事情。如果你为 <xF2> 定义了映射而你的终端支持两种键,那么就覆盖了缺省的映
射,从而可以用 <F2> 和 <xF2> 键做不同的事情。
                                                         xterm-shifted-keys 
更新的 xterm 版本支持 Shift + 功能键和特殊键。Vim 识别其中的大多数。使用 ":set
termcap" 来检查哪些是支持的,相应的代码为何。多数情况下这些不在 termcap 里,只
有 builtin_xterm termcap 才支持。
                                                         xterm-modifier-keys 
新版 xterm 对于大多数功能键支持 Alt 和 Ctrl。为避免增加 Alt、Ctrl 和 Shift 对
每个键的捆绑,在 termcap 项目末尾识别一个特殊序列: ";*X"。"X" 可以是任何字符,
通常是 '~'。";*" 支持一个可选的修饰符参数。";2" 代表 Shift,";3" 是 Alt,";5"
是 Ctrl,";9" 是 Meta (当它与 Alt 不同时)。它们可以组合使用。例如:
        :set <F8>=^[[19;*~
        :set <Home>=^[[1;*H
关于这些代码的另一个特性是它们不能被另外的代码覆盖。这就避免了被来自 xterm
 t_RV  所包含的代码直接覆盖掉。
另一个特殊值是以 "@;*X" 结尾的 termcap 项目。这用于光标键,那里可用 "CSI X" 或
"CSI 1 ; 修饰符 X"。所以 "@" 代表或者后面有跟修饰符的 "1",或者为空。
                                                         arrow_modifiers 
若干终端模拟器 (alacritty、gnome、konsole 等等) 为带修饰符的键发送特殊代码,但
这些键在 termcap/terminfo 数据库里没有对应项目。可在 vimrc 里添加若干行使其工
作。例如,要在 gnome terminal 里支持带 Control 修饰符的光标键:
        if &term =~ 'gnome'
           execute "set <xUp>=\<Esc>[@;*A"
           execute "set <xDown>=\<Esc>[@;*B"
           execute "set <xRight>=\<Esc>[@;*C"
           execute "set <xLeft>=\<Esc>[@;*D"
        endif
                                                         xterm-scroll-region 
Sun 和其它的平台上的 xterm 缺省的 termcap 项目不包含区域滚动的项目。在
/etc/termpcap 的 xterm 项目里增加 ":cs=\E[%i%d;%dr:",那么一切都没有问题了。
                                                         xterm-end-home-keys 
在一些系统上 (至少使用 XFree86 3.1.2 的 FreeBSD),<End> 和 <Home> 键的代码里包
含 <Nul> 字符。要使得这些键发送正确的键码,在你的 ~/.Xdefaults 文件里增加:
        *VT100.Translations:            #override \n\
                        <Key>Home: string("0x1b") string("[7~") \n\
                        <Key>End: string("0x1b") string("[8~")
                                                 xterm-8bit   xterm-8-bit 
Xterm 可以在使用 8 位转义序列的模式里运行。这里,CSI 代码代替了 <Esc>[。它的优
点是,<Esc> 键可以在插入模式下更快的识别,因为不会和特殊键的开始相混淆。
对于内建的 termcap 项目而言,Vim 检查 'term' 选项是否包含 "8bit"。如果是,就在
termcap 项目、鼠标和一些其它的项目中使用 8 位字符,通常,你在外壳里设置 $TERM
为 "xterm-8bit"。Vim 会发现这一点,并自动调整 8 位设置。
如果 Vim 接收到对  t_RV  序列的应答 (请求版本) 并且它以 CSI 开始,就假设终端处
于 8 位模式,并把所有的健序列转换为它们的 8 位版本。
                                                 xterm-terminfo-entries 
一段时间里,terminfo 项目不足于描述 Vim 使用的所有功能。而内建的 xterm 则有所
有需要的 termcap 项目,因此,若干和 xterm 足够相似的终端利用了这一点,在 $TERM
终端名里附加 "xterm-" 前缀。
这会引发问题,因为这些终端常常并非 100% 与 xterm 兼容。2023 年初,terminfo 数
据库新增了若干项目,这样不需要 "xterm" 变通方法就可以使用这些功能。以下是相关
项目 (至今为止):
        名字    xterm 值        描述 
        RV      "\033[>c"       请求版本  t_RV 
        BE      "\033[?2004h"   打开括号内粘贴模式  t_BE 
        BD      "\033[?2004l"   关闭括号内粘贴模式  t_BD 
        PS      "\033[200~"     粘贴文本开始  t_PS 
        PE      "\033[201~"     粘贴文本结束  t_PE 
        XM      "\033[?1006;1004;1000%?%p1%{1}%=%th%el%;"
                                鼠标打开 / 关闭  t_XM 
        FE      "\033[?1004h"   打开焦点事件跟踪  t_fe 
        FD      "\033[?1004l"   关闭焦点事件跟踪  t_fd 
"XM" 项目包含了 "1006" 以打开 SGR 风格鼠标报告,支持多于 223 的列数。也包含了
"1004",打开焦点报告。
备注: 到 2023 年为止,Vim 自己目前不使用 "1004",相反地,建议用  t_fe  和
 t_fd  项目来设置焦点报告,而不要和鼠标跟踪绑定,因为 ncurses 在最新版本里也开
始如此 (这些项目最终会在 terminfo/termcap 里出现)。
                                                 xterm-kitty   kitty-terminal 
Kitty 终端是特例。主要因为是它和绝大多数其它终端不同,也因为它并不试图缺省让自
己更像其它终端,而是规定了在 Kitty 里应用要如何工作。这使得 Vim 在 Kitty 终端
里很难工作。有些特例需要特别代码,但为某个特定终端开特例并非理想。
其中一个问题是 $TERM 的值设为 "xterm-kitty"。对 Vim 而言,这意味此终端和 xterm
兼容,可使用内建的 xterm termcap 项目。许多其它终端依赖这一点。但 Kitty 并不完
全兼容 xterm。作者建议忽略 "xterm-" 前缀并使用对应的在 terminfo 项目。现在就是
如此,不使用内建的 xterm termcap 项目。但仍设置了 t_RV,不然很多功能不可用,一
个例子是自动设置 'ttymouse' 为 "sgr" (直到为此可用  t_XM  为止)。
不清楚为什么 kitty 设置 $TERM 为 "xterm-kitty",此终端并不真得和 xterm 兼容。
"kitty" 更合适,但该名字的 terminfo 项目并不广泛被接受。
注意 kitty 键盘协议是另一个功能,作  kitty-keyboard-protocol 。
2. 终端选项 terminal-options termcap-options E436
终端选项可以和普通选项一样设置。但不会在 ":set all" 命令里显示。相反,应该用 ":set termcap"。 通过设置合适的选项,你总是可以调整个别字符串的值。例如:        :set t_ce=^V^[[K        (CTRL-V,<Esc>,[,K)
        选项    含义    
        t_AB    设置背景色 (ANSI)                                t_AB   't_AB' 
        t_AF    设置前景色 (ANSI)                                t_AF   't_AF' 
        t_AL    增加若干空行                                     t_AL   't_AL' 
        t_al    增加一行空行                                     t_al   't_al' 
        t_bc    退格字符                                         t_bc   't_bc' 
        t_cd    清除到屏幕尾                                     t_cd   't_cd' 
        t_ce    清除到行尾                                       t_ce   't_ce' 
        t_cl    清除屏幕                                         t_cl   't_cl' 
        t_cm    光标移动 (必需!)                          E437   t_cm   't_cm' 
        t_Co    颜色数目                                         t_Co   't_Co' 
        t_CS    如果非空,光标相对于滚动区域                     t_CS   't_CS' 
        t_cs    定义滚动区域                                     t_cs   't_cs' 
        t_CV    定义垂直滚动区域                                 t_CV   't_CV' 
        t_da    如果非空,上方的行可以向下滚动                   t_da   't_da' 
        t_db    如果非空,下方的行可以向上滚动                   t_db   't_db' 
        t_DL    删除若干行                                       t_DL   't_DL' 
        t_dl    删除一行                                         t_dl   't_dl' 
        t_fs    结束设置窗口标题 (退出 termcap 状态行)           t_fs   't_fs' 
        t_ke    结束 "keypad 传输" 模式                          t_ke   't_ke' 
        t_ks    进入 "keypad 传输" 模式                          t_ks   't_ks' 
        t_le    左移光标一个字符                                 t_le   't_le' 
        t_mb    闪烁模式                                         t_mb   't_mb' 
        t_md    加粗模式                                         t_md   't_md' 
        t_me    普通模式 (撤销 t_mr、t_mb、t_md 和颜色)          t_me   't_me' 
        t_mr    反转模式                                         t_mr   't_mr' 
        t_ms    如果非空,光标可以在突出/反转模式下移动          t_ms   't_ms' 
        t_nd    非破坏性的空格字符                               t_nd   't_nd' 
        t_op    复位到原先的颜色对                               t_op   't_op' 
        t_RI    光标右移若干字符                                 t_RI   't_RI' 
        t_Sb    设置背景色                                       t_Sb   't_Sb' 
        t_Sf    设置前景色                                       t_Sf   't_Sf' 
        t_se    结束突出                                         t_se   't_se' 
        t_so    退出模式                                         t_so   't_so' 
        t_sr    反向滚动 (往下)                                  t_sr   't_sr' 
        t_te    退出 "termcap" 模式                              t_te   't_te' 
        t_ti    让终端进入 "termcap" 模式                        t_ti   't_ti' 
        t_ts    开始设置窗口标题 (进入 termcap 状态行)           t_ts   't_ts' 
        t_ue    下划结束                                         t_ue   't_ue' 
        t_us    下划模式                                         t_us   't_us' 
        t_ut    使用当前背景色清除                               t_ut   't_ut' 
        t_vb    可视铃声                                         t_vb   't_vb' 
        t_ve    光标可见                                         t_ve   't_ve' 
        t_vi    光标不可见                                       t_vi   't_vi' 
        t_vs    光标 "非常" 可见 (闪烁)                          t_vs   't_vs' 
        t_xs    如果非空,突出部分不能通过覆盖删除 (hpterm)      t_xs   't_xs' 
        t_xn    如果非空,在屏幕最后单元里写入字符不导致滚动     t_xn   't_xn' 
                                                                 t_xo   't_xo' 
        t_xo    如果非空,终端使用 xon/xoff 握手协议,映射
                CTRL-S 不再可用,因为它被用作流控制 (用于 vt420
                终端)。此标志位只在启动 Vim 时有作用。
        t_ZH    斜体模式                                         t_ZH   't_ZH' 
        t_ZR    斜体结束                                         t_ZR   't_ZR' 
Vim 增加的 (它们没有标准代码):
        t_AU    设置下划线色 (ANSI)                              t_AU   't_AU' 
        t_Ce    下曲 (undercurl) 和下划线结束                    t_Ce   't_Ce' 
        t_Cs    下曲 (波浪状下划线) 模式                         t_Cs   't_Cs' 
        t_CF    设置备选字体 (使用索引 0 - 10)                   t_CF   't_CF' 
        t_Us    双下划线模式                                     t_Us   't_Us' 
        t_ds    点状下划线模式                                   t_ds   't_ds' 
        t_Ds    虚线下划线模式                                   t_Ds   't_Ds' 
        t_Te    删除线结束                                       t_Te   't_Te' 
        t_Ts    删除线模式                                       t_Ts   't_Ts' 
        t_IS    开始设置图标文本                                 t_IS   't_IS' 
        t_IE    结束设置图标文本                                 t_IE   't_IE' 
        t_WP    设置窗口位置 (Y,X),以像素计算                  t_WP   't_WP' 
        t_GP    获取窗口位置 (Y,X),以像素计算                  t_GP   't_GP' 
        t_WS    设置窗口大小 (高度,宽度) 以单元格数计算         t_WS   't_WS' 
        t_VS    光标正常可见 (无闪烁)                            t_VS   't_VS' 
        t_SI    开始插入模式 (条形光标)                          t_SI   't_SI' 
        t_SR    开始替换模式 (下划线光标)                        t_SR   't_SR' 
        t_EI    结束插入或替换模式 (块形光标)                    t_EI   't_EI' 
                 termcap-cursor-shape 
        t_RV    请求终端版本字符串 (适用于 xterm 和其它终端模    t_RV   't_RV' 
                拟器) 其响应存于  v:termresponse   xterm-8bit 
                'ttymouse'  xterm-codes 
        t_XM    打开/关闭鼠标报告。                              t_XM   't_XM' 
                见下  mouse-reporting 
        t_RK    请求终端键盘协议状态;                           t_RK   't_RK' 
                 t_TI  之后发送
        t_u7    请求光标位置 (适用于 xterm)                      t_u7   't_u7' 
                见 'ambiwidth'
                其响应存于  v:term7resp 
        t_RF    请求终端前景色                                   t_RF   't_RF' 
                其响应存于  v:termfgresp 
        t_RB    请求终端背景色                                   t_RB   't_RB' 
                其响应存于  v:termbgresp 
        t_8f    设置终端前景色 (R, G, B)                         t_8f   't_8f' 
                 xterm-true-color 
        t_8b    设置终端背景色 (R, G, B)                         t_8b   't_8b' 
                 xterm-true-color 
        t_8u    设置下划线色 (R, G, B)                           t_8u   't_8u' 
        t_BE    打开括号内粘贴模式                               t_BE   't_BE' 
                 xterm-bracketed-paste 
        t_BD    关闭括号内粘贴模式                               t_BD   't_BD' 
                 xterm-bracketed-paste 
        t_SC    开始设置光标颜色                                 t_SC   't_SC' 
        t_EC    结束设置光标颜色                                 t_EC   't_EC' 
        t_SH    设置光标形状                                     t_SH   't_SH' 
        t_RC    请求终端光标闪烁                                 t_RC   't_RC' 
                其响应存于  v:termblinkresp 
        t_RS    请求终端光标风格                                 t_RS   't_RS' 
                其响应存于  v:termstyleresp 
        t_ST    在栈中保存窗口标题                               t_ST   't_ST' 
        t_RT    从栈中恢复窗口标题                               t_RT   't_RT' 
        t_Si    在栈中保存图标文本                               t_Si   't_Si' 
        t_Ri    从栈中恢复图标文本                               t_Ri   't_Ri' 
        t_TE    结束 "raw" 模式                                  t_TE   't_TE' 
        t_TI    让终端进入 "raw" 模式                            t_TI   't_TI' 
        t_fe    打开焦点事件跟踪                                 t_fe   't_fe' 
                 xterm-focus-event 
        t_fd    关闭焦点事件跟踪                                 t_fd   't_fd' 
                 xterm-focus-event 
有些代码有开始、中间和结束部分。开始和结束由 termcap 选项定义,中间部分是文
本。
        设置标题文本:     t_ts {title text} t_fs
        设置图标文本:     t_IS {icon text} t_IE
        设置光标颜色:     t_SC  {color name}  t_EC
t_SH 必须提供一个参数:
        0、1 或无       闪烁块状光标
        2               块状光标
        3               闪烁下划光标
        4               下划光标
        5               产供垂直条光标
        6               垂直条光标
仅当接收到 t_RV 的反馈时才会发送 t_RS。Mac OS 上如果 termresponse 不能识别到
Terminal.app 也不会用它。
                                                         mouse-reporting 
许多终端报告鼠标点击,有些能报告鼠标移动和拖动。Vim 需要知道为些使用哪些键码。
为此,使用 "XM" terminfo/termcap 项目。Vim 也有 'ttymouse' 选项来指定使用的鼠
标协议。可用值见该选项。
如果 Vim 可以读取 "XM" terminfo/termcap 项目,会用之打开和关闭鼠标报告。如果该
项目不存在,则使用 'ttymouse' 的值来决定。
如果 "XM" 项目存在且首项为 "1006",设置 'ttymouse' 为 "sgr",除非它已有赋值。
键 代 码                                                 terminal-key-codes 
备注: 尽量使用 <> 形式
        选项    名字            含义    
        t_ku    <Up>            光标上移                         t_ku   't_ku' 
        t_kd    <Down>          光标下移                         t_kd   't_kd' 
        t_kr    <Right>         光标右移                         t_kr   't_kr' 
        t_kl    <Left>          光标左移                         t_kl   't_kl' 
                <xUp>           替代的光标上移                   <xUp> 
                <xDown>         替代的光标下移                   <xDown> 
                <xRight>        替代的光标右移                   <xRight> 
                <xLeft>         替代的光标左移                   <xLeft> 
                <S-Up>          shift 光标上移
                <S-Down>        shift 光标下移
        t_%i    <S-Right>       shift 光标右移                   t_%i   't_%i' 
        t_#4    <S-Left>        shift 光标左移                   t_#4   't_#4' 
        t_k1    <F1>            功能键 1                         t_k1   't_k1' 
                <xF1>           替代的 F1                        <xF1> 
        t_k2    <F2>            功能键 2                 <F2>    t_k2   't_k2' 
                <xF2>           替代的 F2                        <xF2> 
        t_k3    <F3>            功能键 3                 <F3>    t_k3   't_k3' 
                <xF3>           替代的 F3                        <xF3> 
        t_k4    <F4>            功能键 4                 <F4>    t_k4   't_k4' 
                <xF4>           替代的 F4                        <xF4> 
        t_k5    <F5>            功能键 5                 <F5>    t_k5   't_k5' 
        t_k6    <F6>            功能键 6                 <F6>    t_k6   't_k6' 
        t_k7    <F7>            功能键 7                 <F7>    t_k7   't_k7' 
        t_k8    <F8>            功能键 8                 <F8>    t_k8   't_k8' 
        t_k9    <F9>            功能键 9                 <F9>    t_k9   't_k9' 
        t_k;    <F10>           功能键 10                <F10>   t_k;   't_k;' 
        t_F1    <F11>           功能键 11                <F11>   t_F1   't_F1' 
        t_F2    <F12>           功能键 12                <F12>   t_F2   't_F2' 
        t_F3    <F13>           功能键 13                <F13>   t_F3   't_F3' 
        t_F4    <F14>           功能键 14                <F14>   t_F4   't_F4' 
        t_F5    <F15>           功能键 15                <F15>   t_F5   't_F5' 
        t_F6    <F16>           功能键 16                <F16>   t_F6   't_F6' 
        t_F7    <F17>           功能键 17                <F17>   t_F7   't_F7' 
        t_F8    <F18>           功能键 18                <F18>   t_F8   't_F8' 
        t_F9    <F19>           功能键 19                <F19>   t_F9   't_F9' 
                <S-F1>          shift 功能键 1
                <S-xF1>         替代的 <S-F1>                    <S-xF1> 
                <S-F2>          shift 功能键 2                   <S-F2> 
                <S-xF2>         替代的 <S-F2>                    <S-xF2> 
                <S-F3>          shift 功能键 3                   <S-F3> 
                <S-xF3>         替代的 <S-F3>                    <S-xF3> 
                <S-F4>          shift 功能键 4                   <S-F4> 
                <S-xF4>         替代的 <S-F4>                    <S-xF4> 
                <S-F5>          shift 功能键 5                   <S-F5> 
                <S-F6>          shift 功能键 6                   <S-F6> 
                <S-F7>          shift 功能键 7                   <S-F7> 
                <S-F8>          shift 功能键 8                   <S-F8> 
                <S-F9>          shift 功能键 9                   <S-F9> 
                <S-F10>         shift 功能键 10                  <S-F10> 
                <S-F11>         shift 功能键 11                  <S-F11> 
                <S-F12>         shift 功能键 12                  <S-F12> 
        t_%1    <Help>          帮助键                           t_%1   't_%1' 
        t_&8    <Undo>          撤销键                           t_&8   't_&8' 
        t_kI    <Insert>        插入键                           t_kI   't_kI' 
                <kInsert>       keypad 插入键
        t_kD    <Del>           删除键                           t_kD   't_kD' 
        t_kb    <BS>            退格键                           t_kb   't_kb' 
        t_kB    <S-Tab>         反制表 (shift-tab)     <S-Tab>   t_kB   't_kB' 
        t_kh    <Home>          home 键                          t_kh   't_kh' 
        t_#2    <S-Home>        shift home 键         <S-Home>   t_#2   't_#2' 
                <xHome>         替代的 home 键                   <xHome> 
        t_@7    <End>           end 键                           t_@7   't_@7' 
        t_*7    <S-End>         shift end 键     <S-End>   t_star7   't_star7' 
                <xEnd>          替代的 end 键                    <xEnd> 
        t_kP    <PageUp>        page-up 键                       t_kP   't_kP' 
        t_kN    <PageDown>      page-down 键                     t_kN   't_kN' 
        t_K1    <kHome>         keypad home 键                   t_K1   't_K1' 
        t_K4    <kEnd>          keypad end 键                    t_K4   't_K4' 
        t_K3    <kPageUp>       keypad page-up 键                t_K3   't_K3' 
        t_K5    <kPageDown>     keypad page-down 键              t_K5   't_K5' 
        t_K6    <kPlus>         keypad 加号键          <kPlus>   t_K6   't_K6' 
        t_K7    <kMinus>        keypad 减号键      <kMinus>      t_K7   't_K7' 
        t_K8    <kDivide>       keypad 除号          <kDivide>   t_K8   't_K8' 
        t_K9    <kMultiply>     keypad 乘号        <kMultiply>   t_K9   't_K9' 
        t_KA    <kEnter>        keypad 回车键      <kEnter>      t_KA   't_KA' 
        t_KB    <kPoint>        keypad 小数点      <kPoint>      t_KB   't_KB' 
        t_KC    <k0>            keypad 0                  <k0>   t_KC   't_KC' 
        t_KD    <k1>            keypad 1                  <k1>   t_KD   't_KD' 
        t_KE    <k2>            keypad 2                  <k2>   t_KE   't_KE' 
        t_KF    <k3>            keypad 3                  <k3>   t_KF   't_KF' 
        t_KG    <k4>            keypad 4                  <k4>   t_KG   't_KG' 
        t_KH    <k5>            keypad 5                  <k5>   t_KH   't_KH' 
        t_KI    <k6>            keypad 6                  <k6>   t_KI   't_KI' 
        t_KJ    <k7>            keypad 7                  <k7>   t_KJ   't_KJ' 
        t_KK    <k8>            keypad 8                  <k8>   t_KK   't_KK' 
        t_KL    <k9>            keypad 9                  <k9>   t_KL   't_KL' 
                <Mouse>         鼠标代码的引导键                 <Mouse> 
        t_PS    <PasteStart>    括号内粘贴的开始                 t_PS   't_PS' 
                                 xterm-bracketed-paste 
        t_PE    <PasteEnd>      括号内粘贴的结束                 t_PE   't_PE' 
                                 xterm-bracketed-paste 
                <FocusGained>   Vim 窗口获得焦点 (仅限内部使用)
                <FocusLost>     Vim 窗口失去焦点 (仅限内部使用)
关于 t_so 和 t_mr 的 注意 事项: 如果 termcap 项目 "so" 不存在,则使用 "mr" 的
项目。反之亦然。"se" 和 "me" 也是一样。如果你的终端同时支持反转和突出模式,你
可以看到两种不同的模式。如果只支持其中一种,则两者看起来一样。
                                                         keypad-comma 
keypad 键在没有映射时和等价的普通键等价。但有一个特例: 如果你的 keypad 有逗号
而不是小数点,Vim 仍然认为那是小数点。下面的映射可以修正这个问题:
        :noremap <kPoint> ,
        :noremap! <kPoint> ,
                                                         xterm-codes 
得到键码有一个特殊的技巧,现在这只适用于 xterm。如果定义了  t_RV ,而且得到的
响应指示使用的版本是补丁级别不低于 141 的 xterm,Vim 就使用特殊的转义序列来从
xterm 里直接取得键码。响应的内容用于调整各种 t_ 代码。这样,xterm 可能根据所处
的模式 (8-位、VT102、VT220,等等) 产生不同代码的问题就避免了。结果是,<xF1> 这
样的代码就不需要了。
't_Co' 是其中一个可修改的代码,色彩数。这会触发重画。如果有问题,尽早复位
'xtermcodes' 选项:
        set noxtermcodes
注意: 请求键码只能在启动时完成。如果 xterm 选项在 Vim 启动以后被改变,这些转义
序列就不再能识别了。
                                                         xterm-true-color 
只要终端支持,Vim 支持终端真彩 (使用  highlight-guifg  和  highlight-guibg )。
为此,置位 'termguicolors' 选项。
https://gist.github.com/XVilka/8346728 有支持真彩的终端列表。
 t_8f  和  t_8b  termcap 项目告知终端使用何种 RGB 色。这些选项的缺省值应适用于
大多数终端。不合适的话可手动设置。它们的缺省值是:
         let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
         let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
         let &t_8f = "\<Esc>[38:2::%lu:%lu:%lum"
         let &t_8b = "\<Esc>[48:2::%lu:%lu:%lum"
        XTerm*allowWindowOps:           true
        set t_fd=
        set t_fe=
如果终端支持但 Vim 不识别此终端,需要你自己设置这些选项:
        let &t_fe = "\<Esc>[?1004h"
        let &t_fd = "\<Esc>[?1004l"
        execute "set <FocusGained>=\<Esc>[I"
        execute "set <FocusLost>=\<Esc>[O"
Vim 启动时如果显示出现乱码,那么这些设置有问题。
                                                         termcap-colors 
关于颜色的 注意 事项: 't_Co' 选项告诉 Vim 可用的颜色数。如果非零,'t_AB' 和
't_AF' 选项可以用来设置颜色。如果这些都不可用,就使用 't_Sb' 和 't_Sf'。't_me'
用来复位到缺省的颜色设置。另见 'termguicolors'。
GUI 运行时,'t_Co' 设为 16777216。
                                 termcap-cursor-shape   termcap-cursor-color 
Vim 进入插入模式时,发送 't_SI' 转义序列。Vim 进入替换模式而 't_SR' 已设置时,
发送 't_SR' 转义序列,否则发送 't_SI'。当离开插入或替换模式时,发送 't_EI'。
备注: 没设置 't_EI' 时,不会发送 't_SI' 和 't_SR'。而没设置 't_SI' 或 't_SR'
时,'t_EI' 只会发送一次。
这可以用来改变插入模式下光标的形状或颜色。它们不是标准的 termcap/terminfo 项
目,你需要自己设定。
一个 xterm 的例子,改变光标颜色:
    if &term =~ "xterm"
        let &t_SI = "\<Esc>]12;purple\x7"
        let &t_SR = "\<Esc>]12;red\x7"
        let &t_EI = "\<Esc>]12;blue\x7"
    endif
注意: 当 Vim 退出时,将保留普通模式的光标形状,而不会恢复 Vim 启动之前的形状。
Windows 终端可用以下代码:
    " 注意: 应在 `set termguicolors` 或 `set t_Co=256` 之后设置。
    if &term =~ 'xterm' || &term == 'win32'
        " 使用 DECSCUSR 转义序列
        let &t_SI = "\e[5 q"    " 闪烁竖线
        let &t_SR = "\e[3 q"    " 闪烁下划线
        let &t_EI = "\e[1 q"    " 闪烁块状
        let &t_ti ..= "\e[1 q"  " 闪烁块状
        let &t_te ..= "\e[0 q"  " 缺省 (取决于终端,通常是闪烁块状)
    endif
{仅当编译时加入  +cursorshape  特性才支持}
                                                         termcap-title 
如果终端允许通过发送字符串设置标题的话,'t_ts' 和 't_fs' 选项用来设置窗口的标
题。在发送标题字符串之前和之后分别发送两者。类似的,'t_IS' 和 't_IE'  用来设置
图标文本。这些是 Vim 内部对 Unix termcap 的扩展,所以它们的值不能从外部
termcap 获取。不过,内建的 termcap 包含 xterm 和 iris-ansi 的合适的项目,所以
你不需要在这里设置。
                                                         hpterm 
如果反转和其他高亮方式不工作,尝试设置 't_xs' 选项为非空字符串。这使得 't_ce'
代码可以用于从行里撤销高亮。对 "hpterm" 这是必需的。置位 'weirdinvert' 选项和
设置 't_xs' 非空的相同的效果,反之亦然。
                                                         scroll-region 
有些 termcap 不包括 "cs" (滚动区域) 的项目,尽管有些终端支持这一特性。比如,
Sun 上的 xterm。你可以使用内建的 builtin_xterm 或者自己定义 t_cs。例如:
        :set t_cs=^V^[[%i%d;%dr
其中 ^V 是 CTRL-V,而 ^[ 是 <Esc>。
垂直滚动区域 t_CV 不是标准的 termcap 代码。Vim 在 GUI 里内部使用之。但是如果你
能找到支持这一特性的终端,也可以在终端里定义,两个参数分别是限制滚动的区域的左
边列和右边列。就像 t_cs 定义顶部行和底部行那样。定义 t_CV 会使得在垂直分割的窗
口里滚动窗口快很多。如果 t_da 或者 t_db 设置了,不要设置 t_CV (文本在滚动时不
会清除)。
不幸的是无法从 termcap 里推断光标定位应不应该使用滚动区域: 是相对于屏幕的开始
处,还是相对于滚动区域的开始处。大多数终端使用第一种方法。在光标定位相对于滚动
区域的情况下,'t_CS' 选项应该设置为任何非空字符串。反之,则设为空字符串。
xterm 用户 注意: shift + 光标键一般不工作。要使用 xmodmap 命令和 Vim 里的一些
        设置才可以。
        在 xterm 里给出如下命令:
                xmodmap -e "keysym Up = Up F13"
                xmodmap -e "keysym Down = Down F16"
                xmodmap -e "keysym Left = Left F18"
                xmodmap -e "keysym Right = Right F19"
        然后在 Vim 里使用这些映射:
                :map <t_F3> <S-Up>
                :map! <t_F3> <S-Up>
                :map <t_F6> <S-Down>
                :map! <t_F6> <S-Down>
                :map <t_F8> <S-Left>
                :map! <t_F8> <S-Left>
                :map <t_F9> <S-Right>
                :map! <t_F9> <S-Right>
<S-Up>,你可以使用任何其它的命令来做你希望 shift + 光标上移
做的事情。(注意: 为了帮助使用有左侧键的 Sun 键盘的人,不要使用 F14,因为它和撤
销键有冲突;不要用 F15,因为它执行把窗口转到前台的操作;也不要用 F17,因为它关
闭窗口。其他系统上,你也许可以用这些键。)
3. 窗口大小 window-size
[这是关于 Vim 使用的整个窗口,不是用 ":split" 命令创建的那种窗口。(译者注: Vim
里的术语或者用屏幕更合适些。)]
如果你在 Amiga 上运行 Vim,而终端名是 "amiga" 或 "builtin_amiga",打开 amiga
专用的窗口大小调整技术。Unix 系统上,有三个方法可以得到窗口的大小:
- ioctl 调用 (TIOCGSIZE 或者 TIOCGWINSZ,视乎你的系统而定)
- 环境变量 "LINES" 和 "COLUMNS"
- termcap 项目 "li" 和 "co"
如果所有这些都不行,假设缺省大小为 24 行和 80 列。如果收到改变窗口大小的信号,
大小会重新设置。如果窗口大小不正确,你可以用 'lines' 和 'columns' 选项来设置正
确的值。
这个命令可以设置屏幕大小:
                                                 :mod   :mode   E359 
:mod[e] [mode]
如果不带参数,该命令检测屏幕大小并重画屏幕。
[mode] 过去用于 MS-DOS,现在已经不能用了。 Vim9  不支持此命令。
4. 慢速和快速终端 slow-fast-terminal
slow-terminal 如果你有一个快速终端,你可能愿意置位 'ruler' 选项。光标位置将显示在状态行上。 如果你使用横向滚动 (关闭 'wrap' 选项),考虑把 'sidescroll' 设小一点。 如果你有一个慢速终端,你也许希望复位 'showcmd' 选项。这样,命令字符就不会显示 在状态行上。如果终端滚动很慢,把 'scrolljump' 设为 5 左右。如果光标离开屏幕 (例如,用 "j"),Vim 会一次滚动 5 行。另外一个可能性是减少 Vim 使用的行数,通过 "z{height}<CR>" 命令。
如果终端的字符到达时间相距超过 1 秒,你也许希望设置 'timeout' 和/或 'ttimeout'
选项。见 "Options" 一章  options 。
如果你的终端不支持滚动区域,但是支持插入/删除行命令,多个窗口的滚动也许会使得
行跳上跳下。复位了 'ttyfast' 选项就会如此。为此,可以这样检查一下:
        verbose set ttyfast?
        hi NonText cterm=NONE ctermfg=NONE
这避免了空格在改变属性时被重复发送。大多数终端上,你反正也不会看到任何区别。
如果你在慢速的串行线上使用 Vim,你也许想要尝试在 "screen" 程序里运行 Vim。
screen 优化终端 I/O 挺不错的。
如果你在测试 termcap 选项,但是你看不到发生了什么,你也许希望设置 'writedelay'
选项。如果非零,每次给终端只发一个字符。这使得屏幕刷新变慢很多,从而能看清楚发
生了什么。
5. 使用鼠标 mouse-using
本节说明在终端或者终端窗口里如何使用鼠标。GUI 窗口里如何使用鼠标在 gui-mouse 里解释。关于使用鼠标滚轮进行滚动的部分见 scroll-mouse-wheel 。 不要忘记用以下命令打开鼠标:        :set mouse=a
否则 Vim 不会在所有模式下识别鼠标 (见 'mouse')。
目前,鼠标只有在 Unix 的 xterm 窗口、带  sysmouse  的 *BSD 控制台、Linux 终端
(带 GPM  gpm-mouse )、Windows 终端上才支持。鼠标键击可以用来定位光标,设置区域
并粘贴。
'mouse' 选项的字符决定 Vim 在什么场合下会使用鼠标:
                n       普通模式
                v       可视模式
                i       插入模式
                c       命令行模式
                h       在帮助文件里,以上所有的模式
                a       以上所有的模式
                r       跳过  hit-enter  提示
'mouse' 的缺省值为空,即不使用鼠标。通常你会用:
        :set mouse=a
来开始使用鼠标 (这等价于设置 'mouse' 为 "nvich")。如果你只想在若干模式下或者在
某两个任务上使用鼠标,你需要专注于那些模式对应的字母。例如:
        :set mouse=nv
会使得鼠标在普通模式和可视模式下工作。
        :set mouse=h
会使得鼠标只有在帮助文件里工作 (这样,可以用 "g<LeftMouse>" 来进行标签跳转)。
鼠标能否在可视模式或者选择模式下开始选择,决定于 "selectmode" 选项包不包括
"mouse"。
                                                         terminal-mouse 
在 xterm 终端里,在 'mouse' 选项包含当前激活的模式的前提下,普通的鼠标键击归
Vim 使用,而带 shift 或者 ctrl 键的鼠标键击由 xterm 控制。如果 'mouse' 不包括
当前激活的模式,则所有的鼠标键击由 xterm 控制。
对于自身不能通过修饰符来使用鼠标事件的终端,一个权宜之计是在 Vim 的命令模式中
不使用鼠标事件:
        :set mouse=nvi
然后在终端中选择文本,用 ":" 进入命令行模式,选择并复制文本到系统中,然后按
Esc。
另一个办法是临时地用 ":sh" 来运行外壳,复制文本,然后退出外壳。此时 'mouse' 仍
应设为 "a"。
                                                         xterm-clipboard 
Motif GUI 版本上,如果在终端运行但是可以访问 X-server (设置了 DISPLAY),那么复
制和粘贴和 GUI 上的行为相似。如果不是,那么鼠标中键会插入无名寄存器。这种情况
下,这里是如何复制和粘贴一段文本的方法:
用鼠标和可视模式复制/粘贴 ('mouse' 选项必须设置,见上):
1. 在文本的第一个字符上按鼠标左键,移动鼠标到文本的最后一个字母,然后释放左
   键。这会启动可视模式并高亮选择区域。
2. 按 "y" 抽出可视文本到无名寄存器里。
3. 在要插入的位置上按鼠标左键。
4. 按鼠标中键。
快捷方式: 如果插入位置和可视文本同时出现在屏幕上,你可以一次做 2、3 和 4: 在要
插入的位置直接按鼠标中键。
注意: 如果使用  -X  命令行参数,Vim 不会连接到 X 服务器,所以复制/粘贴到 X 剪
贴板 (选择区) 不会工作。使用带 shift 键的鼠标键来让 xterm 完成选择。
                                                         xterm-command-server 
如果 X-服务器的剪贴板可用, x11-clientserver  的命令服务器可以在命令行用
--servername 打开。
                                                         xterm-copy-paste 
注意: 在有些 (较老的) xterm 版本里,光标不能移动超过第 95 或 223 列。这是
xterm 的问题,不是 Vim 的。用新一点的 xterm 吧  color-xterm 。另见
'ttymouse'。
使用 xterm 粘贴/复制 (当前模式 不 包括在 'mouse' 里):
1. 在文本的第一个字符上按鼠标左键,移动鼠标到文本的最后一个字母,然后释放。
2. 使用普通的 Vim 命令把光标移动到待插入的位置。
3. 按 "a" 开始插入模式。
4. 按鼠标中键。
5. 按 ESC 退出插入模式。
(对包含在 'mouse' 里的模式,这里的操作同样可以完成,只要你在使用鼠标的时候按住
shift 键就行了。)
注意: 如果你在粘贴的时候丢失了第 8 位 (特殊字符被翻译成其他字符),你需要在启动
Vim 之前在外壳上执行 "stty cs8 -istrip -parenb"。
这样,在 xterm 上 shift 和 ctrl 键不能和鼠标一起使用。需要 CTRL 修饰符的鼠标命
令可以在使用鼠标前按 "g" 键模拟:
        "g<LeftMouse>"  是 "<C-LeftMouse>       (跳转到鼠标点击的标签上)
        "g<RightMouse>" 是 "<C-RightMouse>      ("CTRL-T")
                                         mouse-mode-table   mouse-overview 
如果 'mousemodel' 是 "extend",鼠标按钮的功能的概述在此:
普通模式:
事件          移动光标     选择         改变窗口   行动 
<LeftMouse>     是         结束           是
<C-LeftMouse>   是         结束           是       "CTRL-]" (2)
<S-LeftMouse>   是        不改变          是       "*" (2)     <S-LeftMouse> 
<LeftDrag>      是      开始或者扩展 (1)  否                   <LeftDrag> 
<LeftRelease>   是      开始或者扩展 (1)  否
<MiddleMouse>   是      如果没有激活      否       放置
<MiddleMouse>   是       如果激活         否       抽出和放置
<RightMouse>    是      开始或者扩展      是
<A-RightMouse>  是      开始或者扩展列块  是                   <A-RightMouse> 
<S-RightMouse>  是        不改变          是       "#" (2)     <S-RightMouse> 
<C-RightMouse>  否        不改变          否       "CTRL-T"
<RightDrag>     是         扩展           否                   <RightDrag> 
<RightRelease>  是         扩展           否                   <RightRelease> 
插入或替换模式:
事件          移动光标     选择           改变窗口 行动 
<LeftMouse>     是      (不能激活)          是
<C-LeftMouse>   是      (不能激活)          是     "CTRL-O^]" (2)
<S-LeftMouse>   是      (不能激活)          是     "CTRL-O*" (2)
<LeftDrag>      是     开始或者扩展 (1)     否     类似于 CTRL-O (1)
<LeftRelease>   是     开始或者扩展 (1)     否     类似于 CTRL-O (1)
<MiddleMouse>   否      (不能激活)          否     放置寄存器内容
<RightMouse>    是     开始或者扩展         是     类似于 CTRL-O
<A-RightMouse>  是     开始或者扩展列块     是
<S-RightMouse>  是      (不能激活)          是     "CTRL-O#" (2)
<C-RightMouse>  否      (不能激活)          否     "CTRL-O CTRL-T"
在帮助窗口里:
事件          移动光标     选择           改变窗口 行动 
<2-LeftMouse>   是     (不能激活)           否     "^]" (帮助标签跳转)
当 'mousemodel' 为 "popup" 时,下面这些有所差异:
普通模式:
事件          移动光标     选择           改变窗口 行动 
<S-LeftMouse>   是      开始或者扩展 (1)    否
<A-LeftMouse>   是      开始或者扩展列块    否                 <A-LeftMouse> 
<RightMouse>    否       弹出菜单           否
插入或替换模式:
事件          移动光标     选择           改变窗口 行动 
<S-LeftMouse>   是      开始或者扩展 (1)    否     类似于 CTRL-O (1)
<A-LeftMouse>   是      开始或者扩展列块    否
<RightMouse>    否       弹出菜单           否
(1) 只有当鼠标在按键后发生移动
(2) 只有当点击发生在同一缓冲区时
点击鼠标左键改变光标的位置。如果点击发生在另一个窗口,那么那个窗口成为活动窗
口。在编辑命令行时,光标只能定位在命令行上。在插入模式下,Vim 仍然保持在插入模
式。如果设置了 'scrolloff',而光标定位在窗口边界 'scrolloff' 行范围内,则文本
被滚动。
在第一个字符上按鼠标左键,移动鼠标到最后一个字符,然后释放,可以进行选择。直到
你释放鼠标键,你不一定总能看到选择的区域。只有一些版本能够 (GUI、WIN32) 使得拖
动立即显示。注意 如果 'scrolloff' 非零,你可以在窗口的首/末行移动鼠标至少一个
字符位置使文本滚动。
在普通、可视和选择模式下,单击鼠标右键使得可视区域被扩展。如果 'mousemodel' 为
"popup",必须使用按住 shift 键的鼠标左键。如果在编辑另外一个缓冲区时点击一个窗
口,可视和选择模式被终止。
在普通、可视和选择模式下,按下 Alt 键同时单击鼠标右键,可使选择区域成为面向列
块。当 'mousemodel' 被设置为 "popup",鼠标左键必须和 Alt 键一起使用。注意在某
些系统中失效,那些系统中的窗口管理器在按下 Alt 键时会吃掉鼠标事件 (可能会移动
窗口)。
                                                         double-click 
双击、三击和四击在 GUI 激活时、Win32 以及 xterm (如果有 gettimeofday() 函数)
上得到支持。对于文本选择,附加的点击会扩展选择区:
        点击            选择 
        两次            单词或者 % 匹配          <2-LeftMouse> 
        三次            行                       <3-LeftMouse> 
        四次            矩形区域                 <4-LeftMouse> 
特例: 在帮助窗口上,双击跳到点击的单词对应的帮助。
双击单词选择该单词。'iskeyword' 用来指定单词可以包括哪些字符。双击一个有匹配的
字符选择直到该匹配的区域 (类似于 "v%")。如果匹配是 #if/#else/#endif 块,选择变
为面向行。
MS-Windows 和 xterm 上,双击相隔的时间可以通过 'mousetime' 选项设置。其他系统
上,该值只能在 Vim 之外定义。
一个使用双击跳转到光标所在的标签的例子:
        :map <2-LeftMouse> :exe "tag " .. expand("<cword>")<CR>
CTRL-O 的情形。选择模式在 'selectmode' 选
项包含 "mouse" 时被使用。
                                                         sysmouse 
只有编译时加入  +mouse_sysmouse  特性才会支持 sysmouse。sysmouse 驱动 (*BSD 控
制台) 不支持键盘修饰符。
                                                         drag-status-line 
如果有多个窗口一起工作,窗口的大小可以用通过鼠标拖动状态行来改变。把鼠标点在状
态行上,按左键,移动鼠标把状态行带到新的位置,再释放左键。只是用鼠标点击状态行
而不移动鼠标使得那个窗口成为当前窗口。如果选择了一个窗口会改变状态行的位置或大
小,状态行的拖动看起来很奇怪,但还是会工作的 (试试吧)。
                                         <MiddleRelease>   <MiddleDrag> 
鼠标点击可以映射。鼠标点击的代码是:
     代码           鼠标按钮    一般的行动      
 <LeftMouse>     按住左键       设置光标位置
 <LeftDrag>      按住并移动左键 扩展选择区
 <LeftRelease>   释放左键       结束选择区
 <MiddleMouse>   按住中键       在光标所在的位置上粘贴
 <MiddleDrag>    按住并移动中键 -
 <MiddleRelease> 释放中键       -
 <RightMouse>    按住右键       扩展选择区
 <RightDrag>     按住并移动右键 扩展选择区
 <RightRelease>  释放右键       结束选择区
 <X1Mouse>       按住 X1 键         -                    X1Mouse 
 <X1Drag>        按住并移动 X1      -                    X1Drag 
 <X1Release>     释放 X1 键         -                    X1Release 
 <X2Mouse>       按住 X2 键         -                    X2Mouse 
 <X2Drag>        按住并移动 X2      -                    X2Drag 
 <X2Release>     释放 X2 键         -                    X2Release 
X1 和 X2 按钮指一些鼠标上的附加按钮。'Microsoft Explorer' 鼠标在右拇指位置有这
些键。目前 X1 和 X2 只能用于 Win32 和 X11 环境。
示例:
        :noremap <MiddleMouse> <LeftMouse><MiddleMouse>
在鼠标中键点击的位置粘贴 (不然,粘贴在光标所在的位置进行)。
        :noremap <LeftRelease> <LeftRelease>y
在可视模式下立即抽出选择区。
注意使用了 ":noremap" 而不是 "map",以免发生递归映射。
        :map <X1Mouse> <C-O>
        :map <X2Mouse> <C-I>
把 X1 和 X2 键定义为跳转表的前进和后退,见  CTRL-O  和  CTRL-I 。
                                                 mouse-swap-buttons 
要交换鼠标左键和右键的含义:
        :noremap        <LeftMouse>     <RightMouse>
        :noremap        <LeftDrag>      <RightDrag>
        :noremap        <LeftRelease>   <RightRelease>
        :noremap        <RightMouse>    <LeftMouse>
        :noremap        <RightDrag>     <LeftDrag>
        :noremap        <RightRelease>  <LeftRelease>
        :noremap        g<LeftMouse>    <C-RightMouse>
        :noremap        g<RightMouse>   <C-LeftMouse>
        :noremap!       <LeftMouse>     <RightMouse>
        :noremap!       <LeftDrag>      <RightDrag>
        :noremap!       <LeftRelease>   <RightRelease>
        :noremap!       <RightMouse>    <LeftMouse>
        :noremap!       <RightDrag>     <LeftDrag>
        :noremap!       <RightRelease>  <LeftRelease>
 vim:tw=78:ts=8:noet:ft=help:norl: