*term.txt* For
Vim バージョン 7.3. Last change: 2011 Feb 16
VIMリファレンスマニュアル by Bram Moolenaar
端末情報
*terminal-info*
Vim はユーザが使っている端末の情報にもとづいて、ユーザがどのキーを押したかを認
識します。この情報が正しくないと、スクリーンは乱れ、キーが認識されなくなってし
まいます。スクリーンに対する操作は、キーコードのシーケンスを出力することで実現
されています。特殊なキーを押すとコードのシーケンスが出力されます。これらのシー
ケンスは端末オプションに保存されています。
|terminal-options|を参照。
NOTE:
|GUI| で実行しているときは、このドキュメントのほとんどの事柄は関係ありま
せん。
1. 起動
|startup-terminal|
2. 端末オプション
|terminal-options|
3. ウィンドウサイズ
|window-size|
4. 端末の速度
|slow-fast-terminal|
5. マウスの使用
|mouse-using|
==============================================================================
1. 起動
*startup-terminal*
Vim の起動時はデフォルトの端末タイプ向けの設定になっています。これは Amiga で
は標準の CLI ウィンドウ、MS-DOS では 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*
どの組み込み端末が利用できるかは、feature.h で定義されているマクロに依存します。
これらはコンパイル時に設定しなければなりません:
define ":version" の出力 組み込まれる端末
NO_BUILTIN_TCAPS -builtin_terms なし
SOME_BUILTIN_TCAPS +builtin_terms 一般的なもの (デフォルト)
ALL_BUILTIN_TCAPS ++builtin_terms 全て使用可能
利用可能な組み込み端末のリストを見るには ":set term=xxx" とします(GUI でないと
きのみ)。
|+builtin_terms|も参照。
termcap のコードが組み込まれているときは、termcap ファイルと組み込みの
termpcap から、使われている端末用のキーシーケンスを取得しようとします。使われ
ている端末のエントリがあるならば、その両方が使われます。どちらが先に使われるか
はオプション
'ttybuiltin' に依存します。
'ttybuiltin' on 1: 組み込み termcap 2: 外部 termcap
'ttybuiltin' off 1: 外部 termcap 2: 組み込み termcap
ある端末オプションが片方にないときは、もう一方から取得します。ある端末オプショ
ンが両方にあるときは、先に見つかった方が使われます。
どの外部 termcap ファイルが使われるかはシステムによって異なり、環境変数
"TERMCAP" と "TERMPATH" に依存します。"man tgetent" を参照してください。
端末によって設定を切り替える
*term-dependent-settings*
端末名によってオプションやマッピングを切り替えるには .vimrc で行うのがベスト
です。例:
*raw-terminal-mode*
通常の編集に入るとき、端末は raw モードになります。このとき、
't_ti' と
't_ks'
で定義されるシーケンスが端末に送信されます。これらのシーケンスにより、端末は
termcap のコードが有効になり、カーソルキーとファンクションキーが使えるようにな
ります。Vim が終了するとき、端末を起動前のモードに戻します。このとき
't_te' と
't_ke' で定義されるシーケンスが端末に送信されます。Amiga では、外部プログラム
を起動するコマンド(例: "!!")を実行するとき、一時的に端末が通常モードになります。
そのため、print キーを押してスクリーンへの出力を止めることができます。
<BS> を
押すと出力が再開します。
*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>0A や
<Esc>0B などが送
られます。不運なことに、これらは「挿入を終了し、上に新規行を作成して 'A' や
'B' を挿入する」というインサートモードでのコマンドでもあります。
このコマンドを実行するのでなく、カーソルキーのシーケンスが入力されたのだと誤認
識してしまうかもしれません。これを防ぎ、意図通りの動作をさせるには次の設定を使
います
:
この設定をすると、キーコードが 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 と異なる場合)。これらを組み
合わせることができます。例:
これらのコードのもう1つの特殊な性質は、他のコードで上書きできないことです。
xterm から直接得られたコードが
|t_RV| それらを上書きするのを避けるためです。
*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 ビット版に変換します。
==============================================================================
2. 端末オプション
*terminal-options* *termcap-options* *E436*
端末オプションは普通のオプションとまったく同じように設定できます。しかし端末オ
プションは ":set all" コマンドでは表示されないので、代わりに ":set termcap" を
使ってください。
termcap コードに対応するオプションを設定することによって、そのシーケンスを変更
することができます。例:
{Vi: 端末オプションは存在しない。Vi を終了し、termcap エントリを編集して再起動
しなければならない}
端末オプションの一覧を後で載せます。対応する termcap のコードと、それに対応す
るオプション名の最後の2文字が等しくなっています。絶対に必要な termcap コードは
カーソルを移動させる
't_cm' の1つだけです。
オプション
't_da',
't_db',
't_ms',
't_xs' は termcap におけるフラグに対応して
います。termcap にこれらのフラグが存在すると、対応するオプションに "y" が設定
されます。空でない文字列を設定するとオンになり、空文字列を設定するとオフになり
ます。
't_CS' もこれと同様ですが、termcap フラグではありません。
出力コード
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 non destructive space character
*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_Ce 下波線終了
*t_Ce* *'t_Ce'*
t_Cs 下波線モード
*t_Cs* *'t_Cs'*
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_ZH 斜体モード
*t_ZH* *'t_ZH'*
t_ZR 斜体終了
*t_ZR* *'t_ZR'*
Vim 独自のもの (標準的なコードはないもの):
t_IS アイコンテキスト設定開始
*t_IS* *'t_IS'*
t_IE アイコンテキスト設定終了
*t_IE* *'t_IE'*
t_WP ウィンドウ位置 (Y, X) をピクセルで指定
*t_WP* *'t_WP'*
t_WS ウィンドウサイズ (height, width) を文字数で指定
*t_WS* *'t_WS'*
t_SI インサートモード開始 (バー型のカーソル)
*t_SI* *'t_SI'*
t_EI インサートモード終了(ブロック型カーソル)
*t_EI* *'t_EI'*
|termcap-cursor-shape|
t_RV 端末バージョン文字列を要求 (xterm 用)
*t_RV* *'t_RV'*
|xterm-8bit| |v:termresponse| |'ttymouse'| |xterm-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'*
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>*
Note t_so と t_mrについて: termcap に "so" エントリがない場合は "mr" が使われ
ます。逆に "mr" がない場合は "so" が使われます。"se" と "me" も同じ関係にあり
ます。お使いの端末が反転と強調の両方をサポートしているならば、これらは別々のモー
ドとして表示されます。これらの片方しかサポートしていない場合は、どちらも同じよ
うに表示されます。
*keypad-comma*
キーパッドのキーは、何かにマップされていないときは通常のキーと等価です。ただ 1
つだけ例外があります。小数点キーがあるべき場所にコンマキーがあるキーパッドの場
合でも Vim では小数点として認識されます。これを修正するには次のマッピングを
使ってください:
*xterm-codes*
キーコードを取得するトリックがあります。これは現在のところ xterm でだけ動作し
ます。
|t_RV| が定義されていて、xterm のパッチレベルが 141 以上であることを示す
返信を受け取った場合、Vim は特別なエスケープシーケンスを使って xterm から直接
キーコードを要求します。その返信を使って様々な t_ のコードを調整します。これに
よって xterm がモード (8-bit, VT102, VT220 など) によって異なるコードを出力す
るという問題に対応することができます。そのため、
<xF1> のようなコードは必要なく
なります。
Note: これは起動時にのみ行われます。Vim が起動した後で xterm のオプションが変
更された場合は、これらのエスケープシーケンスは認識されなくなる可能性があります。
*xterm-resize*
xterm でのウィンドウサイズ変更はリソース allowWindowOps が有効なときのみ動作し
ます。システムや xterm のバージョンによっては、セキュリティ上の問題になるとの
考えにより、既定では無効になっていることがあります。それが本当に問題になるかど
うかは明らかではありません。
既定値を上書きするには、次の行を ~/.Xdefaults または ~/.Xresources に書きま
す:
そして "xrdb -merge .Xresources" を実行し、この設定を有効化します。コンテキス
トメニュー(CTRL キーを押しながらマウス右ボタン)でこの値を確認できます。
allow-window-pos にチェックが入っているはずです。
*termcap-colors*
色についての
Note:
't_Co' は利用できる色の数を示します。この値が 0 でなければ
't_AB' と
't_AF' の値を使って色を設定します。これらのうちどれかが存在しない場
合は
't_Sb' と
't_Sf' が使われます。色をデフォルトに戻すのには
't_me' が使われ
ます。
*termcap-cursor-shape* *termcap-cursor-color*
インサートモードに入るとき、エスケープシーケンス
't_SI' が送られます。インサー
トモードを抜けるときは
't_EI' が送られます。ただし、両方が定義されているときの
みです。これを利用して、インサートモードにおけるカーソルの形や色を変えることが
できます。これらは標準的な termcap/terminfo エントリではないので、自分で設定す
る必要があります。
以下は xterm でカーソルの色を変える例です:
NOTE: Vim を終了するとき、ノーマルモードでのカーソル設定がそのまま残ります。
Vim を起動する前のカーソル設定は復元されません。
{
|+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 を自分で定義します。例:
^V は
CTRL-V、^[ は
<Esc> を表します。
t_CV (領域縦スクロール) は標準的な termcap コードではありません。Vim はこれを
GUI モードで内部的に使っています。しかし、領域縦スクロールに対応している端末が
あるなら、その端末でもこれを定義することができます。2つの引数は、スクロールを
制限する領域の左右の桁を表します。t_cs が行の上端と下端を定義するのと同じです。
t_CV を定義すると垂直分割したウィンドウのスクロールがとても速くなります。t_da
または t_db を設定したときは t_CV を設定しないでください(スクロールするときテ
キストが消去されなくなります)。
残念ながら、領域スクロールを使用しているとき、カーソルの位置がどう変わるかを
termcap から推測することは不可能です。スクリーンの始点から相対的またはスクロー
ルさせる領域の始点から相対的になります。ほとんどの端末では前者となります。よく
知られた例外は MS-DOS コンソール(pcterm)です。カーソル位置がスクロールさせる領
域の始点から相対的となる場合は
't_CS' オプションになんらかの文字列を設定しなけ
ればなりません。そうでなければ空文字列となります。
'term' が "pcterm"のときはデ
フォルトで "yes" になります。
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* *E362*
:mod[e]
[mode]
引数が指定されない場合はスクリーンサイズを検出し、スクリーンを再描画します。
MS-DOS ではスクリーンモードを切り替えることが可能です。[mode] は以下のうちのど
れか1つです。
"bw40" 40 桁 白黒
"c40" 40 桁 カラー
"bw80" 80 桁 白黒
"c80" 80 桁 カラー (ほとんどの場合はこれ)
"mono" 80 桁 モノクロ
"c4350" 43 or 50 行 EGA/VGA モード
number モード番号。ビデオカードに依存
==============================================================================
4. 端末の速度
*slow-fast-terminal*
*slow-terminal*
高速な端末を使用している場合はオプション
'ruler' をオンにするとよいでしょう。
するとステータスラインにカーソル位置が表示されます。水平スクロールをオンにして
いる(
'wrap' をオフ)にしているなら
'sidescroll' を小さい値にするとよいでしょう。
遅い端末を使用している場合はオプション
'showcmd' をオフにするとよいでしょう。
するとコマンド文字列がステータスラインに表示されなくなります。端末のスクロール
が非常に遅いなら、
'scrolljump' を5ぐらいにしてください。("j" などで)カーソルが
スクリーンから出たとき、一度に5行スクロールするようになります。もう1つの方法は、
"z
{height}<CR>" でスクリーンの中で Vim が使う行数を減らすことです。
端末から文字が届く間隔が1秒以上になる場合は
'timeout' と
'ttimeout' を設定しな
おすとよいでしょう。オプションの章を参照してください
|options|。
お使いの端末が領域のスクロールをサポートしていないが、行の挿入・削除コマンドを
サポートしている場合、複数のウィンドウを開いた状態でスクロールすると、行が上下
するかもしれません。これが好ましくない場合は
'ttyfast' をオンにしてください。
するとウィンドウをスクロールするのでなく再描画するようになります。
お使いの端末におけるスクロールが非常に遅いが再描画は遅くないという場合は、
'ttyscroll' を 3 などの小さな値にしてください。すると、 3 行より多くスクロール
する場合はスクロールでなく画面を再描画するようになります。
低速なカラー端末をお使いの場合は、次のコマンドを実行してください:
すると、異なる属性を持つスペースを送信しないようになります。ほとんどの端末では
どちらにせよそれは目に見えません。
低速なシリアル回線上で Vim を使っている場合は、"screen" プログラム上で Vim を
実行するとよいかもしれません。screen は端末の入出力をほんの少し最適化します。
termcap オプションをテストする際、何が起こっているかを見たいならば
'writedelay'
をオンにするとよいかもしれません。これがゼロでない場合、一度に1つの文字が端末
に送られます(MS-DOS では機能しません)。そうすると画面の更新がとても遅くなり、
何が起こっているかが見えるようになります。
==============================================================================
5. マウスの使用
*mouse-using*
この節では端末や端末エミュレータ上でマウスを使う方法を説明します。GUI のウィン
ドウでマウスを使う方法については
|gui-mouse| で説明されています。マウスホイー
ルでスクロールする方法については
|scroll-mouse-wheel| を参照してください。
次のコマンドでマウスを有効にしてください:
これを行わないと、Vim はどのモード(
'mouse' を参照)でもマウスを認識できません。
現時点では Unix の xterm、
|sysmouse| つきの *BSD コンソール、Linux コンソール
(GPM マウスにも対応
|gpm-mouse|)、MS-DOS、Windows コンソールにおいてマウスがサ
ポートされています。
マウスクリックによってカーソル位置の設定、領域の選択、ペーストを行えます。
'mouse' オプションに以下の文字を含めることにより、どの状況でマウスを有効にする
かを設定します:
n ノーマルモード
v ビジュアルモード
i インサートモード
c コマンドラインモード
h ヘルプファイルを閲覧しているときの上記の4モード全て
a 上記の4モード全て
r
|hit-enter| プロンプトが出ているとき
'mouse' の既定値は空で、マウスは無効になっています。普通は次のようにしてマウス
を有効にします:
これは
'mouse' の値を "nvich" にすることと同値です。
特定のモードでだけマウスを使いたい場合や、2つの質問のために使いたい場合は、こ
れらの文字を組み合わせます。
例:
上の例はノーマルモードとビジュアルモードでのみマウスを有効にします。
上の例はヘルプファイルでのみマウスを有効にします ("g
<LeftMouse>" でタグジャン
プができるようになります)
マウスで選択を開始した場合、ビジュアルモードとセレクトモードのどちらになるかは
'selectmode' に "mouse" が含まれているかどうかによります。
xterm において、現在有効になっているモードが
'mouse' オプションに含まれている
ときマウスをクリックすると、それは Vim によって処理されます。Shift や Ctrl
キーを押しながらクリックすると xterm に伝わります。現在有効なモードが
'mouse'
に含まれていない場合、すべてのクリックは xterm に伝わります。
*xterm-clipboard*
Athena と 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桁目を越えてカーソルを移動できない場合があります。これ
は xterm の問題であり、Vim の問題ではありません。新しい xterm を入手してくださ
い
|color-xterm|。
現在、制限は 223 桁です。
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, MS-DOS, WIN32
などいくつかのバージョンでのみドラッグが即座に表示されます。
'scrolloff' がゼロ
でない場合、ウィンドウの最初/最後の行で1文字以上動かすとテキストがスクロールす
る可能性があることに注意してください。
ノーマルモード、ビジュアルモード、セレクトモードで右ボタンをクリックすると選択
範囲が拡大します。ただし、
'mousemodel' が "popup" のときは、Shift キーを押した
ままで左ボタンをクリックします。他のバッファを開いているウィンドウの中をクリッ
クするとビジュアルモードとセレクトモードは中止されます。
ノーマルモード、ビジュアルモード、セレクトモードで Alt キーを押したまま右ボタ
ンをクリックすると、選択範囲がブロック指向になります。ただし、
'mousemodel' が
"popup"のときは、Alt キーを押しながら左ボタンをクリックします。Alt キーを押し
ているときはマウスイベントをウィンドウマネージャが処理(ウィンドウ移動など)して
しまうシステムでは機能しないことに注意してください。
*double-click*
MS-DOS、Win32、xterm (関数 gettimeofday() が使用できるとき)において、GUI が有
効なときはダブル、トリプル、クアドラプルクリックが使用できます。テキストを選択
しているときさらにクリックすると選択範囲が拡大します:
クリック 選択範囲
ダブル 単語または % でのマッチ
*<2-LeftMouse>*
トリプル 行
*<3-LeftMouse>*
クアドラプル 矩形範囲
*<4-LeftMouse>*
例外: ヘルプウィンドウでダブルクリックすると、その下にある単語のヘルプへジャン
プします。
単語の上でダブルクリックするとその単語を選択します。単語を構成する文字は
'iskeyword' によって決まります。対応する文字がある文字の上でダブルクリックする
とそのマッチまでを選択します("v%" と同様)。そのマッチが #if/#else/#endif であ
る場合、選択は行指向になります。
MS-DOS と xterm ではダブルクリックの間隔は
'mousetime' で設定できます。他のシ
ステムでは、この間隔は Vim の外部で設定されています。
例: ダブルクリックでカーソル下のタグへジャンプする
ダブルクリックによるドラッグ(押す、離す、押してドラッグ)をすると単語全体が選択
されるようになります。これはボタンが離されるまで続き、ボタンを離すと文字単位に
戻ります。
*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 環境でのみ機能します。
例:
マウス中央ボタンをクリックしたとき、クリックした位置に貼り付けます(通常はカー
ソル位置に貼り付けます)。
ビジュアルモードで選択範囲を即座にヤンクします。
Note 再帰マッピングにならないように "map" でなく "noremap" を使っています。
X1 と X2 ボタンでジャンプリストの前後に移動するようにマップします。
|CTRL-O| と
|CTRL-I| を参照。
*mouse-swap-buttons*
左右のマウスボタンの意味を交換するには次のようにします:
vim:tw=78:ts=8:ft=help:norl: