Up: 目次   [Index]


ターミナルウィンドウのサポート

*terminal.txt*  For Vim バージョン 8.1.  Last change: 2019 Nov 03


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

端末ウィンドウサポート

端末機能はオプションなので、あなたの Vim が對應してゐるかは次のコマンドを使つて確認できます:

echo has('terminal')

結果が "1" ならば對應してゐます。

1. 基本的な使ひ方|terminal-use|
    キー入力|terminal-typing|
    サイズと色|terminal-size-color|
    コマンドの文法|:terminal|
    サイズ變更|terminal-resizing|
    ターミナルモード|Terminal-mode|
    カーソルスタイル|terminal-cursor-style|
    セッション|terminal-session|
    特別なキー|terminal-special-keys|
    Unix|terminal-unix|
    MS-Windows|terminal-ms-windows|
2. Terminal 函數|terminal-function-details|
3. 端末通信|terminal-communication|
    Vim からジョブへ: term_sendkeys()|terminal-to-job|
    ジョブから Vim へ: JSON API|terminal-api|
    クライアントサーバー機能を使ふ|terminal-client-server|
4. リモートテスト|terminal-testing|
5. 畫面ダンプの差分|terminal-diff|
    Vim の畫面ダンプテストを書く|terminal-dumptest|
    畫面ダンプを作成する|terminal-screendump|
    畫面ダンプを比較する|terminal-diffscreendump|
6. デバッグ|terminal-debug|
    はじめに|termdebug-starting|
    セッション例|termdebug-example|
    コードをステップ實行する|termdebug-stepping|
    變數を檢査する|termdebug-variables|
    その他のコマンド|termdebug-commands|
    プロンプトモード|termdebug-prompt|
    通信|termdebug-communication|
    カスタマイズ|termdebug-customizing|

{Vim が |+terminal| 機能付きでコンパイルされたときのみ有效}

端末機能を使ふには |+job| そして |+channel| 機能が必要です。

1. 基本的な使ひ方

これは Vim のウィンドウ內で端末エミュレーターを實行する機能です。端末エミュレーターに接續すると 1 つのジョブが開始されます。例としてシェルを實行するならば以下のやうになります:

:term bash

またビルドコマンドを實行するにはかうなります:

:term make myprogram

ジョブは Vim とは非同期的に動作し、他のウィンドウで編輯中であつてもジョブからの出力は隨時端末ウィンドウに反映されます。

キー入力

端末ウィンドウにキーボードのフォーカスがある時には、入力したキーはジョブに送られます。これには可能ならば pty を使用します。端末ウィンドウ外をクリックすれば、キーボードフォーカスを外に動かせます。

ウィンドウや他の CTRL-W コマンドを操作するために CTRL-W を使へます。例へば:

CTRL-W CTRL-W次のウィンドウにフォーカスを移動する
CTRL-W :Ex コマンドに入る

他のコマンドについては |CTRL-W| 參照してください。

端末ウィンドウでの特別な操作:

CTRL-W .端末內のジョブに CTRL-W を送る
CTRL-W CTRL-\端末內のジョブに CTRL-\ を送る
CTRL-W NTerminal-Normal モードに移行, |Terminal-mode| を參照
CTRL-\ CTRL-NTerminal-Normal モードに移行, |Terminal-mode| を參照
CTRL-W " {reg}レジスタ {reg} の內容を貼り付け式の評價結果を插入するためのレジスタ = も機能する
CTRL-W CTRL-Cジョブを停止する, 下記の |t_CTRL-W_CTRL-C| を參照
CTRL-W gt次のタブページに移動する。‘gt‘ と同じ
CTRL-W gT前のタブページに移動する。‘gT‘ と同じ

CTRL-W の代はりに別のキーを使ふにはオプション ’termwinkey’ を參照してください。ただし ’termwinkey’ を 2 回タイプすると ’termwinkey’ がジョブへ送信されます。例:

termwinkeyCTRL-W次のウィンドウにフォーカスを移動する
termwinkey:Ex コマンドに入る
termwinkey’ ’termwinkey端末內のジョブに ’termwinkey’ を送信する
termwinkey.端末內のジョブに ’termwinkey’ を送信する
termwinkeyCTRL-\端末內のジョブに CTRL-W を送信する
termwinkeyNTerminal-Normal モードへ移行する。以下を參照
termwinkeyCTRL-NCTRL-W N と同じ |t_CTRL-W_N|
termwinkeyCTRL-CCTRL-W CTRL-C と同じ |t_CTRL-W_CTRL-C|

他のモードと同じやうに、ノーマルモードへ移行するための特別なキーの組み合はせである CTRL-\ CTRL-N が利用できます。 ジョブを强制停止するのに CTRL-W CTRL-C を使へます。MS-Windows では CTRL-BREAK でも同樣にジョブを停止できます。

CTRL-C を入力した場合、その效果は pty がどのやうに構成されてゐるかに從ひます。シンプルなコマンドにおいては SIGINT がジョブに送られ、結果的にジョブが停止するでせう。中には SIGINT を無視するコマンドもあるでせうし、また (Vim がさうしてゐるやうに) CTRL-C をプログラム自身で取り扱ふものもあるでせう。

入力したキーを別のものに讀み返させるには端末モードマッピング、詳細は |:tmap| を使用してください。これはどのやうなマッピングでも定義できますが、端末內で實行されてゐるジョブに送信されるキー入力にのみ作用します。例へば、F1 キーで Terminal-Normal モードに切り替へるには:

tnoremap <F1> <C-W>N

Esc を使ふこともできますが、他のキーが壞れないやうにする必要があります (カーソルキーは Esc で始まるので、それらは壞れるかもしれません):

tnoremap <Esc> <C-W>N
set notimeout ttimeout timeoutlen=100

端末ウィンドウを開いて ’buftype’ を "terminal" に設定すると、TerminalOpen 自動コマンドイベントが發生します。これにより、ウィンドウとバッファ專用のオプションを設定することが可能です。例:

au TerminalOpen * if &buftype == 'terminal' | setlocal bufhidden=hide | endif

<abuf> は端末バッファに設定されてゐますが、ウィンドウが存在しない場合 (隱された端末) は閒違つたバッファにオプションが設定されるため、この例では &buftype のチェックが行はれます。

マウスイベント (クリックやドラッグ) は端末に渡されます。マウス移動イベントは Vim 自身が受け取つたときのみ渡されます。’balloonevalterm’ が有效になつてゐる端末の場合です。

サイズと色

端末ウィンドウのサイズを制禦するにはオプション ’termwinsize’ を參照してください。(TODO: 端末がウィンドウよりも大きい場合にはスクロールすることを記述する)

端末內のジョブは端末の色を變更できます。デフォルトの前景色及び背景色は Vim の Normal ハイライトグループにより決定されます。

カラー端末を開始する際に、背景に白と黑どちらの系統の色を使用するかは、オプション ’background’ を用ゐて決定します。

