内蔵端末

VS Code にはハイスペックな端末が組み込まれている。シェルの対話的操作だけでなく、エラー各種を検出したり、エラー箇所にジャンプしたりするなどの便利な機能を用意している。

Attention

Visual Studio Code 利用ノート 冒頭の前提条件に留意すること。

端末を表示する

すでに端末が VS Code メインウィンドウに作成されているならば、次の方法のいずれかで端末を所定の場所(通常はエディター床下)に出したり消したりする。ない場合には VS Code が端末画面を新規に生成する。

  • コマンド View: Toggle Terminal を実行する

  • キーバインド Ctrl + @ を押す

端末画面を新しく生成する必要があれば、次の方法のいずれかでそれを実現する:

  • コマンド Terminal: Create New Terminal を実行する

  • メニュー項目 Terminal ‣ New Terminal を選択する

  • キーバインド Ctrl + Shift + @ を押す

複数シェルに対応

本節の執筆を放棄する。WSL だとこの機能が調査しにくいことと、どうせ Bash しか利用する気がない。

端末管理

TERMINAL ヘッダーバーのずっと右側にある端末画面アイコンをクリックするとコンテキストメニューが開く。一部の項目を先に記す:

Change Color…

端末画面アイコンの色を ANSI 色から選択し、変更する。あるいは既定の色に戻す。

Change Icon…

端末画面アイコンの図像自体をプリセットから選択し、変更する。

Rename

端末画面アイコンタブのラベルテキストを指定する。

端末インスタンスをさらに追加するには、次のいずれかを行う。この操作により、その端末に関連するタブリストに別のエントリーが生成する:

  • 先述の端末画面の新規作成方法のいずれかを実行する

  • タブ TERMINAL のずっと右側にあるアイコン + をクリックする

  • 端末のドロップダウンからプロファイルを何か選択する

逆に、端末インスタンスを削除するには、次のいずれかを行う:

  • タブ TERMINAL のずっと右側にあるゴミ箱アイコンをクリックする

  • タブをアクティブにして Delete を押す

  • コマンド Terminal: Kill the Active Terminal Instance を実行する

  • タブのコンテキストメニューから Kill Terminal を選択する

利用者ノート

端末のセッションを終了すると端末インスタンスが削除される。

端末グループ間の移動をショートカットキーで果たせる。キーボードから手を離したくない:

キーバインド

コマンド

Ctrl + PageDown

Terminal: Focus Next Terminal Group

Ctrl + PageUp

Terminal: Focus Previous Terminal Group

端末がある種の状態になると、端末画面タブの右側にアイコンが表示される。マウスホバーで状態情報を読める。

画面を分割

端末を横に並べることができるものを端末グループと呼んでいる。これを生成するには端末を分割する:

  • 端末分割アイコンをクリックする

  • 端末画面タブのコンテキストメニューを表示して Split を選択する

  • Alt を押しながら次のいずれかをする:

    • 端末画面タブをクリックする

    • アイコン + をクリックする

    • 端末パネルにある唯一のタブをクリックする

  • Ctrl + Shift + 5 を押す

分割して生じる端末の初期ディレクトリーは設定 terminal.integrated.splitCwd による。

端末グループ内をショートカットキーでも移動できる。キーボードから手を離したくない:

キーバインド

コマンド

Alt +

Terminal: Focus Next Terminal in Terminal Group

Alt +

Terminal: Focus Previous Terminal in Terminal Group

端末タブはドラッグ&ドロップ可能だ。次の場合があり得る:

  • 同一グループ内でタブを並び替える。

  • グループをまたいで端末画面を移動させる。

端末をそれの独自グループに移動することもできる。それには次のいずれかを行う:

  • コマンド Terminal: Unsplit Terminal を直接実行する

  • 端末タブのコンテキストメニューを表示して Unsplit Terminal を選択する

エディター区域に端末画面を表示する

エディター区域にも端末画面を生成したり移動したりすることが可能だ。次のような方法がある:

  • コマンド Terminal: Create New Terminal in Editor Area を直接実行する

  • コマンド Terminal: Create New Terminal in Editor Area to the Side を直接実行する

  • TERMINAL ビューにある端末タブをエディター区域にドラッグする

設定項目 terminal.integrated.defaultLocation を変えることで、既定の端末画面位置をビューかエディター区域のいずれかに指定することが可能だ。

スクロール

本稿では端末画面内の内容をバッファーと呼ぶ。

スクロール表示において、底部から前にあるバッファー部分をスクロールバックと呼ぶ。スクロールバックの保持量は設定項目 terminal.integrated.scrollback の値で指定する。既定値は 1000 行だ。

スクロールのショートカットキーは次のとおり。Windows Terminal と同じとは限らないので注意を要する:

キーバインド

操作

Ctrl + Alt + PageUp

上に一行だけスクロールする

Ctrl + Alt + PageDown

下に一行だけスクロールする

Shift + PageUp

上に一ページだけスクロールする

Shift + PageDown

下に一ページだけスクロールする

Ctrl + Home

バッファーの先頭にスクロールする

Ctrl + End

バッファーの末尾にスクロールする

Ctrl +

前回のコマンドにスクロールする

Ctrl +

前回のコマンドにスクロールする

設定項目 terminal.integrated.smoothScrolling の値により、スクロールをアニメーションするように描画させることが可能になる。

利用者ノート

繰り返すが、Windows Terminal とキーバインドが異なる。混乱しないように注意する。

コピー&ペースト

WSL であってもシェルが Bash であっても、端末画面上のテキストと Windows クリップボード間のやり取りでは、Windows 標準のショートカットキーと同じものを使う。

設定項目 terminal.integrated.copyOnSelection が有効な場合、テキスト選択時にその内容がクリップボードに自動的にコピーされる。

複数行テキストを端末画面に貼り付けようとすると、既定では警告が発生する。これを設定項目 terminal.integrated.enableMultiLinePasteWarning の値を変えることで無効化可能だ。これはシェルが Bracketed-paste モードを対応していない場合にしか行われない。

マウス操作

右クリック

右クリックイベントの処理内容を設定項目 terminal.integrated.rightClickBehavior に明示的に指定するべきだ。次の選択肢が有効だ:

処理

default

端末画面用コンテキストメニューを表示する。

copyPaste

選択があればクリップボードにコピーし、なければクリップボードの中身を貼り付ける。

paste

クリップボードの中身を貼り付ける。

selectWord

キャレット位置の単語を選択してコンテキストメニューを表示する。

nothing

何もせず、マウスイベントを端末に送る。

キャレットを移動する

Alt を押しながら左クリックすると、キャレットをマウス位置に移動する。これは、矢印キーストロークを模倣することで実現しているのだが、シェルやプログラムによっては動作しない可能性がある。設定項目 terminal.integrated.altClickMovesCursor で無効にすることもできる。

利用者ノート

この操作は現在のプロンプト範囲内でしか作用しないものの、複数行編集時に便利だ。

検索

端末画面にはエディターとよく似た検索機能がある。コマンド Terminal: Focus Find を実行すると、見慣れた検索入力欄が端末画面の隅にポップアップされる。

いったん検索すると、次のショートカットキーでフォーカスがマッチ間を移動する:

キーバインド

操作

Enter

前のマッチへ移動

Shift + Enter

次のマッチへ移動

利用者ノート

既定のキーバインドは違和感がある。入れ替えるといいかもしれない。

エディターのテキストをコマンドとして実行する

コマンド Terminal: Run Selected Text in Active Terminal を実行すると、エディター上の選択テキストがある場合はその内容全体を、ない場合はキャレットがある行全体をコマンドとして端末で実行する。

コマンド Terminal: Run Active File Active Terminal を実行すると、現在エディターのバッファー全体をコマンドとして端末で実行する。

利用者ノート

Emacsshell-command のようなものだ。

最大化表示

エディター区域を一時的に非表示にすることにより、Terminal ビューというよりも、それを擁する Panel 全体を最大化表示することができる。操作例:

  • Panel 右上の Maximize Panel Size アイコン(ゴミ箱の右隣)をクリックする

  • コマンド View: Toggle Maximized Panel を直接実行する

利用者ノート

端末領域を縦長にしたいだけなら、前述のエディター区域にドラッグする選択肢も検討すること。

全選択

端末バッファー全体を選択するには、コマンド Terminal: Select All を直接実行するのが最も無難だ。

作業ディレクトリー

端末を新規作成すると、通常はワークスペースを開いたディレクトリーを作業ディレクトリーとする。この挙動を変えるには、設定項目 terminal.integrated.cwd の値をカスタマイズする。

分割操作により生じる子端末は、親端末が開始したディレクトリーで開始する。この挙動は設定項目 terminal.integrated.splitCwd を使用して変更できる。

画面サイズ固定

コマンド Terminal: Set Fixed Dimensions を実行すると、列と行数を変更することができる。

端末画面タブを右クリックしてコンテキストメニューから Toggle Size to Content Width を選択することで、端末の桁数を最大の折り返し行に変更することもできる。

基本的に固定表示モードはスクロールバーが目障りで推奨されていない。

プロファイル

設定項目 terminal.integrated.profiles.xxxx について記す(ここで xxxx は実際には OS 名称が入る)。これは、実行パス、引数、およびその他のカスタマイズから構成される OS 固有のシェル設定だ。既定ではVS Code が自動的に検出したいくつかの項目で構成されている。これをユーザーがカスタマイズしたり、追加したりすることが可能だ。

既定プロファイルを設定するにはコマンド Terminal: Select Default Profile を実行する。VS Code の画面上部にドロップダウンリストが表示されるので、そこから項目を選べばいい。

既定の端末ロファイルのシェルは、WSL では $SHELL, Windows では PowerShell となっている。VS Code はシステムにあるシェルのほとんどを自動的に検出し、ユーザーが既定シェルとして設定可能であるように用意する。

プロファイルを構成する

構成ファイル settings.jsonterminal.integrated.profiles.xxxx を編集することで端末プロファイルを定義する。

記法は VS Code 既定の settings.json の内容を表示して模倣すればよい。まずコマンド Preferences: Open Default Settings (JSON) を実行する。

  • WSL の場合は terminal.integrated.profiles.linux を、

  • Windows の場合は terminal.integrated.profiles.windows

それぞれ編集する。Defalut Settings で記されている設定項目プロファイルは、 User Settings に明記しなくてもマージされるのを利用して記述を省くといい。

プロファイルで使える引数は次のとおり:

overrideName

これを true にすると、端末画面タブのタイトルを静的なプロファイル名で固定する。

env

環境変数とその値を定義する写像。変数に null を設定すると環境変数は存在しないことになる。設定項目 terminal.integrated.env.xxxx を使用して、プロファイルすべてに対して設定する方法もある。

icon

アイコン ID を表す文字列。

color

アイコンに対するテーマ色 ID を表す文字列。

プロパティー path, args, env では変数解決が利用できる。

先ほど既定の端末プロファイルを指定する方法を述べたが、settings.json を手動で編集してもよい。設定項目 terminal.integrated.defaultProfile.xxxx に既存プロファイル名を割り当てる。

組み込みプロファイルを削除する

VS Code の settings.json で値がオブジェクトである項目は、既定値にユーザー定義値をマージしたものになる。このため、既定値を明示的に削除する方法が用意されている。ユーザー版 settings.json で VS Code が用意している端末プロファイルの値を null にすればよい。

{
  "terminal.integrated.profiles.windows": {
    "Git Bash": null
  }
}

タスク専用端末プロファイルを構成する

既定ではタスク・デバッグ機能は当然ながら既定の端末プロファイルを用いる。このような端末のシェルが重かったり、非標準的シェルであると不愉快だ。そういう場合、タスク・デバッグ機能専用端末プロファイルを設定する方法が用意されているので、それを利用する。

設定項目は terminal.integrated.automationProfile.xxxx だ。

VS Code の文書では既定で fish を使っている Mac ユーザーが sh シェルを設定する例が挙げられている。

Windows PowerShell

VS Code はモダンな PowerShell を自動検出しない。これをプロファイルとして手動で定義する。端末画面タブ用のアイコンはあるようだ。

{
    "terminal.integrated.profiles.windows": {
        "PowerShell": {
            "path": "${env:PROGRAMFILES}\\System32\\PowerShell\\7\\pwsh.exe",
            "args": [
               "-noexit",
               "-file",
               "${env:USERPROFILE}\\Documents\\PowerShell\\profile.ps1"
            ],
            "icon": "terminal-powershell"
        },
    }
}

WSL

VS Code は WSL のシェルを自動的に検出するが、ディストリビューションが多数インストールされている場合、一覧に大量に項目が出現して傍迷惑になることがある。 WSL プロファイルをより細かく制御するには、設定項目 terminal.integrated.useWslProfilesfalse に指定して自動検出を無効化するといい。

見栄え

VS Code 端末画面の視覚的特徴を大きくカスタマイズすることが可能だ。いつもと同じく、設定ファイル settings.json を編集すればよい。

フォント周り

端末に日本語を出力することが普通にあるため、フォント設定はたいせつだ。

terminal.integrated.fontFamily

CSS の font-family と同じ書式の文字列で端末画面のフォントファミリーを指定する。フォールバックをかなり細かく指定するのがコツだ。

terminal.integrated.fontSize

端末画面のテキストのフォントサイズを指定する。単位はポイントと思われる。

terminal.integrated.letterSpacing

文字間の追加的な水平方向の間隔をピクセル単位で設定する。

terminal.integrated.lineHeight

文字間の垂直方向の間隔を通常の行の高さの倍数で設定する。例えば 1.1 と指定すると、縦方向に 10% の間隔を追加する。

terminal.integrated.fontWeight

通常テキストの太さを文字列 normal, bold, または、1..1000 の値を指定する。

terminal.integrated.fontWeightBold

太字テキストの太さを上記項目と同様の方式で指定する。

Nerd Fonts

VS Code 端末は初期設定でも Powerline の一部を描画できる(後述)が、より多くの記号が必要な場合は、フォントファミリーの設定で Powerline フォントを設定する。 Powerline フォントは通常 for Powerline で終わる名前である。例:

{
    "editor.fontFamily": "'DejaVu Sans Mono for Powerline'"
}

Nerd Fonts も同じように動作し、通常 NF という接尾辞を持つ。例:

{
    "terminal.integrated.fontFamily": "'Hack NF'"
}

利用者ノート

Oh My Posh を利用しているのならば、 Windows Terminal で設定した値をそのまま適用するのが自然だ。

キャレットをカスタマイズする

端末上のキャレットをカスタマイズする設定項目がある。

terminal.integrated.cursorBlinking

端末にフォーカスがあるときにキャレットを点滅させるかどうか

terminal.integrated.cursorStyle

キャレットの形状を指定する。可能な値は次のいずれか: block, line, underline.

terminal.integrated.cursorWidth

上記 cursorStyleline に設定されている場合のマーカーの幅をピクセル単位で指定する。

利用者ノート

既定値がまともなのでこれらには触れなくていい。

端末画面タブをカスタマイズする

端末画面タブは端末が複数ある場合に TERMINAL ビューの右側に表示される。一つしかない場合はビューヘッダーにアクティブな端末が表示される。

VS Code の端末画面タブに関する初期設定は、横方向の空間を節約するとするものだ。

terminal.integrated.tabs.enabled

端末画面タブを使うかどうか。無効にするとドロップダウンリストなど他の手段で複数ある端末を切り替えることになる。

terminal.integrated.tabs.hideCondition

端末画面タブを常に表示したい場合に限り never を指定すればいい。

terminal.integrated.tabs.location

端末画面タブを left または right のどちらに置くか。

terminal.integrated.tabs.showActiveTerminal

TERMINAL ビューヘッダーにアクティブな端末をいつ表示するか。取り得る値はつぎのどれか:

設定値

操作

always

常時

singleTerminal

端末が一つしかないとき

singleTerminalOrNarrow

端末が一つしかないとき、またはビューが狭いとき

never

表示しない

terminal.integrated.tabs.showActions

アクティブな端末のアクションをビューヘッダーにいつ表示するか。取り得る値は上記のどれか。

端末画面タブのラベルをカスタマイズする

各タブのラベルを決定する設定項目は次のとおり:

terminal.integrated.tabs.description

端末画面タブのラベル右側に現れるテキスト。変数 ${process} などを組み込むのが普通だ。

terminal.integrated.tabs.separator

ラベルとテキストの間を区切る文字列。

terminal.integrated.tabs.title

端末画面タブのラベル。

Windows Terminal など他の端末では、シェルが送信したエスケープシーケンスをラベルとして表示することが多い。VS Code でも同じことが可能だ:

{
    "terminal.integrated.tabs.title": "${sequence}"
}

端末画面アイコン

各端末には、端末プロファイルによって決定される関連アイコンがある。プロファイルで定義されていない場合に使用される既定のアイコンと色を、次の設定項目で与えることができる:

  • terminal.integrated.tabs.defaultIcon

  • terminal.integrated.tabs.defaultColor

アイコンは選択肢が大量にあるものの、色の方は terminal.ansiBlue など、地味な色しか指定できない。

端末の状態

端末の「状態」はタブの右側に表示されるアイコンで示されるものと考えていい。いくつかの状態はアニメーションする。これが邪魔な場合は設定項目 terminal.integrated.tabs.enableAnimationfalse にする。

ブザー

端末のブザーが鳴ると、黄色のベルアイコンが短く表示される。これを terminal.integrated.enableBell で無効にすることができ、継続時間は terminal.integrated.bellDuration で設定することができる。

端末画面の色

VS Code の端末は 24 ビット色を表示することができるが、プログラムは一般的に ANSI 色およびそれぞれの明るい変種を用いる。これらの ANSI 色はアクティブな色テーマが決定するものだが、設定項目 workbench.colorCustomizations でテーマとは独立して指定することも可能だ。

太字テキストが通常の ANSI 色を使用するか、明るい色の変種を使用するかは、設定 terminal.integrated.drawBoldTextInBrightColors で指定できる。

利用者ノート

後者が設定項目としては異色の特殊さで気になる。

最小コントラスト比

明暗テーマ、ANSI 色、シェルまたはプログラムの実行などの競合により、コントラストの問題がしばしば発生する。最小コントラスト比機能とは、4.5 : 1 のコントラスト比を満足するまで、テキスト前景色の輝度を増加または減少させることで、この種の輝度の問題を解決する機能をいう。

この機能の欠点は、テキスト色の彩度が低下することがあることだ。元の色を得るには、次の設定項目を調整する:

{
    "terminal.integrated.minimumContrastRatio": 1
}

GPU 高速化

VS Code の端末にはレンダラーが三種類ある。それぞれ特性が異なる。

WebGL Renderer

真の GPU 高速化。

Canvas Renderer

CanvasRenderingContext2D Web API を使用した GPU 高速化。 WebGL よりは遅く、DOM よりは速い。

DOM Renderer

かなり低速ではあるものの、互換性に優れた代替レンダラー。

既定で有効化されているのは WebGL レンダラー GPU 高速化だ。これにより、CPU が各フレームを描画する時間が大幅に短縮されるため、端末の動作が高速化し、高い FPS で表示できるようになる。

Linux 仮想マシン、WebGL 未対応ブラウザー、古いドライバーを搭載したマシンでは、 WebGL が正しく動作しない場合がある。

設定項目 terminal.integrated.gpuAcceleration の既定値である auto は、WebGL, 2D Canvas, DOM レンダラーを順次試し、問題を検出しない最初のものに決着する。

この検出がうまくいかず、手動での介入が必要になることがある。値を dom にすると通常、性能を犠牲にして、このような描画関連の問題を解決できる。

カスタムグリフ

GPU 高速化が有効な場合、フォントではなくカスタムレンダリングの手法で端末における一部の文字に対する表示が改善する。この恩恵を受けるものには、次の文字がある:

  • ボックス描画文字 U+2500..U+257F

  • ブロック要素 U+2580..U+259F

  • 電力線記号の部分集合 U+E0B0..U+E0B7

つまり、設定されたフォントはこれらの文字に対応する必要がなく、また、文字が pixel perfect でセル全体のサイズに伸張するように描画されることを意味する。

公式文書のイラストは行の高さと文字間隔をカスタム設定した場合のものなのだが、グリフの効能によりセル間に隙間がない。Powerline Symbols がきれいに描画されていることに注意。

この機能は ON にするべきだが、無効にする設定項目がある。

{
    "terminal.integrated.customGlyphs": false
}

プロンプトをカスタマイズする

シェルのほとんどは、端末のプロンプトを広範囲にカスタマイズすることができる。 VS Code の外側でシェルを設定することになる。通常は変数 $PS1 を変更したり、 $PROMPT_COMMAND を設定したり、プラグインをインストールしたりすることで実現する。

利用者ノート

私は Bash で Oh My Posh を利用している。そのカスタムプロンプトが VS Code 端末でも期待どおりに描画させることが直前に記した設定次第で可能だ。

高度な機能

VS Code の内蔵端末は Unicode やカスタムキーバインド、自動返信など、高度な機能と設定を用意している。使いたいものを記していく。

永続セッション

VS Code 端末は永続セッションを二とおりの方法で実現している。再接続と復活だ。

プロセス再接続

拡張機能の構成に変更が生じるなどしてメインウィンドウを再読み込みするとき、以前のプロセスに再接続し、その内容を復元する。

プロセス復活

VS Code を再起動するとき、端末の内容を復元し、元の環境を使用してプロセスを再開する。

これらの永続セッションは両方とも設定項目 terminal.integrated.enablePersistentSessionsfalse に設定すれば無効になる。復元されるスクロールバックの量は設定項目 terminal.integrated.persistentSessionScrollback で制御する。プロセス復活は設定項目 terminal.integrated.persistentSessionReviveProcess で個別に指定することができる。値は onExit, onExitAndWindowClose, never のいずれかだ。

利用者ノート

端末セッションの環境と履歴をどういうふうに、どれくらいの量を復旧するかという機能だ。永続機能は今のところ邪魔になるほうが多いのでオフにしている。しかし、上で言及された最後の項目の値によっては有用である気がしてきた。

メインウィンドウをまたいで移動する

端末を VS Code ウィンドウ間で移動することも可能だ。次の方法がある:

  • 端末画面タブをドラッグ&ドロップ

  • 次のコマンドをそれぞれのウィンドウから直接呼び出す:

    • コマンド Terminal: Detach Session

    • コマンド Terminal: Attach to Session

利用者ノート

そんなことをするくらいなら Windows Terminal で作業をすればいい。

キーバインド

VS Code 端末は組み込みアプリケーションであるため、VS Code 内で送られるキーバインドをなるべくすべてではなく、一部を途中で押さえ込む。

設定項目 terminal.integrated.commandsToSkipShell は、どのコマンドのキーバインドをシェルを常に飛び越え、代わりに VS Code のキーバインドシステムで処理させるかを決定する。初期設定では VS Code の操作に不可欠なコマンドの集合がハードコードされている。特定のコマンドを追加または削除することができる。

利用者ノート

Preferences: Open Default Settings (JSON) でこの項目のコメントを確認する。ここにないものを追加したい場合またはここにあるものを削除したい場合に限り値を設定することだ。

Chords

例えば Ctrl + kbd:`K Ctrl + C のように複数のキーバインドを素早く押すような操作を chord keybinding とか key chord という。

この種のキーバインドはシェルを常に飛ばすが、設定項目 terminal.integrated.allowChords で端末にとどまるようにできる。

Mnemonics

初期設定では、VS Code のメインメニューにアクセスするための Alt キー押しニーモニックは端末上で無効だ。設定項目 terminal.integrated.allowMnemonics でそれを有効にすることもできるが、シェルに行こうとするあらゆる Alt キーイベントを無効にすることでもある。

端末にキーバインド列を送る

コマンド workbench.action.terminal.sendSequence は、シェルによって特別に解釈されるエスケープシーケンスを含む特定のテキストシーケンスを端末に送信するのに用いられる。このコマンドは、矢印キー、Enter キー、キャレット移動などを送信できる。

Todo

本文サンプルの値が説明と一致しているか確認する。

確認ダイアログ

不要なユーザープロンプトを避けたいので、プロセス終了時には通常、警告ダイアログが出たりしない。万が一、警告が必要な場合は次の設定で構成する:

terminal.integrated.confirmOnExit

アクティブなデバッグセッションがある場合に、ウィンドウが閉じるときに確認するかどうかを指定する。

terminal.integrated.confirmOnKill

子プロセスがある場合に、ターミナルの終了を確認するかどうかを指定する。

terminal.integrated.showExitAlert

終了コードが 0 ではないときに “The terminal process terminated with exit code”という警告を表示するかどうかを指定する。

自動応答

自動応答機能については、次の設定例を見れば理解できるだろう:

{
    "terminal.integrated.autoReplies": {
        "Terminate batch job (Y/N)": "Y\r"
    }
}

初期設定では自動応答はまったく設定されていない。シェルへの入力はなるべくユーザーによる明示的な操作であるべきだからだ。

Unicode

VS Code 内蔵端末は Unicode と絵文字を両方対応している。

一部の Unicode シンボルは Unicode バージョンによって文字幅があいまいに変化する。現在、VS Code は Unicode バージョン 6 と 11 の文字幅に対応している。これは設定項目 terminal.integrated.unicodeVersion で構成可能だ。絵文字やその他の幅の広い文字が適切なスペースを取らない場合や、BackSpace の削除量がおかしい場合は、この設定を微調整するという限られた手段が残されている。

指定されたバージョンはシェルや OS で使用されている Unicode バージョンとなるべく合致させること(例えば 6 しか効かないのに 11 を指定してはいけない)。そうしないと描画上の問題が発生するおそれがある。シェル や OS の Unicode バージョンがフォントの実際の幅と一致しない場合があることに注意。

複数の文字からなる絵文字の一部に、肌色修飾子など、正しく表示されないものがある。

プロセス環境

端末内で動作するアプリケーションのプロセス環境は、さまざまな設定や拡張機能の影響を受ける。したがって VS Code 端末の出力が他のそれと異なって見える場合がある。

環境継承

VS Codeを開くと、シェル環境を獲得するためにログインシェル環境を起動する。シェル起動スクリプト $HOME/.bash_profile などにより開発者ツールを $PATH に追加することが多いのでこういう設計になっている。初期設定では、プロファイルのシェル引数によって、端末はこの環境を継承し、複数のプロファイルスクリプトが実行されている可能性があることを意味し、予期せぬ動作を引き起こす可能性がある。

環境継承は、macOS および Linux では terminal.integrated.inheritEnv の設定で無効にすることができる。

利用者ノート

WSL から Windows 版 VS Code を起動するときも Linux での事情が通用するだろう。

LANG との相互作用

端末での文字の表示方法を決定する環境変数 $LANG との特別なやり取りがある。この機能は設定項目 terminal.integrated.detectLocale で構成される:

on

$LANG に最も一般的に望ましい値をつねに設定する。選ばれる値は OS のロケールおよび UTF-8 エンコーディングに基づく。

auto

$LANG が正しく設定されていない場合、on の動作と同様に $LANG を設定する。

off

環境変数 $LANG を変えない。

拡張機能による環境への介入

拡張機能は端末環境に介入し、端末に対して何らかの統合を提供することができる。たとえば、VS Code 組み込みの Git 拡張は環境変数 GIT_ASKPASS を注入して、VS Code が Git リモートへの認証を処理できるようにする。

拡張機能が端末環境を変更した場合、既存の端末は安全であれば再起動され、そうでなければ端末の状態欄で警告される。変更に関する詳細な情報をマウスホバーで確認でき、ボタン Relaunch terminal が表示される。

ConPTY

設定項目 terminal.integrated.windowsEnableConpty を明示的に無効とする設定はなるべく避けること。

リモート開発

拡張 Remote Development により VS Code が遠隔機に接続されている場合に特有の話題。

リモート入力の反応時間を短縮する

ローカルエコーというリモートウィンドウの入力遅延の影響を緩和するための機能がある。リモートで結果が確認される前に、端末のキーストロークを淡色表示で書き込むというものだ。初期設定では、遅延が 30ms 以上であると検出されるとこの機能が発動する。このタイミングを設定項目 terminal.integrated.localEchoLatencyThreshold で指定できる。

端末でアクティブなプログラムに応じて、ローカルエコーは自身を動的に無効にする。この挙動を制御するのに設定項目 terminal.integrated.localEchoExcludePrograms を用いる。既定値は次の四プロセスだ:

  • vim

  • vi

  • nano

  • tmux

非常に動的なアプリケーションやシェル、あるいは入力中に画面を大量に印刷するようなアプリケーションでは、この機能を無効にするといい。

機能を完全に無効にするには設定項目 terminal.integrated.localEchoEnabledfalse にする。

コマンド Terminal: Create New Integrated Terminal (Local) を直接実行すると、既定のローカル端末プロファイルを、端末を用いてリモートウィンドウで起動できる。