*term.txt* For Vim バージョン 8.1. Last change: 2019 Oct 27 VIMリファレンスマニュアル by Bram Moolenaar
端末情報
Vim はユーザーが使つてゐる端末の情報にもとづいて、ユーザーがどのキーを押したかを認識します。この情報が正しくないと、スクリーンは亂れ、キーが認識されなくなつてしまひます。スクリーンに對する操作は、キーコードのシーケンスを出力することで實現されてゐます。特殊なキーを押すとコードのシーケンスが出力されます。これらのシーケンスは端末オプションに保存されてゐます。|terminal-options| を參照。
Note:
|GUI| で實行してゐるときは、このドキュメントのほとんどの事柄は關係ありません。
1. 起動 | |startup-terminal| |
2. 端末オプション | |terminal-options| |
3. ウィンドウサイズ | |window-size| |
4. 端末の速度 | |slow-fast-terminal| |
5. マウスの使用 | |mouse-using| |
Vim の起動時はデフォルトの端末タイプ向けの設定になつてゐます。これは Amiga では標準の CLI ウィンドウ、MS-DOS では PC の端末、Unix では ANSI 端末です。他に 2, 3 の端末が常に使用可能です。後述の |builtin-terms| を參照。
Vim の引數 ’-T’ により端末名を指定することができます。これが指定されない場合、環境變數 TERM から端末名を取得しようとします。
Unix では terminfo データベースや termcap ファイルが使はれます。全てのドキュメントを通して、これのことを "termcap" と呼びます。コンパイル時に、configure により terminfo と termcap を使ふかどうかが自動的に決定されます。":version
" の出力に |+terminfo| が含まれてゐれば terminfo を使用してゐます。|xterm-screens| も參照。
Unix 以外のシステムでは、TERMCAP を定義してコンパイルしたときのみ termcap を使用できます。
どの組み込み端末が利用できるかは、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 ファイルと組み込みの termcap から、使はれてゐる端末用のキーシーケンスを取得しようとします。使はれてゐる端末のエントリがあるならば、その兩方が使はれます。どちらが先に使はれるかはオプション ’ttybuiltin’ に依存します。
’ttybuiltin’ on | 1: 組み込み termcap | 2: 外部 termcap |
’ttybuiltin’ off | 1: 外部 termcap | 2: 組み込み termcap |
ある端末オプションが片方にないときは、もう一方から取得します。ある端末オプションが兩方にあるときは、先に見つかつた方が使はれます。
どの外部 termcap ファイルが使はれるかはシステムによつて異なり、環境變數 "TERMCAP" と "TERMPATH" に依存します。"man tgetent" を參照してください。
端末名によつてオプションやマッピングを切り替へるには .vimrc で行ふのがベストです。例:
if &term == "xterm" ... xterm 用のマッピングと設定 ... elseif &term =~ "vt10." ... vt100, vt102 用のマッピングと設定 ... endif
通常の編輯に入るとき、端末は 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’ を使用します。
’t_BE’ がオンの場合、raw モードに入るときに ’t_BE’ が端末に送信され、raw モードを拔けるときに ’t_BD’ が送信されます。その際、端末はペーストされたテキストの前に ’t_PS’ を置き、ペーストされたテキストの後に ’t_PE’ を置くことが想定されます。これにより、Vim はタイプされた文字とペーストされたテキストを分離することができます。ペーストされたテキストはマウスの中ボタンを使つたときと同樣に扱はれ、文字通り插入され、コマンドとしては扱はれません。
カーソルが最初の桁にある時は、ペーストされたテキストはその前に插入されます。さうでなければ、ペーストされたテキストはカーソルの位置の後に追加されます。これは最初の桁の後にペーストすることはできないことを意味します。殘念ながら Vim にはマウスポイントがどこにあつたかを知らせる方法はありません。
Note:
いくつかの狀況では、Vim は bracketed paste を認識せず、生のテキストが取得される場合があることに注意してください。別のいくつかの狀況では Vim はペーストされた最初の文字のみを取得し、殘りは切り捨てられます。例: "r" コマンドを使つた場合。bracketed paste で何か問題がある場合、.vimrc に以下を書くことで無效化することができます:set t_BE=もし Vim の實行中にこれを實行した場合、bracketed paste を無效化するため ’t_BD’ が端末に送信されます。
端末が 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
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 や xterm などの端末ではカーソルキーを押すと <Esc>OA や <Esc>OB などが送られます。不運なことに、これらは「插入を終了し、上に新規行を作成して ’A’ や ’B’ を插入する」といふ插入モードでのコマンドでもあります。
このコマンドを實行するのでなく、カーソルキーのシーケンスが入力されたのだと誤認識してしまふかもしれません。これを防ぎ、意圖通りの動作をさせるには次の設定を使ひます:
:set notimeout " マッピングについてタイムアウトしない :set ttimeout " 端末のキーコードについてタイムアウトする :set timeoutlen=100 " 100 ミリ秒後にタイムアウトする
この設定をすると、キーコードが 100 ミリ秒以內に送られた場合のみカーソルキーと認識されます。ユーザーが普通に入力するときはそんなに速くないので、たとへまつたく同じキーコードのシーケンスを送信しても、個々のコマンドと認識されます。
xterm は vt100 互換モードと非互換モードの兩方のモードで F1 から F4 のファンクションキーを送信できます。Vim は xterm がどちらのコードを送信するかわからないので、兩方のタイプのキーを認識するやうになつてゐます。<Home> と <End> についても同樣です。
通常 | vt100 |
---|---|
<F1> t_k1 <Esc>[11~ | <xF1> <Esc>OP |
<F2> t_k2 <Esc>[12~ | <xF2> <Esc>OQ |
<F3> t_k3 <Esc>[13~ | <xF3> <Esc>OR |
<F4> t_k4 <Esc>[14~ | <xF4> <Esc>OS |
<Home> t_kh <Esc>[7~ | <xHome> <Esc>OH |
<End> t_@7 <Esc>[4~ | <xEnd> <Esc>OF |
Vim が起動したときに <xF1> が <F1> へ、<xF2> が <F2> へマッピングされます。これにより、デフォルトではどちらのコードも同じ動作になります。<xF2> へのマッピングを作ると、デフォルトのマッピングが上書きされます。そして <F2> と <xF2> に別の動作をさせることができます。
新しいバージョンの xterm はシフトキーとファンクションキー、特殊キーの組み合はせをサポートしてゐます。Vim はこれらのほとんどを認識します。":set termcap
" によりどれがサポートされてゐるか、そのコードは何かを調べることができます。大抵の場合、これらは termcap には入つてゐません。builtin_xterm の termcap でのみサポートされてゐます。
新しいバージョンの 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| それらを上書きするのを避けるためです。 Sun などのプラットフォームのデフォルトの xterm 用の termcap エントリには領域のスクロール用のエントリが入つてゐません。/etc/termcap の xterm エントリに ":cs=\E[%i%d;%dr:" を追加すれば全てうまく動作するでせう。
いくつかのシステム (少なくとも 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 は 8 ビットエスケープシーケンスを使ふモードで動作させることができます。このモードでは <Esc>[ の代はりに CSI コードが使はれます。この利點は、插入モードで <Esc> が卽座に認識されることです。なぜなら、特殊キーの開始と紛らはしくないためです。 組み込みの termcap エントリでは、オプション ’term’ のどこかに "8bit" が含まれてゐないか確認されます。含まれてゐると、termcap エントリ、マウス等に 8 ビット文字が使はれます。シェルにおいて $TERM を "xterm-8bit" に設定しておくと、Vim はそれに氣づいて自動的に 8 ビットの設定を使ふやうになります。 Vim がシーケンス |t_RV| (バージョン要求) への應答を受け取つたとき、それが CSI で始まつてゐれば、その端末は 8 ビットモードであると認識し、全てのキーシーケンスを 8 ビット版に變換します。
端末オプションは普通のオプションとまつたく同じやうに設定できます。しかし端末オプションは ":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 フラグではありません。
オプション | 意味 |
---|---|
t_AB | 背景色を設定 (ANSI) |
t_AF | 文字色を設定 (ANSI) |
t_AL | 指定數の空行を追加する |
t_al | 空行を追加する |
t_bc | バックスペース文字 |
t_cd | スクリーンの最後までクリア |
t_ce | 行末までクリア |
t_cl | 畫面をクリア |
t_cm | カーソル移動 (必須!) |
t_Co | 色數 |
t_CS | 空でなければスクロール範圍に對する相對アドレスでカーソルを移動 |
t_cs | スクロール範圍を定義 |
t_CV | 縱スクロール範圍を定義 |
t_da | 空でない場合は上の行からスクロールダウンする |
t_db | 空でない場合は下の行からスクロールアップする |
t_DL | 複數行を削除 |
t_dl | 行を削除 |
t_fs | ウィンドウタイトルの終端を設定(ステータスラインから) |
t_ke | キーパッド使用終了 |
t_ks | キーパッド使用開始 |
t_le | カーソルを 1 文字分左へ移動 |
t_mb | 點滅モード |
t_md | 太字モード |
t_me | 通常モード (t_mr, t_mb, t_md, 色設定を解除) |
t_mr | 反轉モード |
t_ms | 空でない場合は强調・反轉モードでカーソルを移動できる |
t_nd | 非破壞スペース {譯注: カーソルを 1 文字分右に移動} |
t_op | 元の色のペアに戾す |
t_RI | カーソルを指定數右へ移動 |
t_Sb | 背景色を設定 |
t_Sf | 文字色を設定 |
t_se | 强調終了 |
t_so | 强調モード |
t_sr | 逆スクロール |
t_te | "termcap" モードの終了 |
t_ti | 端末を "termcap" モードにする |
t_ts | (ステータスラインに) ウィンドウタイトル設定開始 |
t_ue | 下線終了 |
t_us | 下線モード |
t_ut | 現在の背景色を使つてクリア |
t_vb | ビジュアルベル |
t_ve | カーソル表示 |
t_vi | カーソル非表示 |
t_vs | カーソル强調表示 (點滅) |
t_xs | 空でない場合は强調が上書きによつて消されない (hpterm) |
t_xn | 空ではない場合、畫面の右端のセルに書いた文字はスクロールを發生させない |
t_ZH | 斜體モード |
t_ZR | 斜體終了 |
t_Ce | 下波線終了 |
t_Cs | 下波線モード |
t_Te | 取り消し線終了 |
t_Ts | 取り消し線モード |
t_IS | アイコンテキスト設定開始 |
t_IE | アイコンテキスト設定終了 |
t_WP | ウィンドウ位置 (Y, X) をピクセルで指定 |
t_GP | ウィンドウ位置 (Y, X) をピクセルで取得 |
t_WS | ウィンドウサイズ (height, width のセル數) を指定 |
t_VS | カーソル表示 (點滅なし) |
t_SI | 插入モード開始 (バー型のカーソル) |
t_SR | 置換モードの開始 (下線型のカーソル) |
t_EI | 插入または置換モード終了 (ブロック型カーソル) |termcap-cursor-shape| |
t_RV | 端末バージョン文字列を要求 (xterm 用) 應答は |v:termresponse| に格納される。|xterm-8bit| |'ttymouse'| |xterm-codes| |
t_u7 | カーソル位置を要求 (xterm 用) |'ambiwidth'| 參照 |
t_RF | 端末の文字色を要求。應答は |v:termrfgresp| に格納される |
t_RB | 端末の背景色を要求。應答は |v:termrbgresp| に格納される |
t_8f | 文字色を設定する (R, G, B) |xterm-true-color| |
t_8b | 背景色を設定する (R, G, B) |xterm-true-color| |
t_BE | bracketed paste モードを有效化する |xterm-bracketed-paste| |
t_BD | bracketed paste モードを無效化する |xterm-bracketed-paste| |
t_SC | カーソル色の開始を設定する |
t_EC | カーソル色の終了を設定する |
t_SH | カーソルの形を設定する |
t_RC | 端末カーソルの點滅を要求する。應答は |v:termblinkresp| に格納される |
t_RS | 端末カーソルの形狀を要求する。應答は |v:termstyleresp| に格納される |
t_ST | スタックにウィンドウタイトルを保存する |
t_RT | スタックからウィンドウタイトルを復歸する |
t_Si | スタックにアイコン文字を保存する |
t_Ri | スタックからアイコン文字を復歸する |
t_TE | "raw" モードの終了 |
t_TI | 端末を "raw" モードにする |
いくつかのコードは、開始、中閒および終了部分を持ちます。開始と終了はオプション 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 または none | 點滅する矩形カーソル |
2 | 矩形カーソル |
3 | 點滅する下線カーソル |
4 | 下線カーソル |
5 | 點滅する垂直バーカーソル |
6 | 垂直バーカーソル |
t_RS は、t_RV に對する應答を受け取つた場合のみ送られます。termresponse から Terminal.app が認識され得る場合、Mac OS 上では使はれません。
Note:
可能なかぎり <> 形式を使つてください。
オプション名 | 意味 |
---|---|
t_ku <Up> | カーソル上 |
t_kd <Down> | カーソル下 |
t_kr <Right> | カーソル右 |
t_kl <Left> | カーソル左 |
<xUp> | カーソル上の代替 |
<xDown> | カーソル下の代替 |
<xRight> | カーソル右の代替 |
<xLeft> | カーソル左の代替 |
<S-Up> | シフト+カーソル上 |
<S-Down> | シフト+カーソル下 |
t_%i <S-Right> | シフト+カーソル右 |
t_#4 <S-Left> | シフト+カーソル左 |
t_k1 <F1> | F1 |
<xF1> | もう 1 つの F1 |
t_k2 <F2> | F2 |
<xF2> | もう 1 つの F2 |
t_k3 <F3> | F3 |
<xF3> | もう 1 つの F3 |
t_k4 <F4> | F4 |
<xF4> | もう 1 つの F4 |
t_k5 <F5> | F5 |
t_k6 <F6> | F6 |
t_k7 <F7> | F7 |
t_k8 <F8> | F8 |
t_k9 <F9> | F9 |
t_k; <F10> | F10 |
t_F1 <F11> | F11 |
t_F2 <F12> | F12 |
t_F3 <F13> | F13 |
t_F4 <F14> | F14 |
t_F5 <F15> | F15 |
t_F6 <F16> | F16 |
t_F7 <F17> | F17 |
t_F8 <F18> | F18 |
t_F9 <F19> | F19 |
<S-F1> | シフト+F1 |
<S-xF1> | もう 1 つの <S-F1> |
<S-F2> | シフト+F2 |
<S-xF2> | もう 1 つの <S-F2> |
<S-F3> | シフト+F3 |
<S-xF3> | もう 1 つの <S-F3> |
<S-F4> | シフト+F4 |
<S-xF4> | もう 1 つの <S-F4> |
<S-F5> | シフト+F5 |
<S-F6> | シフト+F6 |
<S-F7> | シフト+F7 |
<S-F8> | シフト+F8 |
<S-F9> | シフト+F9 |
<S-F10> | シフト+F10 |
<S-F11> | シフト+F11 |
<S-F12> | シフト+F12 |
t_%1 <Help> | ヘルプキー |
t_&8 <Undo> | アンドゥキー |
t_kI <Insert> | インサートキー |
t_kD <Del> | デリートキー |
t_kb <BS> | バックスペースキー |
t_kB <S-Tab> | バックタブ(シフト+タブ) |
t_kh <Home> | ホームキー |
t_#2 <S-Home> | シフト+ホームキー |
<xHome> | もう 1 つのホームキー |
t_@7 <End> | エンドキー |
t_*7 <S-End> | シフト+エンドキー |
<xEnd> | もう 1 つのエンドキー |
t_kP <PageUp> | ページアップキー |
t_kN <PageDown> | ページダウンキー |
t_K1 <kHome> | キーパッドホームキー |
t_K4 <kEnd> | キーパッドエンドキー |
t_K3 <kPageUp> | キーパッドページアップキー |
t_K5 <kPageDown> | キーパッドページダウンキー |
t_K6 <kPlus> | キーパッドプラスキー |
t_K7 <kMinus> | キーパッドマイナスキー |
t_K8 <kDivide> | キーパッド / |
t_K9 <kMultiply> | キーパッド * |
t_KA <kEnter> | キーパッドエンターキー |
t_KB <kPoint> | キーパッド . |
t_KC <k0> | キーパッド 0 |
t_KD <k1> | キーパッド 1 |
t_KE <k2> | キーパッド 2 |
t_KF <k3> | キーパッド 3 |
t_KG <k4> | キーパッド 4 |
t_KH <k5> | キーパッド 5 |
t_KI <k6> | キーパッド 6 |
t_KJ <k7> | キーパッド 7 |
t_KK <k8> | キーパッド 8 |
t_KL <k9> | キーパッド 9 |
<Mouse> | マウスコードの先頭部分 |
t_PS | bracketed paste の開始 |xterm-bracketed-paste| |
t_PE | bracketed paste の終了 |xterm-bracketed-paste| |
Note:
t_so と t_mr について: termcap に "so" エントリがない場合は "mr" が使はれます。逆に "mr" がない場合は "so" が使はれます。"se" と "me" も同じ關係にあります。お使ひの端末が反轉と强調の兩方をサポートしてゐるならば、これらは別々のモードとして表示されます。これらの片方しかサポートしてゐない場合は、どちらも同じやうに表示されます。
キーパッドのキーは、何かにマップされてゐないときは通常のキーと等價です。ただ 1 つだけ例外があります。小數點キーがあるべき場所にコンマキーがあるキーパッドの場合でも Vim では小數點として認識されます。これを修正するには次のマッピングを使つてください:
:noremap <kPoint> , :noremap! <kPoint> ,
キーコードを取得するトリックがあります。これは現在のところ xterm でだけ動作します。|t_RV| が定義されてゐて、xterm のパッチレベルが 141 以上であることを示す返信を受け取つた場合、Vim は特別なエスケープシーケンスを使つて xterm から直接キーコードを要求します。その返信を使つて樣々な t_ のコードを調整します。これによつて xterm がモード (8-bit, VT102, VT220 など) によつて異なるコードを出力するといふ問題に對應することができます。そのため、<xF1> のやうなコードは必要なくなります。
Note:
これは起動時にのみ行はれます。Vim が起動した後で xterm のオプションが變更された場合は、これらのエスケープシーケンスはそれ以降、認識されなくなる可能性があります。
Vim は端末がサポートするならば、トゥルーカラーを使ふこと (|highlight-guifg| 及び |highlight-guibg| を流用する) をサポートします。これを機能させるには ’termguicolors’ オプションをセットする必要があります。トゥルーカラーをサポートする端末の一覽については https://gist.github.com/XVilka/8346728 を參照してください。
場合によつては ’termguicolors’ を設定するだけでは不十分で、|t_8f| と |t_8b| オプションを明示的に設定しなければならないことがあります。これらのオプションのデフォルトはそれぞれ "^[[38;2;%lu;%lu;%lum" と "^[[48;2;%lu;%lu;%lum" で、‘$TERM‘ が ‘xterm‘ の時にだけ設定されます。幾つかの端末は同じシーケンスを受け付けますが、全てのセミコロンをコロンで置き換へる必要があります (實際にはコチラのはうが互換性の高い方法ですが、廣くはサポートされてゐません):
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 でのウィンドウサイズ變更はリソース allowWindowOps が有效なときのみ動作します。システムや xterm のバージョンによつては、セキュリティ上の問題になるとの考へにより、既定では無效になつてゐることがあります。それが本當に問題になるかどうかは明らかではありません。
既定値を上書きするには、次の行を ~/.Xdefaults または ~/.Xresources に書きます:
XTerm*allowWindowOps: true
そして "xrdb -merge .Xresources
" を實行し、この設定を有效化します。コンテキストメニュー (CTRL
キーを押しながらマウス右ボタン) でこの値を確認できます。allow-window-pos にチェックが入つてゐるはずです。
色についての Note:
’t_Co’ は利用できる色の數を示します。この値が 0 でなければ ’t_AB’ と ’t_AF’ の値を使つて色を設定します。これらのうちどれかが存在しない場合は ’t_Sb’ と ’t_Sf’ が使はれます。色をデフォルトに戾すのには ’t_me’ が使はれます。’termguicolors’ も參照してください。
Vim が插入モードに入るときにはエスケープシーケンス ’t_SI’ が送られます。置換モードに入るときにはエスケープシーケンス ’t_SR’ が設定されてゐれば送られます。設定されてゐない場合には ’t_SI’ が送られます。插入モード及び置換モードを拔けるときには ’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 を起動する前のカーソル設定は復元されません。{|+cursorshape| つきでコンパイルしたときのみ利用可能}
文字列を送つてタイトルを變更できる端末の場合は ’t_ts’ と ’t_fs’ を使つてウィンドウタイトルを變更できます。これらがタイトル文字列の前後に送られます。同樣に ’t_IS’ と ’t_IE’ を使つてアイコンテキストが設定されます。これらの termcap エントリは Vim 獨自の擴張であり、外部の termcap からこれらを取得することはできません。しかし組み込みの termcap に xterm と iris-ansi 用のエントリが含まれてをり、これらを自分で設定する必要はありません。 もしも反轉などの强調が正常に機能しない場合は、’t_xs’ を空でない文字列に設定してみてください。すると ’t_ce’ コードを使つて行から强調を取り除くやうになります。"hpterm" に對してはこれが必要です。’weirdinvert’ を設定すると ’t_xs’ を空でない値にするのと同じ效果があります。
端末が領域スクロールをサポートしてゐるのに ’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 から推測することは不可能です。スクリーンの始點から相對的またはスクロールさせる領域の始點から相對的になります。ほとんどの端末では前者となります。よく知られた例外は 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 (ウィンドウを閉ぢるキーであるため)
他のシステムではこれらも使用できるでせう。
[これは Vim 自身のウィンドウのサイズのことです。":split
" コマンドで分割できるウィンドウのことではありません。]
Amiga 上では端末名が "amiga" または "builtin_amiga" であればアミーガ固有のウィンドウリサイズ處理が有效になります。Unix ではウィンドウサイズを取得するために 3 種類の方法が試行されます:
これら全てが失敗した場合はデフォルトの 24 行 80 桁とみなされます。ウィンドウサイズ變更のシグナルを受け取るとそのサイズに再設定されます。ウィンドウサイズが正しくない場合は、オプション ’lines’ と ’columns’ で正しい値を設定することができます。
スクリーンサイズを設定するには次のコマンドを使ひます:
引數が指定されない場合はスクリーンサイズを檢出し、スクリーンを再描畫します。MS-DOS ではスクリーンモードを切り替へることが可能です。[mode] は以下のうちのどれか 1 つです。
"bw40" | 40 桁 白黑 |
"c40" | 40 桁 カラー |
"bw80" | 80 桁 白黑 |
"c80" | 80 桁 カラー (ほとんどの場合はこれ) |
"mono" | 80 桁 モノクロ |
"c4350" | 43 or 50 行 EGA/VGA モード |
number | モード番號。ビデオカードに依存 |
高速な端末を使用してゐる場合はオプション ’ruler’ をオンにするとよいでせう。するとステータスラインにカーソル位置が表示されます。水平スクロールをオンにしてゐる (’wrap’ をオフ) にしてゐるなら ’sidescroll’ を小さい値にするとよいでせう。
遲い端末を使用してゐる場合はオプション ’showcmd’ をオフにするとよいでせう。するとコマンド文字列がステータスラインに表示されなくなります。端末のスクロールが非常に遲いなら、’scrolljump’ を 5 ぐらゐにしてください。("j" などで) カーソルがスクリーンから出たとき、一度に 5 行スクロールするやうになります。もう 1 つの方法は、"z{height}<CR>" でスクリーンの中で Vim が使ふ行數を減らすことです。
端末から文字が屆く閒隔が1秒以上になる場合は ’timeout’ と ’ttimeout’ を設定しなほすとよいでせう。オプションの章を參照してください |options|。
お使ひの端末が領域のスクロールをサポートしてゐないが、行の插入・削除コマンドをサポートしてゐる場合、複數のウィンドウを開いた狀態でスクロールすると、行が上下するかもしれません。これが好ましくない場合は ’ttyfast’ をオンにしてください。するとウィンドウをスクロールするのでなく再描畫するやうになります。
お使ひの端末におけるスクロールが非常に遲いが再描畫は遲くないといふ場合は、’ttyscroll’ を 3 などの小さな値にしてください。すると、3 行より多くスクロールする場合はスクロールでなく畫面を再描畫するやうになります。
低速なカラー端末をお使ひの場合は、次のコマンドを實行してください:
hi NonText cterm=NONE ctermfg=NONE
すると、異なる屬性を持つスペースを送信しないやうになります。ほとんどの端末ではどちらにせよそれは目に見えません。
低速なシリアル回線上で Vim を使つてゐる場合は、"screen" プログラム上で Vim を實行するとよいかもしれません。screen は端末の入出力をほんの少し最適化します。
termcap オプションをテストする際、何が起こつてゐるかを見たいならば ’writedelay’ をオンにするとよいかもしれません。これがゼロでない場合、一度に 1 つの文字が端末に送られます(MS-DOS では機能しません)。さうすると畫面の更新がとても遲くなり、何が起こつてゐるかが見えるやうになります。
この節では端末や端末エミュレータ上でマウスを使ふ方法を說明します。GUI のウィンドウでマウスを使ふ方法については |gui-mouse| で說明されてゐます。マウスホイールでスクロールする方法については |scroll-mouse-wheel| を參照してください。
次のコマンドでマウスを有效にしてください:
:set mouse=a
これを行はないと、Vim はどのモード (’mouse’ を參照) でもマウスを認識できません。
現時點では Unix の xterm、|sysmouse| つきの *BSD コンソール、Linux コンソール (GPM マウスにも對應 |gpm-mouse|)、MS-DOS、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" が含まれてゐるかどうかによります。
xterm において、現在有效になつてゐるモードが ’mouse’ オプションに含まれてゐるときマウスをクリックすると、それは Vim によつて處理されます。Shift
や Ctrl
キーを押しながらクリックすると xterm に傳はります。現在有效なモードが ’mouse’ に含まれてゐない場合、すべてのクリックは xterm に傳はります。
修飾子を使用して端末自體でマウスイベントを使用できない端末の場合、囘避策は Vim のコマンドラインモードでマウスイベントを使用しないことです:
:set mouse=nvi
次に、端末でテキストを選擇するには、":
" を使用してコマンドラインモードへ行き、テキストを選擇してシステムにコピーし、Esc
キーを押します。
別の方法は、一時的に ":sh
" を使用してシェルを實行し、テキストをコピーしてからシェルを終了することです。’mouse’ は "a" に設定したままにすることができます。
Athena と Motif の GUI 版では、端末の中で動作してゐるときも、X サーバーとの接續があれば (DISPLAY がセットされてゐれば)、コピーとペーストが GUI 版と同樣に動作します。さうでないときは眞ん中ボタンクリックで無名レジスタが插入されます。この場合、テキストをコピー&ペーストする方法は次の通りです:
ビジュアルモードでマウスを使つてコピー&ペーストする方法 (’mouse’ がセットされてゐなければなりません。上記參照):
ショートカット: ペーストしたい位置が選擇したテキストと同時に畫面に見えてゐる場合は、ペーストしたい位置で眞ん中ボタンをクリックすることにより、2, 3, 4 のステップを一度に行へます:
Note:
コマンドライン引數 |-X| が指定されてゐると Vim は X サーバーに接續せず、X のクリップボード(セレクション)へのコピー&ペーストは機能しません。Shift
キーを押しながらクリックすることにより、xterm に選擇を行はせることができます。
X サーバーのクリップボードを利用できるときは、コマンドライン引數 –servername を指定すると |x11-clientserver| で說明されてゐるコマンドサーバーが有效になります。
Note:
古い xterm では 95 桁目または 223 桁目を越えてカーソルを移動できない場合があります。これは xterm の問題であり、Vim の問題ではありません。新しい xterm を入手してください |color-xterm|。また |'ttymouse'| を參照してください。
xterm でコピー&ペーストする方法 (’mouse’ に現在のモードが含まれてゐないとき):
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") |
以下は、’mousemodel’ が "extend" の場合のマウスボタンの機能の槪略です:
ノーマルモード:
イベント | カーソル移動 | 選擇範圍 | ウィンドウ切替 | 動作 |
---|---|---|---|---|
<LeftMouse> | yes | end | yes | |
<C-LeftMouse> | yes | end | yes | "CTRL-]" (2) |
<S-LeftMouse> | yes | no change | yes | "*" (2) |
<LeftDrag> | yes | start or extend (1) | no | |
<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 | |
<S-RightMouse> | yes | no change | yes | "#" (2) |
<C-RightMouse> | no | no change | no | "CTRL-T" |
<RightDrag> | yes | extend | no | |
<RightRelease> | yes | extend | no |
插入/置換モード:
イベント | カーソル移動 | 選擇範圍 | ウィンドウ切替 | 動作 |
---|---|---|---|---|
<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 | |
<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
キーを押してゐるときはマウスイベントをウィンドウマネージャーが處理 (ウィンドウ移動など) してしまふシステムでは機能しないことに注意してください。
MS-DOS, Win32, xterm (函數 gettimeofday() が使用できるとき) において、GUI が有效なときはダブル、トリプル、クアドラプルクリックが使用できます。テキストを選擇してゐるときさらにクリックすると選擇範圍が擴大します:
クリック | 選擇範圍 |
---|---|
ダブル | 單語または % でのマッチ |
トリプル | 行 |
クアドラプル | 矩形範圍 |
Exception:
ヘルプウィンドウでダブルクリックすると、その下にある單語のヘルプへジャンプします。
單語の上でダブルクリックするとその單語を選擇します。單語を構成する文字は ’iskeyword’ によつて決まります。對應する文字がある文字の上でダブルクリックするとそのマッチまでを選擇します("v%" と同樣)。そのマッチが #if/#else/#endif である場合、選擇は行單位になります。 MS-DOS と xterm ではダブルクリックの閒隔は ’mousetime’ で設定できます。他のシステムでは、この閒隔は Vim の外部で設定されてゐます。 例: ダブルクリックでカーソル下のタグへジャンプする
:map <2-LeftMouse> :exe "tag ". expand("<cword>")<CR>
ダブルクリックによるドラッグ (押す、離す、押してドラッグ) をすると單語全體が選擇されるやうになります。これはボタンが離されるまで續き、ボタンを離すと文字單位に戾ります。
GPM マウスは |+mouse_gpm| 機能を有效にしてコンパイルしたときのみサポートされます。GPM マウスドライバ (Linux コンソール) はクアドラプルクリックに對應してゐません。
插入モードで選擇を開始すると、一時的にノーマルモードへ移行します。ビジュアルモードまたは選擇モードが終了すると插入モードへ戾ります。插入モードにおける CTRL-O と同樣です。’selectmode’ オプションが "mouse" を含んでゐると選擇モードになります。 sysmouse は、コンパイル時に |+mouse_sysmouse| 機能が有效化されてゐる場合のみサポートされます。sysmouse ドライバ (*BSD コンソール) はキーボード修飾子には對應してゐません。
ウィンドウを複數に分割してゐるとき、マウスでステータスラインをドラッグするとウィンドウのサイズを變更できます。マウスをステータスライン上へ持つていき、左ボタンを押し、ステータスラインを望みの位置まで動かしてボタンを離します。單にステータスラインをクリックすると、カーソルを動かさずにそのウィンドウをカレントにします。ステータスラインのドラッグは、ウィンドウを選擇して位置やサイズが變はると混亂を招きがちです。しかしこれは確かに動作します (試してみてください)。
マウスクリックイベントもマップすることができます。マウスクリックに對するコードは次の通りです:
コード | マウスボタン | 通常の動作 |
---|---|---|
<LeftMouse> | 左ボタン押下 | カーソル位置設定 |
<LeftDrag> | 左ボタンを押しながら移動 | 選擇範圍を擴張 |
<LeftRelease> | 左ボタン放す | 選擇を終了 |
<MiddleMouse> | 中央ボタン押下 | カーソル位置にテキストを貼り付け |
<MiddleDrag> | 中央ボタンを押しながら移動 | - |
<MiddleRelease> | 中央ボタン放す | - |
<RightMouse> | 右ボタン押下 | 選擇を擴張 |
<RightDrag> | 右ボタンを押しながら移動 | 選擇を擴張 |
<RightRelease> | 右ボタン放す | 選擇を終了 |
<X1Mouse> | X1 ボタン押下 | - |
<X1Drag> | X1 ボタンを押しながら移動 | - |
<X1Release> | X1 ボタン放す | - |
<X2Mouse> | X2 ボタン押下 | - |
<X2Drag> | X2 ボタンを押しながら移動 | - |
<X2Release> | X2 ボタン放す | - |
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| を參照。
左右のマウスボタンの意味を交換するには次のやうにします:
: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>