vim-jp / vimdoc-ja / term

term - Vim日本語ドキュメント

メインヘルプファイルに戻る English | 日本語 | 編集
term.txt      For Vim バージョン 9.1.  Last change: 2024 Feb 28


                VIMリファレンスマニュアル    by Bram Moolenaar


端末情報                                                terminal-info

Vim はユーザーが使っている端末の情報にもとづいて、ユーザーがどのキーを押したか
を認識します。この情報が正しくないと、スクリーンは乱れ、キーが認識されなくなっ
てしまいます。スクリーンに対する操作は、キーコードのシーケンスを出力することで
実現されています。特殊なキーを押すとコードのシーケンスが出力されます。これらの
シーケンスは端末オプションに保存されています。terminal-optionsを参照。

NOTEGUI で実行しているときは、このドキュメントのほとんどの事柄は関係ありま
せん。

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 端末です。
他に 2, 3 の端末が常に使用可能です。後述の builtin-terms を参照。

Vim の引数 '-T' により端末名を指定することができます。これが指定されない場合、
環境変数 TERM から端末名を取得しようとします。

                                termcap terminfo E557 E558 E559
Unix では terminfo データベースや termcap ファイルが使われます。全てのドキュメ
ントを通して、これのことを "termcap" と呼びます。コンパイル時に、configure に
より terminfo と termcap を使うかどうかが自動的に決定されます。":version" の出
力に +terminfo が含まれていれば terminfo を使用しています。xterm-screens
参照。

Unix 以外のシステムでは、TERMCAP を定義してコンパイルしたときのみ termcap を使
用できます。

                                        builtin-terms builtin_terms
多くの組み込み端末が利用可能です。パッチ 9.0.0280 以降、Vim のバージョンによる
違いはありません。利用可能な組み込み端末のリストは `:set term=xxx` のエラーメッ
セージで見ることができます (GUI を実行していない場合)。++builtin_terms も参
照してください。

termcap のコードが組み込まれているときは、termcap ファイルと組み込みの termcap
から、使われている端末用のキーシーケンスを取得しようとします。使われている端末
のエントリがあるならば、その両方が使われます。どちらが先に使われるかはオプショ
ン 'ttybuiltin' に依存します。

'ttybuiltin' on         1: 組み込み termcap     2: 外部 termcap
'ttybuiltin' off        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 が終了するとき、端末を起動前のモードに戻します。このとき
't_te''t_TE' および 't_ke' で定義されるシーケンスが端末に送信されます。Amiga
では、外部プログラムを起動するコマンド(例: "!!")を実行するとき、一時的に端末が
通常モードになります。そのため、print キーを押してスクリーンへの出力を止めるこ
とができます。<BS> を押すと出力が再開します。

Note't_ti' が空でない場合、Vimは代替画面への切り替えが生じると想定します。こ
れにより、シェルコマンドの実行時またはVimの終了時の動作がわずかに変わる場合が
あります。これを回避するには、't_TI' と 't_TE' を使用します。(ただし、上書きで
はなく追加してください)。

Vim は 't_RK' termcap エントリを使用して、端末が使用しているキーボードプロトコ
ルを検出しようとします。これは 't_TI' の後に送信されますが、何もすることがない
(typeahead も保留中のコマンドもない) 場合にのみ送信されます。これはレスポンス
がシェルコマンドで終わってしまったり、Vim が終了した後に届くのを避けるためで
す。

                                                xterm-bracketed-paste
't_BE' がオンの場合、raw モードに入るときに 't_BE' が端末に送信され、raw モー
ドを抜けるときに 't_BD' が送信されます。その際、端末はペーストされたテキストの
前に 't_PS' を置き、ペーストされたテキストの後に 't_PE' を置くことが想定されま
す。これにより、Vim はタイプされた文字とペーストされたテキストを分離することが
できます。ペーストされたテキストはマウスの中ボタンを使ったときと同様に扱われ、
文字通り挿入され、コマンドとしては扱われません。

note: bracketed paste は、ペーストによる厄介な副作用 (CTRL-C キーや <ESC> キー
等) を防止しようとしていますが、端末によってこのモードの実装方法が若干異なる可
能性があるため、セキュリティ対策が保証されているわけではありません。Vim に貼り
付ける内容には引き続き注意する必要があります。

カーソルが最初の桁にある時は、ペーストされたテキストはその前に挿入されます。そ
うでなければ、ペーストされたテキストはカーソルの位置の後に追加されます。これは
最初の桁の後にペーストすることはできないことを意味します。残念ながら Vim には
マウスポイントがどこにあったかを知らせる方法はありません。

いくつかの状況では、Vim は bracketed paste を認識せず、生のテキストが取得され
る場合があることに注意してください。別のいくつかの状況では Vim はペーストされ
た最初の文字のみを取得し、残りは切り捨てられます。例: "r" コマンドを使った場
合。bracketed paste で何か問題がある場合、.vimrc に以下を書くことで無効化する
ことができます: >
        set t_BE=
もし Vim の実行中にこれを実行した場合、bracketed paste を無効化するため 't_BD'
が端末に送信されます。

t_PS または t_PE が設定されていない場合、t_BE は使用されません。これは、
貼り付けられたテキストを囲むエスケープコードが認識できない場合に、bracketed
paste が有効にならないようにするためです。

Note'esckeys' オプションが設定されていない場合 ('compatible' オプションが設
定されている場合も同様)、bracketed paste モードは無効になります。

端末が bracketed paste をサポートしているにもかかわらずオプションが自動的に設
定されない場合、以下のような設定を試すことができます: >

        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