異なる色を使ふ場合には Terminal ハイライトグループを利用できます。例:

hi Terminal ctermbg=lightgrey ctermfg=blue guibg=lightgrey guifg=blue

新しい端末ウィンドウでデフォルトで使用される 16 個のANSI カラーは、變數 ‘g:terminal_ansi_colors‘ を使用して設定することができます。これは、16 個の色名または 16 進數の色コードのリストでなければなりません。これは、|highlight-guifg| で受け入れられるものと同樣です。 GUI カラーを使用しない場合、端末ウィンドウは常に端末基礎の 16 個の ANSI カラーを使用します。

|term_setansicolors()| 函數を使用して色を變更したり、|term_getansicolors()| を使用して現在使用されてゐる色を取得することができます。

コマンドの文法

:[range]ter[minal] [options] [command]

新しい端末ウィンドウを開きます。

[command] が指定された場合、それをジョブとして實行し、端末の入出力を接續します。

[command] が指定されなかつた場合、オプション ’shell’ を使用します。

[command] が NONE の場合ジョブは開始されず、端末の pty は gdb のやうなコマンドによつて利用できます。

[command] がない場合、デフォルトの動作はシェルが終了したときに端末を閉ぢます。この動作は ++noclose 引數で變更できます。

[command] が指定されてゐる場合、デフォルトの動作は端末を端末ノーマルモードで開いたままにします。この動作は ++close 引數で變更できます。

新しいバッファが作られ、 [command] もしくは ’shell’ に "!" が前置された名前が與へられます。すでに同じ名前のバッファが存在する場合には、カッコに圍まれた番號が付與されます。例へば "gdb" が存在するなら 2 つ目の端末には "!gdb (1)" といふ名前が使はれます。

[range] が與へられた場合は、指定された範圍の行がジョブの入力として使はれます。その際の端末ウィンドウではキー入力ができなくなります。MS-Windows においては以下の ++eof オプションも參照してください。

サポートされる [options] は以下の通り:

++closeジョブが終了した際には自動的に端末ウィンドウを閉ぢる。|terminal-close|
++nocloseジョブが終了しても自動的に端末ウィンドウを閉ぢません
++openジョブが終了した際にウィンドウが表示されてゐない場合に、ウィンドウを表示する。

Note:
割り込み的に發生しうることに留意。

++close, ++noclose と ++open は最後に指定されたものが有效です。

++curwin現在のウィンドウで端末を開き、現在のウィンドウを分割しない。現在のバッファを抛棄( |abandon| )できない場合は失敗する。
++hidden端末を隱しバッファとして開く。ウィンドウは使用されない。
++norestoreセッションファイルに端末ウィンドウを含めません。
++shell{command} を直接實行するのではなく、‘:!command‘ と同樣にシェルを使用します。 {Vim: 現狀、Unix でのみ動作します}
++kill={how}端末ウィンドウを閉ぢるときに {how} でジョブを終了させます。値については |term_setkill()| を參照してください。
++rows={height}端末ウィンドウの高さとして {height} を使ひます。もし、端末が Vim の完全な高さ (端末ウィンドウの上や下にウィンドウがない) を使用する場合、必要に應じてコマンドラインの高さが現象します。
++cols={width}端末ウィンドウの幅として {width} を使ひます。もし、端末が Vim の完全な幅 (端末ウィンドウの左や右にウィンドウがない) を使用する場合、この値は無視されます。
++eof={text}[range] を使つた場合: 最後の行を送信したあとに指定したテキストが送られる。空白を含むことはできない。 CR が 1 つ付け加へられる。MS-Windows ではデフォルトでは CTRL-D が送られる。

例: シェルには "++eof=exit" を、Python には "++eof=exit()" を指定する。特殊 コードが ‘:map‘ と同樣に利用できる。例: "<C-Z>" は CTRL-Z を示す。

++type={pty}(MS-Windows のみ): 假想コンソールとして {pty} を使用する。値については ’termwintype’ を參照。
++api={expr}{expr} で始まる函數名を |terminal-api| 機能として呼び出すことを許可します。{expr} が空の場合、函數を呼び出すことはできません。

より詳細なオプションを使ひたいならば |term_start()| 函數を使つてください。

ウィンドウを垂直に分割したいなら、次を使ひます:

:vertical terminal

もしくは短く:

:vert ter

端末に關聯付けられたバッファが强制的にアンロードもしくは削除された場合には、‘job_stop(job, "kill")‘ を呼んだのと同じやうにそのジョブが殺されます。 普通にウィンドウを閉ぢると |E947| が返ります。kill メソッドが "++kill={how}" か |term_setkill()| で設定されてゐる時にウィンドウを閉ぢると、その方法でジョブを强制停止または中斷します。例:

:term ++kill=term tail -f /tmp/log

ジョブが實行され續けるとウィンドウはそのバッファが變更されたかのやうに振る舞ひます。 ‘CTRL-W :quit‘ でウィンドウを閉ぢようとしても失敗します。‘CTRL-W :quit!‘ を使ふとジョブは終了します。ウィンドウのテキストは失はれます。バッファは依然存在しますが、‘:buffer‘ でウィンドウに割り當てても空のバッファが表示されます。

CTRL-W :close‘ で閉ぢようとしてもまた失敗します。‘CTRL-W :close!‘ はウィンドウを閉ぢ、バッファを隱し狀態にします。

CTRL-W :hide‘ を使ふとジョブを實行したまま、端末ウィンドウを閉ぢバッファを隱し狀態にできます。‘:buffer‘ コマンドで現在のウィンドウを端末ウィンドウにすることができます。未保存の變更があつた場合にはこれは失敗しますが、通常と同じやうに ! で强制できます。

端末ウィンドウが閉ぢられたとき、例へばシェルを終了したときや "++close" 引數が使はれたとき、またこれが最後のノーマル Vim ウィンドウのときは、Vim は終了します。これはノーマルウィンドウ內で |:quit| を使ふやうなものです。ヘルプやプレビューウィンドウは含まれません。

バックグラウンドジョブをウィンドウ無しで實行し、終了したらウィンドウに表示するには、次のやうにオプションを指定します:

:term ++hidden ++open make

Note:
ウィンドウが豫期せぬタイミングで開かれ、あなたが行つてゐる操作に割り込む可能性があることに留意してください。

ジョブが實行され續けると、バッファが變更されたとみなされ Vim を簡單には終了できなくなります。|abandon| を參照してください。

ジョブが終了しバッファになんの變更も及ぼさなかつた場合、そのウィンドウを閉ぢるとバッファは削除されます。

端末バッファを變更するにはオプション ’modifiable’ をセットする必要があります。これはジョブが終了した後にのみ行なへます。バッファを最初に變更した瞬閒に普通のバッファになりハイライトは削除されます。バッファを保存可能にするために |:file| でバッファの名前を、コマンド名から變更することもできます。

サイズ變更

端末のサイズは 3 つのモードのいづれか 1 つで決まります:

  1. オプション ’termwinsize’ が空の場合: 端末サイズはウィンドウのサイズに從ふ。最小で 2 行、10 桁。
  2. オプション ’termwinsize’ が "rows*cols" の場合、"rows" を最小行數、"cols" を最小桁數とする。
  3. オプション ’termwinsize’ が "rowsXcols" ("X" は大文字小文字を問はない) の場合: 端末サイズは指定された行數と桁數で固定される。もしもウィンドウがそれよりも大きい場合には、使用されない空の領域ができる。

ウィンドウサイズが端末サイズよりも小さい場合、端末の一部の領域 (左下に相當する部分) のみが描畫されます。

端末の現在のサイズを取得するのに函數 |term_getsize()| が使へます。|term_setsize()| は 1 か 2 のモードの時にだけ、すなはち ’termwinsize’ が "rowsXcols" 形式ではない時に使へます。

Terminal-Job と Terminal-Normal モード

ジョブが實行中には端末の內容はジョブの制禦下にあります。それにはカーソルの位置も含まれます。入力したキーはジョブに送られます。端末の內容はいつでも更新されえます。これを Terminal-Job モードと呼びます。

CTRL-W N (もしくは ’termwinkey’ N) を入力すると Terminal-Normal モードに遷移します。このモードでは端末ウィンドウのコンテンツは Vim の制禦下に置かれ、ジョブの出力は一時保留されます。CTRL-\ CTRL-N でも同じやうになります。

|:tmap| のマッピングは Terminal-Job モードにおいて作用します。|term_sendkeys()| で送つたキーには tmap は適用されませんが、|feedkeys()| で送つたキーには適用されます。

Terminal-Job モードから插入モードに移る方法はありません。

Terminal-Normal モードでは、Vim の普通のコマンドでカーソルを自由に動かせます。視覺的にテキストをマークしたり、テキストをヤンクしたり思ひのままです。しかしバッファの內容を變更することはできません。’i’ や ’a’ など插入モードを開始するコマンドを使ふと Terminal-Job モードに戾ります。結果としてウィンドウは端末のコンテンツを反映させるために更新されます。|:startinsert| は無效です。

Terminal-Normal モードではステータスラインとウィンドウタイトルには "(Terminal)" と表示されます。Terminal-Normal モード中にジョブが終了してしまつた場合にはそれが "(Terminal-finished)" に變はります。

ジョブが端末內で行を出力し內容がスクロールすると、それらの行は記憶され Terminal-Normal モードで表示されます。行數は ’'termwinscroll’ オプションによつて制限されます。この制限を超えると、スクロールされた行の最初の 10% が削除され失はれます。

カーソルスタイル

デフォルトでは端末ウィンドウのカーソルには點滅しないブロックが使はれます。カーソルの點滅狀態や形を變更するのに、普通の xterm のエスケープシーケンスが使はれます。端末ウィンドウからフォーカスが外れる際に Vim は元々のカーソルを復元します。

xterm を "-bc" 引數で起動した場合、または他の方法でカーソルの點滅を發生させた場合、が1つの例外となります。それらにより點滅フラグが逆轉したことが問題の引き金となります。なぜなら Vim はその逆轉を檢出できず、端末ウィンドウのカーソルの點滅も逆轉します。

セッション

可能かつ必要であれば、セッションファイルを使用する歲に端末ウィンドウが復元されます。

"terminal" が ’sessionoptions’ から削除された場合、端末ウィンドウは復元されません。

端末內のジョブが終了した場合、ウィンドウは復元されません。

端末を復元できる場合は、その端末を開くために使はれたコマンドが再び使はれます。これを變更するには |term_setrestore()| 函數を使用します。これは、コマンドを "NONE" に設定して特定の端末を復元しない場合にも使用できます。

特別なキー

端末エミュレーターは xterm をシミュレートするので、Vim と xterm の兩方が認識するエスケープシーケンスのみが端末ウィンドウで利用可能になります。もし、端末で實行中のジョブに他のエスケープシーケンスを渡したい場合は、轉送を設定する必要があります。例:

tmap <expr> <Esc>]b SendToTerm("\<Esc>]b")
func SendToTerm(what)
  call term_sendkeys('', a:what)
  return ''
endfunc

Unix

UNIX ではすべての種類のコマンドを實行可能とするために pty を用ゐてゐます。端末內で Vim ですら實行できるのです!これは以下のやうにデバッグに利用できます。

實行中のジョブに情報を傳へるのに以下の環境變數が利用できます:

TERM端末の名前、’term’ オプションまたは GUI では $TERM から。"xterm" で始まらなければ "xterm" にフォールバックする
ROWS端末の初期行數
LINESROWS と同じ
COLUMNS端末の初期桁數
COLORS色數 ’t_Co’ (GUIでは 256*256*256)
VIM_SERVERNAMEv:servername
VIM_TERMINALv:version

MS-Windows

MS-Windows ではすべての種類のコマンドを實行可能とするために winpty を用ゐてゐます。あたりまへのことですが、ここで實行するコマンドは端末の中で動くもので、獨自のウィンドウを開くものであつてはいけません。

winpty 內の以下の 2 つのファイルが必要です:

winpty.dll
winpty-agent.exe

これらは以下のページからダウンロードできます:

https://github.com/rprichard/winpty

これらのファイルを環境變數 PATH のいづれかに置くだけです。必要ならばオプション ’winptydll’ でファイルの場所を指定できます。もしも 32 ビット版と 64 ビット版を同じディレクトリに置きたいのであれば、Vim のビルドに合はせてそれぞれを winpty32.dll もしくは winpty64.dll といふ名前に變更してください。 MS-Windows 10 の最新バージョン ("October 2018 Update" 以降) では、winpty は必要なくなりました。それらのバージョンでは、|:terminal| はターミナルアプリケーションをホストするための Windows の組み込みサポート "ConPTY" を使用します。ConPTY が使用されてゐると、あゐまいな幅の文字に關するレンダリングアーティファクトが發生する可能性があります。そのやうな問題に遭遇した場合は、"winpty" をインストールしてください。ConPTY の問題が修正されるまでは、"winpty" が優先されます。

環境變數は實行中のジョブに情報を渡すために使用されます:

VIM_SERVERNAME	v:servername

2. Terminal 函數

term_dumpdiff({filename}, {filename} [, {options}])

2 ファイルの差分を表示してゐる新しいウィンドウを開く。ファイルは |term_dumpwrite()| で作成されてゐなければならない。

diff に失敗した場合はバッファ番號もしくは 0 を返す。|terminal-diff| も參照。

Note:
これは 2 バイト文字ではまだ動作しないことに注意。

バッファの上部は最初のファイルの內容を含み、下部は 2 番目のファイルの內容を含む。眞ん中の部分は差分を表示する。それぞれのパートはイコールのラインで區切られる。

もしも {options} に引數があるなら、次のやうな要素を持つ辭書になつてゐなければならない:

"term_name"初期ファイル名の代はりのバッファ名に使ふための名前
"term_rows"termwinsize’ を使ふ代はりの端末が使ふ高さのサイズ
"term_cols"termwinsize’ を使ふ代はりの端末が使ふ幅のサイズ
"vertical"ウィンドウを垂直に分割する
"curwin"カレントウィンドウを使ひウィンドウは分割しない; もしもカレントバッファを破毀 |abandon| することができないならば失敗する。
"bufnr"新規バッファを作成せず、存在してゐる "bufnr" バッファを使用します。このバッファは term_dumpdiff() や term_dumpload() で前もつて作成されてゐて、ウィンドウ中で見えてゐなければなりません。
"norestore"セッションファイルに端末ウィンドウを追加しない

眞ん中のそれぞれの文字は差異を示してゐる。もしも複數の差異があるのなら、このリストの最初のものだけが使はれる:

X文字が異なる
w幅が異なる
f前景色が異なる
b背景色が異なる
a屬性が異なる
+1 つ目のファイルの位置が缺損してゐる
-2 つ目のファイルの位置が缺損してゐる

"s" キーを使ふと上と下の部分が交換される。これは差異を見つけやすくする。

|method| としても使用できます:

GetFilename()->term_dumpdiff(otherfile)
term_dumpload({filename} [, {options}])

{filename} の內容を表示してゐる新しいウィンドウを開く。ファイルは |term_dumpwrite()| で作成されてゐなければならない。失敗した場合はバッファ番號もしくは 0 を返す。|terminal-diff| も參照。

{options} の詳細は |term_dumpdiff()| を參照。

|method| としても使用できます:

GetFilename()->term_dumpload()
term_dumpwrite({buf}, {filename} [, {options}])

ファイル {filename} 內の {buf} のターミナル畫面の內容をダンプする。これは |term_dumpload()| と |term_dumpdiff()| で使はれるフォーマットを使ふ。

もしもターミナル中のジョブがすでに終了してゐるのなら、E958 のエラーが與へられる。

もしも {filename} がすでに存在してゐるなら、E953 のエラーが與へられる。|terminal-diff| も參照。

{options} は次のオプションを持つ辭書:

"rows"ダンプする行の最大値
"columns"ダンプする列の最大値

|method| としても使用できます。ベースはファイル名に使用されます:

GetFilename()->term_dumpwrite(bufnr)
term_getaltscreen({buf})

{buf} のターミナルがオルタネートスクリーンを使つてゐるなら 1 を返す。

{buf} は |term_getsize()| と同樣に使はれる。

|method| としても使用できます:

GetBufnr()->term_getaltscreen()
term_getansicolors({buf})

ターミナル {buf} で使はれてゐる ANSI カラーパレットを取得する。16 の長さのリストを返す。それぞれの項目は 16 進數の "#rrggbb" フォーマットで表はされてゐるカラーです。|term_setansicolors()| と |g:terminal_ansi_colors| も參照。もしもどちらも使はれてゐなければ、デフォルト色が返される。

{buf} は |term_getsize()| と同樣に使はれる。もしもバッファが存在しないか端末ウィンドウでなければ、空のリストが返される。

|method| としても使用できます:

GetBufnr()->term_getansicolors()

{Vim が GUI が有效のとき、かつ/または |+termguicolors| 機能付きでコンパイルされたときのみ有效}

term_getattr({attr}, {what})

與へられた {attr}。要素中で term_scrape() によつて返された値。{what} がオンかどうかを返す。 {what} は次のうちのどれか:

bold
italic
underline
strike
reverse

|method| としても使用できます:

GetAttr()->term_getattr()
term_getcursor({buf})

ターミナル {buf} のカーソル位置を取得する。2 つの數値と辭書のリストを返す: [row, col, dict]。

"row" と "col" は原點で、1 番目のスクリーンのセルは row が 1 で column が 1。これはターミナル自身のカーソルの位置で Vim ウィンドウのものではない。

"dict" は 3 つの數値を持てる:

"visible"カーソルが可視なら 1、不可視なら 0
"blink"カーソルが點滅なら 1、點滅でないなら 0
"shape"カーソルの形がブロックなら 1、アンダーラインなら 2、バーティカルなら 3。
"color"カーソルの色。例へば "green"

{buf} はターミナルウィンドウのバッファ番號でなければならない。バッファが存在しないか、ターミナルウィンドウでなければ、空のリストが返される。

|method| としても使用できます:

GetBufnr()->term_getcursor()
term_getjob({buf})

ターミナルウィンドウの {buf} と關聯付けられたジョブを取得する。{buf} は |term_getsize()| として使はれる。ジョブがない場合は |v:null| を返す。

|method| としても使用できます:

GetBufnr()->term_getjob()
term_getline({buf}, {row})

ターミナルウィンドウの {buf} からテキストの 1 行を取得する。{buf} は |term_getsize()| として使はれる。

1 番目の行は {row} を 1 つ持つてゐる。{row} が "." のとき、カーソル行が使はれる。{row} が正しくなければ、空文字列が返される。

それぞれの文字の屬性を取得するには |term_scrape()| を使ふ。

|method| としても使用できます:

GetBufnr()->term_getline(row)
term_getscrolled({buf})

ターミナル {buf} の上方にスクロールされた行數を返す。これは |term_getline()| と |getline()| で使はれる行番號のオフセット。 そのため:

term_getline(buf, N)

は次と同じ:

getline(N + term_getscrolled(buf))

(その行が存在するなら)。

{buf} は |term_getsize()| として使はれる。

|method| としても使用できます:

GetBufnr()->term_getscrolled()
term_getsize({buf})

ターミナル {buf} のサイズを取得する。2 つの數値を持つリストを返す: [rows, cols]。これはターミナルのサイズであつて、ターミナルを持つてゐるウィンドウのサイズではない。

{buf} はターミナルウィンドウのバッファ番號でなければならない。カレントバッファのために空文字列を使ふ。バッファが存在しないか、ターミナルウィンドウでなければ、空リストが返される。

|method| としても使用できます:

GetBufnr()->term_getsize()
term_getstatus({buf})

ターミナル {buf} のステータスを取得する。次の項目のコンマ區切りのリストを返す:

runningジョブは動作中
finishedジョブは停止
normalTerminal-Normal モード中

"running" もしくは "finished" のどちらかが常に存在する。

{buf} はターミナルウィンドウのバッファ番號でなければならない。バッファが存在しないか、ターミナルウィンドウでなければ、空文字列が返される。

|method| としても使用できます:

GetBufnr()->term_getstatus()
term_gettitle({buf})

ターミナル {buf} のタイトルを取得する。これはターミナル內で設定されたジョブのタイトル。

{buf} はターミナルウィンドウのバッファ番號でなければならない。バッファが存在しないか、ターミナルウィンドウでなければ、空文字列が返される。

|method| としても使用できます:

GetBufnr()->term_gettitle()
term_gettty({buf} [, {input}])

ターミナルウィンドウ {buf} に關聯付けらてた制禦中のターミナルの名前を取得する。{buf} は |term_getsize()| として使はれる。

{input} が省略されるか 0 なら、書き込んでゐる名前を返す (stdout)。{input} が 1 なら、讀み込んでゐる名前を返す (stdin)。UNIX ではどちらも同じ名前を返す。

|method| としても使用できます:

GetBufnr()->term_gettty()
term_list()

ターミナルウィンドウのためのすべてのバッファのバッファ番號を持つリスト

term_scrape({buf}, {row})

{buf} のターミナルスクリーンの {row} の內容を取得する。{buf} のためには |term_getsize()| を參照。

1 番目の行は {row} を 1 つ持つてゐる。{row} が "." のとき、カーソル行が使はれる。{row} が正しくなければ、空文字列が返される。

それぞれのスクリーンセルのための辭書を含むリストを返す:

"chars"セルの文字
"fg"#rrggbb 形式の前景色
"bg"#rrggbb 形式の背景色
"attr"セルの屬性。個々のフラグを取得するには |term_getattr()| を使ふ
"width"セルの幅: 1 もしくは 2

|method| としても使用できます:

GetBufnr()->term_scrape(row)
term_sendkeys({buf}, {keys})

ターミナル {buf} にキーストローク {keys} を送る。{buf} は |term_getsize()| として使はれる。

{keys} はキーの連續として解釋される。例へば、"\<c-x>" は CTRL-X を意味する。

|method| としても使用できます:

GetBufnr()->term_sendkeys(keys)
term_setapi({buf}, {expr})

端末 {buf} 內で |terminal-api| 機能に使用する函數名のプリフィックスを設定します。例:

:call term_setapi(buf, "Myapi_")
:call term_setapi(buf, "")

デフォルトは "Tapi_" です。{expr} が空の文字列の場合、{buf} の |terminal-api| 機能は使用できません。

term_setansicolors({buf}, {colors})

ターミナル {buf} で使はれてゐる ANSI カラーパレットを設定する。{colors} は 正しい 16 ANSI カラーか、|highlight-guifg| で認められてゐるやうな 16 進數のカラーコードのリストでなければならない。|term_getansicolors()| と |g:terminal_ansi_colors| も參照。

カラーは通常、以下のとほり:

0black
1dark red
2dark green
3brown
4dark blue
5dark magenta
6dark cyan
7light grey
8dark grey
9red
10green
11yellow
12blue
13magenta
14cyan
15white

これらのカラーは ’termguicolors’ が設定されてゐるときに GUI と端末で使はれる。GUI カラーが使はれてゐないとき (GUI モードもしくは ’termguicolors’ が設定されてゐる)、端末ウィンドウは常に、端末の根柢にある 16 ANSI カラーを使ふ。

|method| としても使用できます:

GetBufnr()->term_setansicolors(colors)

{Vim が GUI が有效のとき、かつ/または |+termguicolors| 機能付きでコンパイルされたときのみ有效}

term_setkill({buf}, {how})

Vim を終了もしくは他の方法で端末ウィンドウを閉ぢようとしてゐるとき、{how} は端末のジョブを停止することができるかどうか明確にする。

{how} が空 (既定) のとき、ジョブは停止されず、終了しようとしたことは |E947| の結果を生じる。さもなければ、{how} はジョブに送られたシグナルが何であるかを明示する。値については |job_stop()| を參照。

シグナルが送られたあと、Vim はジョブが實際に停止するのを確認するまでの時閒 (秒) 待機するだらう。

|method| としても使用できます:

GetBufnr()->term_setkill(how)
term_setrestore({buf}, {command})

端末內のジョブを復歸するために、セッションファイル內に書き込むコマンドを設定する。セッションファイルに書き込まれる行は:

terminal ++curwin ++cols=%d ++rows=%d {command}

コマンドが適切にエスケープされてゐるか確認すること。

’shell’ を實行するには 空 {command} を使ふ。

このウィンドウを復歸しないやうにするには "NONE" を使ふ。

|method| としても使用できます:

GetBufnr()->term_setrestore(command)
term_setsize({buf}, {rows}, {cols})

ターミナル {buf} のサイズを設定する。もしも可能ならターミナルを含んでゐるウィンドウのサイズも調整されるだらう。もしも {rows} や {cols} がゼロかマイナスならば、サイズは變更されない。

{buf} は端末ウィンドウのバッファ番號でなければならない。現在のバッファに適用するには空文字列を使ふ。もしもバッファが存在しないか端末ウィンドウでなければ、エラーになる。

|method| としても使用できます:

GetBufnr()->term_setsize(rows, cols)
term_start({cmd} [, {options}])

ターミナルウィンドウを開きその中で {cmd} を起動する。

{cmd} は文字列もしくは |job_start()| のやうなリストになりうる。文字列 "NONE" はジョブを開始することなくターミナルウィンドウを開くのに使はれる。ターミナルの pty は gdb のやうなコマンドによつて使はれる。

ターミナルウィンドウのバッファ番號を返す。{cmd} が實行できないときは、ウィンドウを開いてエラーメッセジを表示する。

ウィンドウを開くのに失敗すると 0 が返される。

{options} は |job_start()| で使はれるものと似てゐる。|job-options| を參照。しかしながら、すべてのオプションが使はれるわけではない。次のものがサポートされてゐる: すべてのタイムアウトオプション

"stoponexit", "cwd", "env"
"callback", "out_cb", "err_cb", "exit_cb", "close_cb"
"in_io", "in_top", "in_bot", "in_name", "in_buf"
"out_io", "out_name", "out_buf", "out_modifiable", "out_msg"
"err_io", "err_name", "err_buf", "err_modifiable", "err_msg"

少なくとも標準入力が 1 つであるが、標準出力か標準エラーはターミナルに接續されてゐなければならない。I/O がターミナルに接續されてゐるときは、その部分のコールバック函數は使はれない。

特別なオプションがある:

"term_name"バッファ名に使ふ名前。コマンド名の代はり
"term_rows"ターミナルで使ふ高さ。’termwinsize’ の代はり
"term_cols"ターミナルで使ふ幅。’termwinsize’ の代はり
"vertical"ウィンドウを垂直に分割する。

Note:
その他のウィンドウ位置は |:belowright| のやうなコマンド修飾子によつて定義されうることに注意。

"curwin"カレントウィンドウを使ふ。ウィンドウは分割しない。カレントバッファを抛棄 |abandon| できなければ失敗する
"hidden"ウィンドウを開かない
"norestore"セッションファイルのためにターミナルウィンドウを追加しない
"term_kill"端末ウィンドウを閉ぢようとしたときにすること。|term_setkill()| を參照
"term_finish"ジョブが終了したときの處理:
"close":すべてウィンドウを閉ぢる
"open":必要ならばウィンドウを開く

Note:
"open" は中斷できることに注意。

|term++close| と |term++open| を參照。

"term_opencmd""term_finish" のために "open" が使はれるとき、ウィンドウを開くためのコマンド。バッファ番號の先に "%d" がなければならない。例へば "10split|buffer %d"。これが指定されてゐなければ、"botright sbuf %d" が使はれる。
"eof_chars"ターミナルに書き込まれるすべてのバッファ行のあとに送られるテキスト。これが設定されてゐないとき、MS-Windows では CTRL-D が使はれます。Python では CTRL-Z か "exit()" が使はれます。シェルでは "exit" が使はれます。CR は常に付加されます。
"ansi_colors"16 ANSI カラーの名前か GUI カラーモードで使はれてゐる ANSI パレットで定義されてゐる 16 進數のカラーコードのリスト。|g:terminal_ansi_colors| を參照してください。
"tty_type"(MS-Windows のみ): 使用する pty を明示します。値については ’termwintype’ を參照してください。
"term_api"|terminal-api| 機能の函數名プリフィックス。|term_setapi()| を參照してください。

|method| としても使用できます:

GetCommand()->term_start()
term_wait({buf} [, {time}])

處理する {buf} の更新を待つ。

{buf} は |term_getsize()| として使はれる。

{time} はアップデートまでのミリ秒。設定されてゐなければ 10 ミリ秒が使はれる。

|method| としても使用できます:

GetBufnr()->term_wait()

3. 端末通信

端末內で實行中のジョブと通信するには、いくつかの方法があります:

Vim からジョブへ: term_sendkeys()

これにより、端末內で實行中のジョブをリモート制禦することができます。これは一方向の機構です。ジョブは Vim に合圖することで表示を更新することができます。例へば、シェルが端末內で實行されてゐる場合、次の操作を實行できます:

call term_sendkeys(buf, "ls *.java\<CR>")

これは、キーを受け取つたときに正しいことをする適切な狀態になるやうなジョブを必要とします。上記の例では、シェルはコマンドの入力を待つ必要があります。

この目的のために作成されたジョブでは、JSON API エスケープシーケンスを別の方向で使用できます。例:

call term_sendkeys(buf, "\<Esc>]51;["response"]\x07")

ジョブから Vim へ: JSON API

ジョブは特殊なエスケープシーケンスを使用して JSON を Vim に送ることができます。JSON は Vim が理解できるコマンドをエンコードします。そのやうなメッセージの例:

<Esc>]51;["drop", "README.md"]<07>

本體は常にリストになつてをり、終はりを見つけやすいです: ‘]<07>’。‘<Esc>]51;msg<07>’ シーケエンスは "Emacs shell" のために xterm によつて豫約されてゐます。私たちがここでやつてゐることに似てゐます。

現在サポートされてゐるコマンド:

call {funcname} {argument}

ユーザー定義函數を {argument} で呼び出します。函數は 2 つの引數で呼び出されます: 端末のバッファ番號とデコードされた JSON 引數 {argument} です。

デフォルトでは函數名は端末 API 用に意圖されてゐない函數を誤つて呼び出すのを避けるため、"Tapi_" で始まる必要があります。これは、|term_setapi()| で變更できます。

ユーザー函數は引數の正常性チェックをする必要があります。 函數は |term_sendkeys()| を使つて返信を送り返すことができます。

JSON での例:

["call", "Tapi_Impression", ["play", 14]]

次のやうに定義された函數を呼び出します:

function Tapi_Impression(bufnum, arglist)
  if len(a:arglist) == 2
    echomsg "impression " . a:arglist[0]
    echomsg "count " . a:arglist[1]
  endif
endfunc

:echo‘ からの出力は再描畫によつて消去されかもしれません。‘:echomsg‘ を使ひ、‘:messages‘ でそれを見ることができます。

drop {filename} [options]

Vim に ‘:drop‘ コマンドのやうにファイルを開かせます。もし、{filename} が既にウィンドウで開かれてゐたら、そのウィンドウに切り替へます。それ以外の場合は、{filename} を編輯するための新しいウィンドウを開きます。

Note:
ジョブと Vim の兩方がカレントディレクトリを變更する可能性があるので、フルパスを使用することをお勸めします。

[options] は新しくウィンドウを開いた時にだけ使はれます。與へる場合、それは辭書でなければなりません。|++opt| と同樣に、これらのエントリは認識されます:

"ff"ファイルフォーマット: "dos", "mac" もしくは "unix"
"fileformat"同上
"enc"fileencoding’ を上書きします
"encoding"同上
"bin"binary’ を設定します
"binary"同上
"nobin"binary’ をリセットします
"nobinary"同上
"bad"不正な文字のための振る舞ひを指定します。|++bad| を參照

JSON での例:

["drop", "path/file.txt", {"ff": "dos"}]

Vim にこのエスケープシーケエンスを送信させるトリック:

exe "set t_ts=\<Esc>]51; t_fs=\x07"
let &titlestring = '["call","Tapi_TryThis",["hello",123]]'
redraw
set t_ts& t_fs&

論理的根據: コマンドや式を許可しないのはなぜですか?セキュリティ上の問題が生じる可能性があるためです。

クライアントサーバー機能を使ふ

これは v:servername が空ではない場合にのみ機能します。必要に應じて、端末を開く前に次のやうに設定することができます:

call remote_startserver('vim-server')

$VIM_SERVERNAME はサーバー名を渡すために端末內に設定されます。

ジョブでは、次のやうなことをおこなふことができます:

vim --servername $VIM_SERVERNAME --remote +123 some_file.c

これによりファイル "some_file.c" が開き、123 行目にカーソルが置かれます。

4. リモートテスト

Vim のほとんどのテストは Vim のなかでスクリプトを實行してゐます。テスト對象のコードと干涉してしまふやうな、幾つかのテストではこれは機能しません。これを避けるために端末ウィンドウ內でさらに Vim を實行してゐます。そのテストではキーストロークを端末に送信し、その結果として端末畫面の狀態が變はるのを檢査します。

函數

|term_sendkeys()|端末にキーストロークを送信する (tmap の影響を受けない)
|term_wait()|端末畫面が更新されるのを待つ
|term_scrape()|端末畫面の內容を檢査する

5. 畫面ダンプの差分

場合によつては、Vim が正しい文字を畫面に表示するかどうかテストするのは面倒かもしれません。例へば、構文の强調表示。これを簡單にするために、端末の畫面ダンプを取つてそれを豫想される畫面ダンプと比較することが可能です。

Vim はウィンドウのサイズ、テキスト、色、その他の屬性を表示します。 Vim の畫面サイズ、フォント、その他のプロパティは關係ありません。したがつて、この機構はシステム閒で移植可能です。從來のスクリーンショットでは、フォントサイズやフォントファミリーなど、すべての違ひが反映されます。

Vim の畫面ダンプテストを書く

例については、src/testdir/test_syntax.vim の Test_syntax_c() 函數を參照してください。主要な部分は:

初めてこれを行ふときにはスクリーンダンプはまだありません。空のファイルを作成します。例:

touch src/testdir/dumps/Test_function_name_01.dump

テストが失敗したら、參照ダンプと失敗したダンプを比較するコマンドを提供します。例:

call term_dumpdiff("Test_func.dump.failed", "dumps/Test_func.dump")

カレントディレクトリを src/testdir に設定して、Vim でこのコマンドを使用します。テストに滿足したら、參照の代はりに失敗したダンプを移動します:

:!mv Test_func.dump.failed dumps/Test_func.dump

畫面ダンプを作成する

畫面ダンプを作成するには、端末で Vim (または他のプログラム) を實行し、目的の狀態を表示させます。その後、|term_dumpwrite()| 函數を使用して畫面ダンプファイルを作成します。例:

:call term_dumpwrite(77, "mysyntax.dump")

この "77" は端末のバッファ番號です。それを見るためには ‘:ls!‘ を使用してください。

|term_dumpload()| で畫面ダンプを見ることができます:

:call term_dumpload("mysyntax.dump")

Vim がまつたく同じ畫面を表示してゐることを確認するには、まつたく同じ方法で Vim を再度實行し、目的の狀態を表示します。次に、別のファイル名を使用して畫面ダンプを再度作成します:

:call term_dumpwrite(88, "test.dump")

ファイルがまつたく同じものであることを主張するには |assert_equalfile()| を使ひます:

call assert_equalfile("mysyntax.dump", "test.dump")

違ひがある場合、v:errors はエラーメッセージを含みます。

畫面ダンプを比較する

|assert_equalfile()| は、何が違ふのかを簡單に見分けることはできません。問題を見つけるには、|term_dumpdiff()| を使用します:

call term_dumpdiff("mysyntax.dump", "test.dump")

これで 3 つの部分からなるウィンドウが開きます:

  1. 1 番目のダンプの內容
  2. 1 番目と 2 番目のダンプの差分
  3. 2 番目のダンプの內容

通常、2 番目の部分で何が違ふかを見ることができます。1 番目または 2 番目ダンプの位置に關聯付けるには ’ruler’ を使用します。文字の意味は次のやうになつてゐる:

X文字の差異
>1 番目にあつて 2 番目にはないカーソル
<2 番目にあつて 1 番目にはないカーソル
w文字幅の差異 (シングル對ダブル幅)
f前景色の差異
b背景色の差異
a特徵の差異 (太字、下線、反轉など)
?どちらにもない文字
+1 番目にはない文字
-2 番目にはない文字

あるいは、"s" を押して、1 番目と 2 番目のダンプを入れ替へます。これを何度か實行して、テキストの文脈における相違を見つけ出すことができます。

6. デバッグ

Vim のウィンドウでソースコードを表示しながらプログラムを gdb でデバッグするのに、端末デバッグプラグインが利用できます。これは Vim の中だけで完結するので、SSH 接續が 1 つあればリモートで機能します。

|+terminal| 機能がない場合、プラグインは可能であれば "prompt" バッファタイプを使用します。實行中のプログラムは、新しく開かれた端末ウィンドウを使用します。詳細は |termdebug-prompt| を參照してください。

はじめに

以下のコマンドでプラグインを讀み込みます:

packadd termdebug

デバッグを開始するには ‘:TermDebug‘ または ‘:TermdebugCommand‘ に續けてコマンド名を入力します。例:

:TermDebug vim

これにより 2 つのウィンドウが開きます:

gdb のウィンドウ"gdb vim" を實行した端末ウィンドウ。ここでは直接 gdb とやりとりできる。バッファ名は "!gdb"
プログラムのウィンドウ實行したプログラムの端末ウィンドウ。gdb 內で "run" をしてプログラムの I/O が發生するとこのウィンドウに反映される。その內容は gdb の制禦下にない。バッファ名は "gdb program"

現在のウィンドウはソースコードを表示するのに使はれます。gdb が一時停止した際に、可能ならばその場所が表示されます。現在の位置を示すためにハイライトグループ debugPC を使つてサインが利用されます。

現在のウィンドウの內容が變更されると、現在の gdb の位置を表示するために別のウィンドウが開きます。‘:Winbar‘ を使つてウィンドウツールバーを追加することができます。

實行中のプログラムを操作するにはその端末にフォーカスを合はせます。以降の操作は普通の端末ウィンドウと同樣です。

デバッガの終了は、通常は gdb のウィンドウで "quit" とタイプすると、開いてゐる 2 つのウィンドウが閉ぢられます。

一度にアクティブにできるデバッガは 1 つだけです。 デバッグ中のコマンドに特定のコマンドを與へる場合は、‘:TermdebugCommand‘ コマンドの後にコマンド名と追加パラメータを使用できます。

:TermdebugCommand vim --clean -c ':set nu'

:Termdebug‘ と ‘:TermdebugCommand‘ はオプションの "!" をサポートしてゐます。gdb ウィンドウで一時停止せずにコマンドをすぐに開始します (そしてカーソルはデバッグされたウィンドウに表示されます) 例へば:

:TermdebugCommand! vim --clean

すでに實行中の實行可能ファイルに gdb をアタッチするか、コアファイルを使用するには、追加の引數を渡します。例:

:Termdebug vim core
:Termdebug vim 98343

引數が指定されてゐない場合、gdb ウィンドウが表示されます。このウィンドウでは、例へば gdb の ‘file‘ コマンドを使つて、どのコマンドを實行するか指定する必要があります。

セッション例

Vim の "src" ディレクトリを起動して、Vim をビルドします:

% make

デバッグシンボルが存在することを確認します。通常は、$CFLAGS に "-g" が含まれることを意味します。

Vim を起動します:

% ./vim

termdebug プラグインを讀み込んで、Vim のデバッグを開始します:

:packadd termdebug
:Termdebug vim

これで、3 つのウィンドウが表示されます:

CTRL-W CTRL-W またはマウスを使用して、ウィンドウ閒でフォーカスを移動できます。gdbウィンドウにフォーカスを當てて、次のやうに入力します:

break ex_help
run

Vim は programウィンドウで實行を開始します。そこにフォーカスを置いて入力します:

:help gui

Gdb は ex_help ブレークポイントまで實行します。source ウィンドウに ex_cmds.c ファイルが表示されます。ブレークポイントが設定されてゐる目印欄に赤い "1 " のマーカーが表示されます。デバッガが停止した行が强調表示されます。今すぐプログラムを進めることができます。マウスを使ひませう: ウィンドウツールバーの "Next" ボタンをクリックしてください。デバッガがソースコードの行を實行すると、强調表示されます。

for ループが强調表示されるまで、"Next" を數回クリックします。カーソルを "eap->arg" の最後に置き、ツールバーの "Eval" をクリックします。これが表示されます:

"eap->arg": 0x555555e68855 "gui"

かうすることで、ローカル變數の値を調べることができます。また、gdb ウィンドウにフォーカスを當てて、"print" コマンドを使用することもできます。例:

print *eap

マウスポインタの動きがうまくいつてゐれば、マウスが gdb で評價できるテキストの上に置かれたときに Vim はバルーンを表示します。

次に、source ウィンドウに戾り、for ループの後の最初の行にカーソルを置いて、次のやうに入力します:

:Break

新しいブレークポイントを示す ">>" マーカーが表示されます。ツールバーの "Cont" をクリックして、コードをブレークポイントまで實行させます。

より高度なコマンドを gdb ウィンドウに入力することができます。たとへば、次のやうに入力します:

watch curbuf

ツールバーの "Cont" をクリックします (または、gdb ウィンドウで "cont" と入力します)。do_ecmd() にある "curbuf" の値が變更されるまで、實行が繼續されます。このウォッチポイントを再度削除するには、gdb ウィンドウで次のやうに入力します:

delete 3

gdb ウィンドウに次のやうに入力すると、スタックが表示されます:

where

スタックフレームを移動します。例へば:

frame 3

source ウィンドウには、より深いレベルに呼び出された時點のコードが表示されます。

コードをステップ實行する

gdb ウィンドウにフォーカスを移しコマンドを入力します。一般的なものは以下:

ソースコードを表示してゐるウィンドウで、これらのコマンドを gdb の制禦に使用できます:

‘:Run‘ [args][args] または以前の引數でプログラムを實行します
‘:Arguments‘ {args}次の ‘:Run‘ のために引數を設定します
:Breakカーソル位置にブレークポイントを設定する
:Break {position}指定位置にブレークポイントを設定する
:Clearカーソル位置ののブレークポイントを削除する
:Stepgdb の "step" コマンドを實行する
:Overgdb の "next" コマンドを實行する (‘:Next‘ だと Vim のコマンドとかぶるので)
:Finishgdb の "finish" コマンドを實行する
:Continuegdb の "continue" コマンドを實行する
:Stopプログラムを中斷する

mouse’ が設定されてゐる場合、プラグインはこれらのエントリを持つウィンドウツールバーを追加します:

Step          `:Step`
Next          `:Over`
Finish        `:Finish`
Cont          `:Continue`
Stop          `:Stop`
Eval          `:Evaluate`

この方法で、マウスを使用して最も一般的なコマンドを實行できます。マウスのクリックを有效にするには、’mouse’ オプションを設定する必要があります。 開いてゐる他のウィンドウにウィンドウツールバーを追加することができます:

:Winbar

gdb がソース行で停止し、現在ソースコードを表示してゐるウィンドウがない場合、ソースコード用の新しいウィンドウが作成されます。これは、ソースコードウィンドウのバッファが變更され、破毀できない場合でも發生します。

Gdb は各ブレークポイントに番號を與へます。Vim 內では、赤い背景で、目印欄に表示されます。次の gdb コマンドを使用できます。

また、カーソルがブレークポイントの行にある場合は ‘:Clear‘ コマンドを使ふことができます。または、右クリックのメニュー項目 "Clear breakpoint" を使用することもできます。

變數を檢査する

‘:Evaluate‘カーソルの下の式を評價する
‘K‘上に同じ
‘:Evaluate‘ {expr}{expr} を評價する
‘:’<,’>Evaluate‘ビジュアル選擇したテキストを評價する

これは gdb ウィンドウで "print" コマンドを使つたのに相當します。‘:Evaluate‘ は ‘:Ev‘ に短縮できます。

その他のコマンド

:Gdbgdb ウィンドウに移動する
:Programデバッグ中のプログラムウィンドウに移動する
:Sourceソースコードのウィンドウに移動する。ウィンドウがなければ作成する

プロンプトモード

|+terminal| 機能がサポートされてゐない場合や MS-Windows 上の場合、gdb は ’buftype’ が "prompt" に設定されたバッファで動作します。これは少し違つた働きをします:

プロンプトモードは、|+terminal| 機能が有效な場合でも使用できます:

let g:termdebug_use_prompt = 1

通信

Vim が gdb と通信するために他に隱されたバッファを利用します。バッファ名は "gdb communicate" です。このバッファは消さないでください。消してしまふとデバッガが動作しなくなつてしまふでせう。

gdb は奇妙な動作をしてゐますが、プラグインはその問題を囘避するために最善を盡くしてゐます。例へば、gdb ウィンドウで "continue" と入力した後に、CTRL-C を使用して實行中のプログラムを中斷することができます。しかし、MI コマンド "-exec-continue" を使用した後、CTRL-C を押しても中斷しません。したがつて、通信チャネルを使用する代はりに、‘:Continue‘ コマンドに "continue" が使用されてゐることがわかります。

カスタマイズ

GDB コマンド

gdb コマンド以外のデバッガを使ふには、 ‘:Termdebug‘ を實行する前に "termdebugger" 變數を變更してください:

let termdebugger = "mygdb"

gdb と完全互換のあるデバッガのみが使へます。Vim は gdb の操作に GDB/MI インターフェイスを利用してゐます。"new-ui" コマンドは gdb バージョン 7.12 以降が必要です。このエラーが發生した場合:

Undefined command: "new-ui". Try "help".

あなたの gdb が古すぎます。

カラー

サインの色は以下のハイライトグループで調整できます:

debugPC現在の位置
debugBreakpointブレークポイント

background’ オプションが "light" の時のデフォルトは以下のとほりです:

hi debugPC term=reverse ctermbg=lightblue guibg=lightblue
hi debugBreakpoint term=reverse ctermbg=red guibg=red

background’ オプションが "dark" の時は以下のとほりです:

hi debugPC term=reverse ctermbg=darkblue guibg=darkblue
hi debugBreakpoint term=reverse ctermbg=red guibg=red

ショートカット

TermDebugSendCommand() 函數を使用して、任意のウィンドウで動作する gdb を制禦する獨自のショートカット (マッピング) を定義できます。例:

map ,w :call TermDebugSendCommand('where')<CR>

引數は gdb コマンドです。

ポップアップメニュー

デフォルトで Termdebug プラグインは ’mousemodel’ を "popup_setpos" に設定し、これらのエントリをポップアップメニューに追加します:

Set breakpoint          `:Break`
Clear breakpoint        `:Clear`
Evaluate                `:Evaluate`

あなたがこれを望まないならば、それを無效にしてください:

let g:termdebug_popup = 0

Vim のウィンドウ幅

デバッグを開始した際に Vim のウィンドウ幅を變更し、垂直分割を利用するには次のやうに設定します:

let g:termdebug_wide = 163

これは ‘:Termdebug‘ を實行した際に &columns を 163 に設定します。元の値はデバッガが終了する際に復元されます。

g:termdebug_wide が設定されてゐて、&columns がすでに g:termdebug_wide より大きい場合、&columns を變更せずに垂直分割が使用されます。&columns を變更せずに垂直分割を行ふには、1 に設定します。(端末が Vim によつてサイズ變更できない場合に便利です)


Up: 目次   [Index]