terminfo エントリ "BE"、"BD"、"PS"、"PE" は、ncurses バージョン 6.4、2023 年初
頭に、一部の端末用に追加されました。このバージョンであれば、端末を手動で設定す
る必要はないかもしれません。

                                                        tmux-integration
tmux 内で Vim を実行する際に問題が発生する場合、ここにいくつかのヒントがありま
す。もし動かないならその部分はコメントアウトすることができます(これは tmux を
実行している端末に依存しています): >

    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"

        " bracketed paste モード有効、: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
Note: Vim を起動した後で端末の設定を変えると、設定が一貫しない状態になるかもし
れません。Solaris 2.5 で "stty cs8 parenb" が "stty cs7 parenb" に復元されてし
まうという報告が上がっています。代わりに "stty cs8 -parenb -istrip" を使ってく
ださい。これは正しく復元されます。

't_ks' を送った後では、カーソルキーが termcap で定義されているのとは異なるコー
ドを送るという意味で、ある種の termcap エントリは正しくありません。この問題を
避けるには 't_ks' (と 't_ke')を空文字列にします。これは初期化の最中に行わねば
なりません(initialization を参照)。そうでないと手遅れです。

いくつかの termcap エントリは、最上位ビットが常にオフになっていると仮定してい
ます。例: Amiga のカーソル↑エントリは例えば ":ku=\E[A:" です。しかし実際には
"\233A" が送られます。これは、シリアル回線上で使っているときなど、最上位ビット
がオフならば正しく動作します。カーソルキーが使えない場合はこのエントリを
":ku=\233A:" にしてみてください。

":ku=\E[A:" というエントリをもつ termcap エントリがあります。しかし実際には
"\233A" が送られます。出力において "\E[" と "\233" はしばしば同値であり、入力
においてはそうでありません。この問題を解決するには、termcap エントリを変更する
か、:set コマンドでキーコードを変更するしかありません。

多くのカーソルキーのコードは <Esc> から始まります。Vim はこれが 1 つの <Esc>
キーを押下したものか、カーソルキーのシーケンスのはじまりかを判定しなければなり
ません。そのため、次の文字が届くのを待ちます。1 秒以内に次のキーが届かない場合
は <Esc> が押されたとみなします。非常に遅いシステムではこれが誤判定され、カー
ソルキーが使えなくなることがあります。この問題に出会った場合は 'timeout' をオ
フにしてください。Vim は <Esc> の後に届く文字を待ちます。1 つの <Esc> を入力す
るには 2 回押さなければなりません。'esckeys' をオフにすると、挿入モードでのこ
の問題を解決できます。しかし挿入モードでカーソルキーとファンクションキーが使え
なくなってしまいます。

Amiga でウィンドウリサイズを認識するには、端末名が "amiga" か "builtin_amiga"
でなければなりません。

ある種の端末ではカーソルキーに混乱を招きやすいコードを割り当てています。
televideo 925 はその一例です。televideo 925 はカーソル左キーで CTRL-H を送りま
す。そのためバックスペースとカーソル左を区別することは不可能です。この問題のた
め CTRL-H は常にカーソル左と認識されます。

                                        vt100-cursor-keys xterm-cursor-keys
vt100 や xterm などの端末ではカーソルキーを押すと <Esc>OA や <Esc>OB などが送
られます。不運なことに、これらは「挿入を終了し、上に新規行を作成して 'A' や
'B' を挿入する」という挿入モードでのコマンドでもあります。
このコマンドを実行するのでなく、カーソルキーのシーケンスが入力されたのだと誤認
識してしまうかもしれません。これを防ぎ、意図通りの動作をさせるには次の設定を使
います: >
        :set notimeout          " マッピングについてタイムアウトしない
        :set ttimeout           " 端末のキーコードについてタイムアウトする
        :set timeoutlen=100     " 100 ミリ秒後にタイムアウトする
この設定をすると、キーコードが 100 ミリ秒以内に送られた場合のみカーソルキーと
認識されます。ユーザーが普通に入力するときはそんなに速くないので、たとえまった
く同じキーコードのシーケンスを送信しても、個々のコマンドと認識されます。

                                vt100-function-keys xterm-function-keys
xterm は vt100 互換モードと非互換モードの両方のモードで F1 から F4 のファンク
ションキーを送信できます。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 はシフトキーとファンクションキー、特殊キーの組み合わ
せをサポートしています。Vim はこれらのほとんどを認識します。":set termcap" に
よりどれがサポートされているか、そのコードは何かを調べることができます。大抵の
場合、これらは termcap には入っていません。builtin_xterm の termcap でのみサ
ポートされています。

                                                        xterm-modifier-keys
新しいバージョンの xterm は Alt と Ctrl キーとほとんどのファンクションキーの組
み合わせをサポートしています。全てのキーに対する Alt、Ctrl、Shift の組み合わせ
全てを termcap に追加しなくてもいいように、termcap エントリの最後に ";*X" とい
う特殊なシーケンスを追加することができます。この "X" はどんな文字でもよく、'~'
がよく使われます。";*" は省略可能な修飾キー引数を意味します。";2" は
Shift、";3" は Alt、";5" はCtrl、";9" は Meta (Alt と異なる場合)。これらを組み
合わせることができます。例: >
        :set <F8>=^[[19;*~
        :set <Home>=^[[1;*H
これらのコードのもう1つの特殊な性質は、他のコードで上書きできないことです。
xterm から直接得られたコードが t_RV それらを上書きするのを避けるためです。

もう1つの特殊な値は、"@;*X" で終わるtermcapエントリです。これは、"CSI X" また
は "CSI 1 ; modifier X" のいずれかを使用するカーソルキー用です。したがって、
"@" は修飾子が続く場合は "1" を表すか、何も表しません。
                                                        arrow_modifiers
いくつかの端末エミュレータ(alacritty, gnome, konsole 等)は修飾子付きのキーで特
殊なコードを送信しますが、これらは termcap/terminfo データベースにエントリがあ
りません。vimrc に数行追加することでこれらを機能させることができます。例えば、
Control 修飾子を gnome 端末の矢印キーで機能させるには: >
        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/termcap の xterm エントリに
":cs=\E[%i%d;%dr:" を追加すれば全てうまく動作するでしょう。

                                                        xterm-end-home-keys
いくつかのシステム(少なくとも FreeBSD と XFree86 3.1.2)では、<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 ビットエスケープシーケンスを使うモードで動作させることができます。
このモードでは <Esc>[ の代わりに CSI コードが使われます。この利点は、挿入モー
ドで <Esc> が即座に認識されることです。なぜなら、特殊キーの開始と紛らわしくな
いためです。
組み込みの termcap エントリでは、オプション 'term' のどこかに "8bit" が含まれ
ていないか確認されます。含まれていると、termcap エントリ、マウス等に 8 ビット
文字が使われます。シェルにおいて $TERM を "xterm-8bit" に設定しておくと、Vim
はそれに気づいて自動的に 8 ビットの設定を使うようになります。
Vim がシーケンス t_RV (バージョン要求)への応答を受け取ったとき、それが CSI
で始まっていれば、その端末は 8 ビットモードであると認識し、全てのキーシーケン
スを 8 ビット版に変換します。

                                                xterm-terminfo-entries
しばらくの間、terminfo エントリは Vim が使える全ての機能を記述するには不十分で
した。その結果、xterm とよく似たいくつかの端末が、$TERM の端末名の前に
"xterm-" をつけることで、この機能を利用していました。

このような端末は xterm と 100% 互換性があるわけではないので、これは問題になり
ます。"xterm" の回避策を使用せずにこれらの機能を使用できるように、2023 年の開
始時点で、terminfo データベースにいくつかのエントリが追加されました。(今のとこ
ろ) 以下がそのエントリです:

        名前    xterm の値      説明 ~
        RV      "\033[>c"       リクエストバージョン t_RV

        BE      "\033[?2004h"   bracketed paste モードを有効化 t_BE
        BD      "\033[?2004l"   bracketed paste モードを無効化 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" エントリは、SGR スタイルのマウスレポートを有効にするために "1006" を含み
ます。これは223以上の桁をサポートします。また、フォーカスレポートを有効にする
"1004" も含まれます。
Note: 2023年現在、"1004" は Vim 自体では使用されておらず、代わりに、最新バー
ジョンで ncurses も使用し始めたように、t_fe と t_fd エントリによってマウス
トラッキングとは独立にフォーカスレポートを設定することが推奨されています (その
後、terminfo/termcap にも使用されます)。

                                                xterm-kitty kitty-terminal
Kitty 端末は特別なケースです。主な理由は、他のほとんどの端末とは動作が異なるか
らですが、デフォルトで他の端末と同じように動作するように合わせるのではなく、
Kitty を使用する際にアプリケーションがどのように動作する必要があるかを規定して
いるからです。このため、Vim が Kitty 端末で動作するのは非常に困難です。いくつ
かの例外はハードコーディングされていますが、ある特定の端末のために例外を作らな
ければならないのは全く良いことではありません。

問題の 1 つは、$TERM の値が "xterm-kitty" に設定されていることです。Vim の場
合、これは端末が xterm 互換であることを示すもので、組み込みの xterm termcap エ
ントリを使用する必要があります。他の多くの端末はこれに依存しています。しかし、
Kitty は完全な xterm 互換ではありません。作者は "xterm-" という接頭辞を無視し
てとにかく terminfo エントリを使うことを提案しました。そのため、現状、組み込み
の xterm termcap エントリは使われないということが起きています。しかし、t_RV は
設定されます。そうしないと、自動的に 'ttymouse' を "sgr" に設定するなど、他の
ことがうまくいきません (少なくとも t_XM がこれに使われるまでは)。

なぜ kitty が $TERM を "xterm-kitty" に設定するのかは不明です。"kitty" の方が
適切ですが、この名前の terminfo エントリは普及していません。

Note kitty キーボードプロトコルの使用は別の機能であることに注意してください。
kitty-keyboard-protocol を参照。


==============================================================================
2. 端末オプション               terminal-options termcap-options E436

端末オプションは普通のオプションとまったく同じように設定できます。しかし端末オ
プションは ":set all" コマンドでは表示されないので、代わりに ":set termcap" を
使ってください。

termcap コードに対応するオプションを設定することによって、そのシーケンスを変更
することができます。例: >
        :set t_ce=^V^[[K        (CTRL-V, <Esc>, [, K)

端末オプションの一覧を後で載せます。対応する termcap のコードと、それに対応す
るオプション名の最後の2文字が等しくなっています。絶対に必要な termcap コードは
カーソルを移動させる 't_cm' の1つだけです。

オプション 't_da''t_db''t_ms''t_xs''t_xn' は termcap におけるフラグに
対応しています。termcap にこれらのフラグが存在すると、対応するオプションに "y"
が設定されます。空でない文字列を設定するとオンになり、空文字列を設定するとオフ
になります。't_CS' もこれと同様ですが、termcap フラグではありません。

出力コード                                              terminal-output-codes
        option  意味    ~

        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    ウィンドウタイトルの終端を設定(ステータスラインから) t_fs 't_fs'
        t_ke    キーパッド使用終了                              t_ke 't_ke'
        t_ks    キーパッド使用開始                              t_ks 't_ks'
        t_le    カーソルを1文字分左へ移動                       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    非破壊スペース{訳注: カーソルを1文字分右に移動} 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    (ステータスラインに)ウィンドウタイトル設定開始  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 't_xs'
        t_xs    空でない場合は強調が上書きによって消されない(hpterm)
                                                                t_xn 't_xn'
        t_xn    空ではない場合、画面の右端のセルに書いた文字はスクロールを
                発生させない
        t_ZH    斜体モード                                      t_ZH 't_ZH'
        t_ZR    斜体終了                                        t_ZR 't_ZR'

Vim 独自のもの (標準的なコードはないもの):
        t_AU    下線色を設定する (ANSI)                         t_AU 't_AU'
        t_Ce    下波線および下線終了                            t_Ce 't_Ce'
        t_Cs    下波線 (波線の下線) モード                      t_Cs 't_Cs'
        t_CF    代替フォントを設定 (インデックス 0 - 10 を使用) t_CF 't_CF'
        t_Us    2 重下線モード                                  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    ウィンドウサイズ (height, width のセル数) を指定 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:termu7resp に格納される
        t_RF    端末の文字色を要求                              t_RF 't_RF'
                応答は v:termrfgresp に格納される
        t_RB    端末の背景色を要求                              t_RB 't_RB'
                応答は v:termrbgresp に格納される
        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    bracketed paste モードを有効化する              t_BE 't_BE'
                xterm-bracketed-paste
        t_BD    bracketed paste モードを無効化する              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 で定義され、中間部分はテキストです。
        set title text:     t_ts {title text} t_fs
        set icon text:      t_IS {icon text} t_IE
        set cursor color:   t_SC  {color name}  t_EC

t_SH は 1 つの引数を取らなければなりません:
        0, 1 もしくは無し       点滅する矩形カーソル
        2                       矩形カーソル
        3                       点滅する下線カーソル
        4                       下線カーソル
        5                       点滅する垂直バーカーソル
        6                       垂直バーカーソル

t_RS は、t_RV に対する応答を受け取った場合のみ送られます。termresponse から
Terminal.app が認識され得る場合、Mac OS 上では使われません。

                                                        mouse-reporting
多くの端末はマウスのクリックを報告し、いくつかの端末はマウスの動きやドラッグを
報告することができます。Vim はこのためにどんなコードが使われているかを知る必要
があります。

これには "XM" terminfo/termcap エントリを使います。また、Vim には 'ttymouse'
オプションがあり、使用されているマウスプロトコルを指定することができます。指定
可能な値はオプションを参照してください。

Vimが "XM" terminfo/termcap エントリを読み込むことができれば、マウス報告の有
効/無効を指定するのに使われます。このエントリがない場合は、'ttymouse' の値が使
われます。

"XM" エントリが存在し、最初の数字が "1006" である場合、既に以前に設定されてい
ない限り、"ttymouse" は "sgr" に設定されます。


キーコード                                              terminal-key-codes
Note: 可能なかぎり <> 形式を使ってください。

        オプション名            意味    ~

        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>          シフト+カーソル上
                <S-Down>        シフト+カーソル下
        t_%i    <S-Right>       シフト+カーソル右              t_%i 't_%i'
        t_#4    <S-Left>        シフト+カーソル左              t_#4 't_#4'
        t_k1    <F1>            F1                              t_k1 't_k1'
                <xF1>           もう1つの F1                    <xF1>
        t_k2    <F2>            F2                      <F2>  t_k2 't_k2'
                <xF2>           もう1つのF2                     <xF2>
        t_k3    <F3>            F3                      <F3>  t_k3 't_k3'
                <xF3>           もう1つのF3                     <xF3>
        t_k4    <F4>            F4                      <F4>  t_k4 't_k4'
                <xF4>           もう1つのF4                     <xF4>
        t_k5    <F5>            F5                      <F5>  t_k5 't_k5'
        t_k6    <F6>            F6                      <F6>  t_k6 't_k6'
        t_k7    <F7>            F7                      <F7>  t_k7 't_k7'
        t_k8    <F8>            F8                      <F8>  t_k8 't_k8'
        t_k9    <F9>            F9                      <F9>  t_k9 't_k9'
        t_k;    <F10>           F10                     <F10> t_k; 't_k;'
        t_F1    <F11>           F11                     <F11> t_F1 't_F1'
        t_F2    <F12>           F12                     <F12> t_F2 't_F2'
        t_F3    <F13>           F13                     <F13> t_F3 't_F3'
        t_F4    <F14>           F14                     <F14> t_F4 't_F4'
        t_F5    <F15>           F15                     <F15> t_F5 't_F5'
        t_F6    <F16>           F16                     <F16> t_F6 't_F6'
        t_F7    <F17>           F17                     <F17> t_F7 't_F7'
        t_F8    <F18>           F18                     <F18> t_F8 't_F8'
        t_F9    <F19>           F19                     <F19> t_F9 't_F9'
                <S-F1>          シフト+F1
                <S-xF1>         もう1つの<S-F1>                 <S-xF1>
                <S-F2>          シフト+F2                      <S-F2>
                <S-xF2>         もう1つの<S-F2>                 <S-xF2>
                <S-F3>          シフト+F3                      <S-F3>
                <S-xF3>         もう1つの<S-F3>                 <S-xF3>
                <S-F4>          シフト+F4                      <S-F4>
                <S-xF4>         もう1つの<S-F4>                 <S-xF4>
                <S-F5>          シフト+F5                      <S-F5>
                <S-F6>          シフト+F6                      <S-F6>
                <S-F7>          シフト+F7                      <S-F7>
                <S-F8>          シフト+F8                      <S-F8>
                <S-F9>          シフト+F9                      <S-F9>
                <S-F10>         シフト+F10                     <S-F10>
                <S-F11>         シフト+F11                     <S-F11>
                <S-F12>         シフト+F12                     <S-F12>
        t_%1    <Help>          ヘルプキー                      t_%1 't_%1'
        t_&8    <Undo>          アンドゥキー                    t_&8 't_&8'
        t_kI    <Insert>        インサートキー                  t_kI 't_kI'
                <kInsert>       キーパッドインサートキー
        t_kD    <Del>           デリートキー                    t_kD 't_kD'
        t_kb    <BS>            バックスペースキー              t_kb 't_kb'
        t_kB    <S-Tab>         バックタブ(シフト+タブ) <S-Tab> t_kB 't_kB'
        t_kh    <Home>          ホームキー                      t_kh 't_kh'
        t_#2    <S-Home>        シフト+ホームキー   <S-Home> t_#2 't_#2'
                <xHome>         もう1つのホームキー             <xHome>
        t_@7    <End>           エンドキー                      t_@7 't_@7'
        t_*7    <S-End>         シフト+エンドキー <S-End> t_star7 't_star7'
                <xEnd>          もう1つのエンドキー             <xEnd>
        t_kP    <PageUp>        ページアップキー                t_kP 't_kP'
        t_kN    <PageDown>      ページダウンキー                t_kN 't_kN'
        t_K1    <kHome>         キーパッドホームキー            t_K1 't_K1'
        t_K4    <kEnd>          キーパッドエンドキー            t_K4 't_K4'
        t_K3    <kPageUp>       キーパッドページアップキー      t_K3 't_K3'
        t_K5    <kPageDown>     キーパッドページダウンキー      t_K5 't_K5'
        t_K6    <kPlus>         キーパッドプラスキー  <kPlus> t_K6 't_K6'
        t_K7    <kMinus>        キーパッドマイナスキー <kMinus> t_K7 't_K7'
        t_K8    <kDivide>       キーパッド /        <kDivide> t_K8 't_K8'
        t_K9    <kMultiply>     キーパッド *      <kMultiply> t_K9 't_K9'
        t_KA    <kEnter>        キーパッドエンターキー <kEnter> t_KA 't_KA'
        t_KB    <kPoint>        キーパッド .         <kPoint> t_KB 't_KB'
        t_KC    <k0>            キーパッド 0             <k0> t_KC 't_KC'
        t_KD    <k1>            キーパッド 1             <k1> t_KD 't_KD'
        t_KE    <k2>            キーパッド 2             <k2> t_KE 't_KE'
        t_KF    <k3>            キーパッド 3             <k3> t_KF 't_KF'
        t_KG    <k4>            キーパッド 4             <k4> t_KG 't_KG'
        t_KH    <k5>            キーパッド 5             <k5> t_KH 't_KH'
        t_KI    <k6>            キーパッド 6             <k6> t_KI 't_KI'
        t_KJ    <k7>            キーパッド 7             <k7> t_KJ 't_KJ'
        t_KK    <k8>            キーパッド 8             <k8> t_KK 't_KK'
        t_KL    <k9>            キーパッド 9             <k9> t_KL 't_KL'
                <Mouse>         マウスコードの先頭部分          <Mouse>

        t_PS    <PasteStart>    bracketed paste の開始          t_PS 't_PS'
                                xterm-bracketed-paste
        t_PE    <PasteEnd>      bracketed paste の終了          t_PE 't_PE'
                                xterm-bracketed-paste
                <FocusGained>   Vim ウィンドウがフォーカスを取得 (内部のみ)
                <FocusLost>     Vim ウィンドウがフォーカスを消失 (内部のみ)

Note t_so と t_mrについて: termcap に "so" エントリがない場合は "mr" が使われ
ます。逆に "mr" がない場合は "so" が使われます。"se" と "me" も同じ関係にあり
ます。お使いの端末が反転と強調の両方をサポートしているならば、これらは別々の
モードとして表示されます。これらの片方しかサポートしていない場合は、どちらも同
じように表示されます。

                                                        keypad-comma
キーパッドのキーは、何かにマップされていないときは通常のキーと等価です。ただ 1
つだけ例外があります。小数点キーがあるべき場所にコンマキーがあるキーパッドの場
合でも Vim では小数点として認識されます。これを修正するには次のマッピングを使っ
てください: >
        :noremap <kPoint> ,
        :noremap! <kPoint> ,
<                                                       xterm-codes
キーコードを取得するトリックがあります。これは現在のところ xterm でだけ動作し
ます。t_RV が定義されていて、xterm のパッチレベルが 141 以上であることを示す
返信を受け取った場合、Vim は特別なエスケープシーケンスを使って xterm から直接
キーコードを要求します。その返信を使って様々な t_ のコードを調整します。これに
よって xterm がモード (8-bit, VT102, VT220 など) によって異なるコードを出力す
るという問題に対応することができます。そのため、<xF1> のようなコードは必要なく
なります。

変更可能なコードの1つは、色数である 't_Co' です。これは再描画をトリガーします。
これが問題になる場合は、可能な限り早い段階で 'xtermcodes' オプションをリセット
してください: >
        set noxtermcodes

Note: キーコードの要求は起動時にのみ行われます。Vim の起動後に xterm のオプショ
ンが変更されると、エスケープシーケンスが認識されなくなる場合があります。

                                                        xterm-true-color
Vimは端末がサポートするならば、トゥルーカラーを使うこと (highlight-guifg 及
び highlight-guibg を流用する) をサポートします。これを機能させるには
'termguicolors' オプションをセットする必要があります。
トゥルーカラーをサポートする端末の一覧については
https://github.com/termstandard/colors を参照してください。

使用する RGB カラーを端末に伝えるために、t_8f と t_8b termcap エントリが使
用されます。これらは、ほとんどの端末で動作する値にデフォルトで設定されていま
す。使用している端末で動作しない場合は、手動で設定することができます。デフォル
ト値は以下のように設定されています: >
         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"

これらのオプションは printf 用の文字列を含んでおり、printf() (実際には `l`
modifier ゆえに C 言語のものと同等) により t_ オプションの値と、赤、青、緑を表
現する 0 から 255 の 3 つの符号なし長整数の値が組み合わされます。

                                                        xterm-resize
xterm でのウィンドウサイズ変更はリソース allowWindowOps が有効なときのみ動作し
ます。システムや xterm のバージョンによっては、セキュリティ上の問題になるとの
考えにより、既定では無効になっていることがあります。それが本当に問題になるかど
うかは明らかではありません。

既定値を上書きするには、次の行を ~/.Xdefaults または ~/.Xresources に書きま
す:
>
        XTerm*allowWindowOps:           true

そして "xrdb -merge .Xresources" を実行し、この設定を有効化します。コンテキス
トメニュー(CTRL キーを押しながらマウス右ボタン)でこの値を確認できます。
allow-window-pos にチェックが入っているはずです。

                                                        xterm-focus-event
xterm を含む一部の端末は、フォーカスイベント追跡機能をサポートしています。
この機能が 't_fe' シーケンスによって有効になっている場合、端末がフォーカスを取
得または失う度に、特別なキーシーケンスが端末から Vim に送信されます。
Vim はそれらを適切に処理することでフォーカスイベント(FocusGained/FocusLost)
を発生させます。フォーカスイベントの追跡は、"raw" モードを終了する時に 't_fd'
シーケンスによって無効になります。
この機能を無効化したいなら、以下をあなたの .vimrc に追加してください:
        `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
色についての Note't_Co' は利用できる色の数を示します。この値が 0 でなければ
't_AB' と 't_AF' の値を使って色を設定します。これらのうちどれかが存在しない場
合は 't_Sb' と 't_Sf' が使われます。色をデフォルトに戻すのには 't_me' が使われ
ます。'termguicolors' も参照してください。
GUIが動作している時 't_Co' は 16777216 に設定されます。

                                termcap-cursor-shape termcap-cursor-color
Vimが挿入モードに入るときにはエスケープシーケンス 't_SI' が送られます。置換モ
ードに入るときにはエスケープシーケンス 't_SR' が設定されていれば送られます。設
定されていない場合には 't_SI' が送られます。挿入モード及び置換モードを抜けると
きには 't_EI' が送られます。
Note'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
NOTE: Vim を終了するとき、ノーマルモードでのカーソル設定がそのまま残ります。
Vim を起動する前のカーソル設定は復元されません。

Windows Terminalの場合は、次のような使い方ができます: >
    " Note: これは `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' を使ってアイコンテキストが設定されます。これらの termcap エン
トリは Vim 独自の拡張であり、外部の termcap からこれらを取得することはできませ
ん。しかし組み込みの termcap に xterm と iris-ansi 用のエントリが含まれており、
これらを自分で設定する必要はありません。
                                                        hpterm
もしも反転などの強調が正常に機能しない場合は、't_xs' を空でない文字列に設定し
てみてください。すると 't_ce' コードを使って行から強調を取り除くようになります。
"hpterm" に対してはこれが必要です。'weirdinvert' を設定すると 't_xs' を空でな
い値にするのと同じ効果があります。

                                                        scroll-region
端末が領域スクロールをサポートしているのに "cs" エントリを含まない termcap が
あります。例えば Sun の xterm がそうです。この場合は builtin_xterm を使うか、
t_cs を自分で定義します。例: >
        :set t_cs=^V^[[%i%d;%dr
^V は CTRL-V、^[ は <Esc> を表します。

t_CV (領域縦スクロール) は標準的な termcap コードではありません。Vim はこれを
GUI モードで内部的に使っています。しかし、領域縦スクロールに対応している端末が
あるなら、その端末でもこれを定義することができます。2つの引数は、スクロールを
制限する領域の左右の桁を表します。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>

Shift+カーソル上キーに対して <S-Up> 以外のコマンドを割り当てることもできます。
Note: 左側にキーがある Sun のキーボードを使っている人を助けるために、以下の
キーは使われません。
F14 (アンドゥキーと混乱するため)
F15 (ウィンドウを全面に移動するキーであるため)
F17 (ウィンドウを閉じるキーであるため)
他のシステムではこれらも使用できるでしょう。

==============================================================================
3. ウィンドウサイズ                                     window-size

[これは Vim 自身のウィンドウのサイズのことです。":split" コマンドで分割できる
ウィンドウのことではありません。]

Amiga 上では端末名が "amiga" または "builtin_amiga" であればアミーガ固有のウィ
ンドウリサイズ処理が有効になります。Unix ではウィンドウサイズを取得するために
3 種類の方法が試行されます:

- 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" などで)カーソルが
スクリーンから出たとき、一度に5行スクロールするようになります。もう1つの方法は、
"z{height}<CR>" でスクリーンの中で Vim が使う行数を減らすことです。

端末から文字が届く間隔が1秒以上になる場合は 'timeout' と 'ttimeout' を設定しな
おすとよいでしょう。オプションの章を参照してください options

お使いの端末が領域のスクロールをサポートしていないが、行の挿入・削除コマンドを
サポートしている場合、複数のウィンドウを開いた状態でスクロールすると、行が上下
するかもしれません。これは、'ttyfast' オプションがリセットされている場合に起こ
ります。それを確認してください: >
        verbose set ttyfast?

お使いの端末におけるスクロールが非常に遅いが再描画は遅くないという場合は、
'ttyscroll' を 3 などの小さな値にしてください。すると、3 行より多くスクロール
する場合はスクロールでなく画面を再描画するようになります。

低速なカラー端末をお使いの場合は、次のコマンドを実行してください: >
        hi NonText cterm=NONE ctermfg=NONE
すると、異なる属性を持つスペースを送信しないようになります。ほとんどの端末では
どちらにせよそれは目に見えません。

低速なシリアル回線上で Vim を使っている場合は、"screen" プログラム上で Vim を
実行するとよいかもしれません。screen は端末の入出力をほんの少し最適化します。

termcap オプションをテストする際、何が起こっているかを見たいならば 'writedelay'
を設定するとよいかもしれません。これがゼロでない場合、一度に1つの文字が端末に
送られます。そうすると画面の更新がとても遅くなり、何が起こっているかが見えるよ
うになります。

==============================================================================
5. マウスの使用                                         mouse-using

この節では端末や端末エミュレータ上でマウスを使う方法を説明します。GUI のウィン
ドウでマウスを使う方法については gui-mouse で説明されています。マウスホイー
ルでスクロールする方法については scroll-mouse-wheel を参照してください。

次のコマンドでマウスを有効にしてください: >
        :set mouse=a
これを行わないと、Vim はどのモード('mouse' を参照)でもマウスを認識できません。

現時点では Unix の xterm、sysmouse つきの *BSD コンソール、Linux コンソール
(GPM マウスにも対応 gpm-mouse)、Windows コンソールにおいてマウスがサポートさ
れています。
マウスクリックによってカーソル位置の設定、領域の選択、ペーストを行えます。

'mouse' オプションに以下の文字を含めることにより、どの状況でマウスを有効にする
かを設定します:
                n       ノーマルモード
                v       ビジュアルモード
                i       挿入モード
                c       コマンドラインモード
                h       ヘルプファイルを閲覧しているときの上記のモード全て
                a       上記のモード全て
                r       hit-enter プロンプトが出ているとき

'mouse' の既定値は空で、マウスは無効になっています。普通は次のようにしてマウス
を有効にします: >
        :set mouse=a
これは 'mouse' の値を "nvich" にすることと同値です。
特定のモードでだけマウスを使いたい場合や、2つの質問のために使いたい場合は、こ
れらの文字を組み合わせます。
例: >
        :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 サーバーとの接続があれば
(DISPLAY がセットされていれば)、コピーとペーストが GUI 版と同様に動作します。
そうでないときは真ん中ボタンクリックで無名レジスタが挿入されます。この場合、テ
キストをコピー&ペーストする方法は次の通りです:

ビジュアルモードでマウスを使ってコピー&ペーストする方法('mouse' がセットされ
ていなければなりません。上記参照):
1. コピーしたいテキストの最初の文字の上で左ボタンを押して最後の文字の上までマ
   ウスポインタを動かし、ボタンを離します。するとビジュアルモードが開始し、選
   択したテキストが強調されます。
2. "y" を押して選択したテキストを無名レジスタにヤンクします。
3. ペーストしたい位置で左ボタンをクリックします。
4. 真ん中ボタンをクリックします。

ショートカット: ペーストしたい位置が選択したテキストと同時に画面に見えている場
合は、ペーストしたい位置で真ん中ボタンをクリックすることにより、2, 3, 4 のス
テップを一度に行えます:

Note: コマンドライン引数 -X が指定されていると Vim は X サーバーに接続せず、
X のクリップボード(セレクション)へのコピー&ペーストは機能しません。Shift キー
を押しながらクリックすることにより、xterm に選択を行わせることができます。

                                                        xterm-command-server
X サーバーのクリップボードを利用できるときは、コマンドライン引数 --servername
を指定すると x11-clientserver で説明されているコマンドサーバーが有効になりま
す。

                                                        xterm-copy-paste
NOTE: 古い xterm では95桁目または223桁目を越えてカーソルを移動できない場合があ
ります。これは xterm の問題であり、Vim の問題ではありません。新しい xterm を入
手してください color-xterm。また 'ttymouse' を参照してください。

xterm でコピー&ペーストする方法('mouse' に現在のモードが含まれていないとき):
1. テキストの最初の文字の上で左ボタンを押し、最後の文字までマウスポインタを動
   かしてからボタンを離します。
2. 普通の Vim のコマンドを使ってカーソルをペーストしたい位置まで動かします。
3. "a" を押して挿入モードを開始します。
4. 真ん中ボタンを押します。
5. ESC を押して挿入モードを抜けます。
('mouse' に含まれているモードにいる場合も、Shift キーを押しながらマウスを操作
することによりどの操作も同じようにできます)

Note: ペーストするときに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>     yes          end            yes
<C-LeftMouse>   yes          end            yes    "CTRL-]" (2)
<S-LeftMouse>   yes       no change         yes    "*" (2)    <S-LeftMouse>
<LeftDrag>      yes     start or extend (1) no                <LeftDrag>
<LeftRelease>   yes     start or extend (1) no
<MiddleMouse>   yes       if not active     no     put
<MiddleMouse>   yes       if active         no     yank and put
<RightMouse>    yes     start or extend     yes
<A-RightMouse>  yes start or extend blockw. yes               <A-RightMouse>
<S-RightMouse>  yes        no change        yes    "#" (2)    <S-RightMouse>
<C-RightMouse>  no         no change        no     "CTRL-T"
<RightDrag>     yes         extend          no                <RightDrag>
<RightRelease>  yes         extend          no                <RightRelease>

挿入/置換モード:
イベント      カーソル     選択範囲     ウィンドウ 動作 ~
                移動                       切替 ~
<LeftMouse>     yes     (cannot be active)  yes
<C-LeftMouse>   yes     (cannot be active)  yes    "CTRL-O^]" (2)
<S-LeftMouse>   yes     (cannot be active)  yes    "CTRL-O*" (2)
<LeftDrag>      yes     start or extend (1) no     like CTRL-O (1)
<LeftRelease>   yes     start or extend (1) no     like CTRL-O (1)
<MiddleMouse>   no      (cannot be active)  no     put register
<RightMouse>    yes     start or extend     yes    like CTRL-O
<A-RightMouse>  yes start or extend blockw. yes
<S-RightMouse>  yes     (cannot be active)  yes    "CTRL-O#" (2)
<C-RightMouse>  no      (cannot be active)  no     "CTRL-O CTRL-T"

ヘルプウィンドウ:
イベント      位置         選択           変更  動作    ~
               カーソル                   ウィンドウ    ~
<2-LeftMouse>   yes     (cannot be active)  no     "^]" (jump to help tag)

'mousemodel' が "popup" の場合は次のように異なります:

ノーマルモード:
イベント      カーソル     選択範囲     ウィンドウ 動作 ~
                移動                       切替 ~
<S-LeftMouse>   yes     start or extend (1) no
<A-LeftMouse>   yes start or extend blockw. no                <A-LeftMouse>
<RightMouse>    no      popup menu          no

挿入/置換モード:
イベント      カーソル     選択範囲     ウィンドウ 動作 ~
                移動                       切替 ~
<S-LeftMouse>   yes     start or extend (1) no     like CTRL-O (1)
<A-LeftMouse>   yes start or extend blockw. no
<RightMouse>    no      popup menu          no

(1) 押してからマウスポインタが移動したときのみ
(2) 同一バッファでクリックしたときのみ

左ボタンをクリックするとカーソルが移動します。他のウィンドウ内でクリックすると
そのウィンドウがアクティブになります。コマンドラインを編集中はコマンドライン内
でカーソルが移動します。挿入モードでクリックしたときは挿入モードのままです。
'scrolloff' がセットされている場合は、ウィンドウの境界から 'scrolloff' 行数内
の範囲にカーソルが移動し、テキストがスクロールします。

選択は、左ボタンを押すと始まり、カーソルを移動してボタンを離すことで行います。
ボタンを離すまでは選択が見えるようにならない場合もあります。GUI, Win32 などい
くつかのバージョンでのみドラッグが即座に表示されます。'scrolloff' がゼロでない
場合、ウィンドウの最初/最後の行で1文字以上動かすとテキストがスクロールする可能
性があることに注意してください。

ノーマルモード、ビジュアルモード、選択モードで右ボタンをクリックすると選択範囲
が拡大します。ただし、'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>

ダブルクリックによるドラッグ(押す、離す、押してドラッグ)をすると単語全体が選択
されるようになります。これはボタンが離されるまで続き、ボタンを離すと文字単位に
戻ります。

マウスによるスクロールについては scroll-mouse-wheel を参照。

                                                        gpm-mouse
GPM マウスは +mouse_gpm 機能を有効にしてコンパイルしたときのみサポートされま
す。GPM マウスドライバ(Linux コンソール)はクアドラプルクリックに対応していませ
ん。

挿入モードで選択を開始すると、一時的にノーマルモードへ移行します。ビジュアル
モードまたは選択モードが終了すると挿入モードへ戻ります。挿入モードにおける
CTRL-O と同様です。'selectmode' オプションが "mouse" を含んでいると選択モード
になります。

                                                        sysmouse
sysmouse は、コンパイル時に +mouse_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 ボタンは、ある種のマウスについている4番目、5番目のボタンのこと
です。'Microsoft Explorer' マウスの場合、これらのボタンは右親指の位置について
います。現在のところ、X1 と X2 は Win32 と X11 環境でのみ機能します。

例: >
        :noremap <MiddleMouse> <LeftMouse><MiddleMouse>
マウス中央ボタンをクリックしたとき、クリックした位置に貼り付けます(通常はカー
ソル位置に貼り付けます)。 >

        :noremap <LeftRelease> <LeftRelease>y
ビジュアルモードで選択範囲を即座にヤンクします。

Note 再帰マッピングにならないように "map" でなく "noremap" を使っています。
>
        :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: