🚀 VS Codeでで入手!

2023年8月 (バージョン 1.82)

Update 1.82.1: このアップデートでは、このセキュリティ問題に対処しています。

Update 1.82.2: このアップデートでは、これらの問題に対処しています。

Update 1.82.3: このアップデートでは、このセキュリティ問題に対処しています。

ダウンロード: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap


Visual Studio Code 2023年8月リリースへようこそ。このバージョンには多くのアップデートが含まれており、きっと気に入っていただけると思います。主なハイライトは次のとおりです。

これらのリリースノートをオンラインで読みたい場合は、code.visualstudio.com更新情報をご覧ください。

Insiders: 新機能をいち早く試したいですか? 夜間ビルドのInsiders版をダウンロードして、最新のアップデートをすぐにお試しください。

アクセシビリティ

ウィンドウタイトルのフォーカスされたビュー

window.title 設定に、現在ビューがフォーカスされている場合、タイトルバーにビューの名前を表示する ${focusedView} 変数が追加されました。

インライン補完のアクセシブルビュー

GitHub Copilot 拡張機能などからのインライン補完を、アクセシブルビューで検査できるようになりました。

ワークベンチ全体のナビゲーションの一貫性の向上

前回のイテレーションでは、入力コントロール (検索やフィルター入力など) とその結果の間を移動する際のエクスペリエンスを、拡張機能ビュー、キーボードショートカットエディターなどのコンポーネント間で、⌘↓ (Windows、Linux Ctrl+Down) および ⌘↑ (Windows、Linux Ctrl+Up) を使用して一貫性を持たせました。これが、設定エディターと GitHub プルリクエストのコメントコントロールに拡張されました。

これは、ターミナルとターミナルのアクセシブルバッファー間のナビゲーションにも有効です。

ターミナルのアクセシブルバッファーのキーバインドを更新

以前は、ターミナルのアクセシブルバッファーは Shift+Tab で開いていました。これは、一部のシェルで既存のキーボードショートカットと競合していました。そのため、他のアクセシブルビューと整合性を持たせるために、そのキーバインドを削除し、代わりに ⌘↓ (Windows、Linux Ctrl+Down) および ⌥F2 (Windows Alt+F2、Linux Shift+Alt+F2) を使用するようにしました。

アクセシブルビューのアクション

アクセシブルビューのアクションを使用すると、スクリーンリーダーユーザーは、特定の機能について、次へ/前へ移動したり、アクセシビリティの冗長性を無効にしたりできます。これらのアクションは、現在のコンテキストを維持できるように、ビューの便利なツールバー内に存在します。

アクセシブルビューでのシンボルへ移動

アクセシビリティヘルプダイアログと一部のアクセシブルビューには、コンテンツをより迅速にナビゲートできるように、シンボルへ移動 (⇧⌘O (Windows、Linux Ctrl+Shift+O)) アクションが追加されました。

実行後にターミナルのアクセシブルバッファーにフォーカス

ターミナルに terminal.integrated.focusAfterRun 設定が追加されました。これにより、ユーザーは、ターミナル: アクティブなターミナルで選択したテキストを実行 が呼び出されたときに、ターミナルのアクセシブルバッファー (accessible-buffer)、ターミナル自体 (terminal)、または何もしない (none) のいずれにフォーカスするかを指定できます。

ワークベンチ

組み込みポートフォワーディング

VS Code に組み込みのポートフォワーディングシステムが追加されました。この機能を使用すると、ローカルで実行中のサービスをインターネット経由で他の人やデバイスと共有できます。使用するには、パネル領域で使用可能な ポート ビューで ポートをフォワード ボタンを選択します (ポート: ポートビューにフォーカス)。

Forward a Port button displayed in the Ports view

テーマ: Codesong (vscode.dev でプレビュー)

ポートフォワーディングの詳細については、ポートフォワーディング ユーザーガイドをお読みください。

コマンドセンターがデフォルトでオン

コマンドセンターは、VS Code を発見し、操作するための簡単な方法として数か月前に導入されました。コマンドパレットでコマンドを見つけたり、タスクを実行したり、その他のクイックエクスペリエンスの起動パッドとして使用できます。タイトルバーにコマンドセンターを表示する実験を行ってきましたが、肯定的なフィードバックが得られたため、デフォルトで有効にすることにしました。

コマンドセンターと、戻るボタンと進むボタンの使用例のビデオを次に示します。

コマンドセンターは VS Code 内のあらゆるものを見つけるための中央ハブになる可能性を秘めていると考えているため、今後の改善にご期待ください。

: コマンドセンターを表示したくない場合は、タイトルバーを右クリックし、ドロップダウンメニューのコマンドセンターのチェックを外して非表示にできます。

ピン留めされたエディターをキーボードまたはマウスから閉じる方法を制御

ピン留めされたタブがエディターを閉じるためのキーボードショートカットまたはマウスの中クリックにどのように応答するかをより細かく制御するための新しい設定 workbench.editor.preventPinnedEditorClose があります。デフォルトでは、ピン留めされたタブはキーボードまたはマウスの操作では閉じません (デフォルト値は keyboardAndMouse)。この設定は必要に応じて変更できます。

  • keyboardAndMouse - ピン留めされたタブは、キーボードショートカットまたはマウスの中クリックでは閉じません (1.82.x 以降のデフォルト)。
  • keyboard - ピン留めされたタブは、キーボードショートカットでは閉じません (1.81.x までのデフォルト)。
  • mouse - ピン留めされたタブは、マウスの中クリックでは閉じません。
  • never - ピン留めされたタブは、キーボードショートカットまたはマウスの中クリックで常に閉じます。

ステータスバーの新しいテーマカラーと更新されたテーマカラー

ステータスバーには、その項目に対してすでに多くのテーマカラーが用意されています。ホバー時の前景色と背景色をテーマ設定できるように、さらに多くの色が追加されました。

  • statusBarItem.errorHoverBackground
  • statusBarItem.errorHoverForeground
  • statusBarItem.warningHoverBackground
  • statusBarItem.warningHoverForeground
  • statusBarItem.remoteHoverBackground
  • statusBarItem.remoteHoverForeground
  • statusBarItem.offlineHoverBackground
  • statusBarItem.offlineHoverForeground

次の2つのカラー名は、色がステータスバー全体ではなく、リモートインジケーターのみに適用されるようになったため、更新されました。

  • statusBar.offlineBackgroundstatusBarItem.offlineBackground に名称変更
  • statusBar.offlineForegroundstatusBarItem.offlineForeground に名称変更

エディター

スティッキースクロール

今回のイテレーションでは、エディターの上部に表示されるスティッキースクロール UI (表示: スティッキースクロールの切り替え) にいくつかの改善が加えられました。

  • デフォルトでは、エディターの水平スクロールバーがスクロールされると、スティッキースクロールが横方向にスクロールされるようになりました。この機能は、editor.stickyScroll.scrollWithEditor を無効にすることでオフにできます。
  • Shift キーを押しながらスティッキースクロール行にカーソルを合わせると、スコープの最終行を表示できます。Shift キーを押しながら行をクリックすると、エディターカーソルがスコープの最終行に移動します。
  • 折りたたみアイコンがスティッキースクロールガターに追加されました。これらのアイコンのレンダリングは、エディターガターでの折りたたみアイコンのレンダリングを制御する設定 editor.showFoldingControls に従います。

保存時にJSONをソート

保存時に JSON または JSONC (コメント付き JSON) ファイルをソートできるようになりました。この機能を有効にするには、設定 json.sortOnSave.enable を使用します。

キーボードによるコードアクションとクイックフィックスのナビゲーション

クイックフィックス、コードアクション、またはソース管理メニュー (「アクション」コントロールを使用) を、使用可能なメニューオプションに対応するキーワードまたは文字を入力することで、すばやくナビゲートできるようになりました。フィルターはファジーマッチングを利用し、検索は最初の文字またはプレフィックスに限定されず、ラベルテキスト全体も含まれます。

Example of searching "Surround" or "Read" in the Refactor menu

Diffエディター

今回のリリースでは、新しい Diff エディターがデフォルトで有効になりました。また、新しい Diff エディター機能のいくつかを改善し、多くのバグを修正しました。

移動されたコードの検出

今回のイテレーションでは、移動されたコードの検出機能を改良しました。これは、"diffEditor.experimental.showMoves": true または Diff エディターのコンテキストメニューで有効にできます。有効にすると、同じファイル内で別の場所から移動されたコードブロックが検出され、コードブロックの移動先を示す矢印が描画されます。

コードの移動は、わずかに変更された場合でも検出されます。比較 ボタンを使用すると、移動前後のブロックを比較できます。

Moved code detection demo

折りたたまれた変更のないコードヘッダー

"diffEditor.hideUnchangedRegions.enabled": true を使用するか、エディターのコンテキストメニューでマップアイコンを選択して、変更のないコードブロックの折りたたみを有効にします。

今回のリリースでは、折りたたまれたコードブロックのブレッドクラムが追加され、どのシンボルが折りたたまれているかを示すようになりました。ブレッドクラム項目をクリックすると、選択した項目が表示されます。

Collapsed code headers

動的レイアウト

Diff エディターの幅が狭すぎる場合、エディターは自動的にインラインビューに切り替わります。エディターが再び十分に広くなると、以前のレイアウトが復元されます。この動作を無効にするには、"diffEditor.useInlineViewWhenSpaceIsLimited": false を設定します。

ボタントグル状態

Diff エディターのボタンのトグルスタイルを、より見やすくするために更新しました。

古いトグルスタイル (オフとオン) では、オフのボタンが暗くなっています

Old, untoggled dim buttons, Old, toggled

新しいトグルスタイル (オフとオン) では、オンの背景が影付きになっています

New, untoggled visible buttons, New, toggled with shaded background

ターミナル

起動時にターミナルを復元する方法を制御

新しい設定 terminal.integrated.hideOnStartup は、アプリケーションの起動時にターミナルを自動的に作成するかどうかを制御します。次のオプションを使用できます。

  • never (デフォルト): 起動時にターミナルビューを非表示にしません。
  • whenEmpty: 復元された永続的なセッションがない場合にのみ、ターミナルを非表示にします。
  • always: 復元された永続的なセッションがある場合でも、常にターミナルを非表示にします。

括弧付きペーストモードを無効にする

括弧付きペーストモードは、ターミナルの機能であり、貼り付けられたテキストを特別なシーケンスでラップして、シェルがその情報を使用できるようにします。この機能をオンにするシェルは、これを適切にサポートすることを意図していますが、予期せず [201~ のようなテキストが表示される場合に問題が発生する可能性があります。この機能は明示的に無効にできるようになり、シェルが要求した場合でも機能が無効になります。

ターミナルの実行後のフォーカス設定

ターミナルに terminal.integrated.focusAfterRun 設定が追加されました。これにより、ユーザーは、ターミナル: アクティブなターミナルで選択したテキストを実行 が呼び出されたときに、ターミナルにフォーカスするかどうかを指定できます。他のオプションは、ターミナルのアクセシブルバッファー (accessible-buffer) にフォーカスするか、何もフォーカスしない (none) です。

サイズ変更可能な検索

ターミナルの検索コントロールは、エディターと同様に、左側のサッシュを使用してサイズ変更できるようになりました。

Hover the left border of the Find control to see the resize handle

検索コントロールのサイズを変更するためにカーソルを合わせたりドラッグしたりすると、サッシュが強調表示されます。

GPUアクセラレーションが無効になっている場合のレンダリングの高速化

GPUアクセラレーションが無効になっている場合に使用される「DOMレンダラー」のパフォーマンスが、コンポーネントの書き換えのおかげで大幅に向上しました。書き換えでは、使用するDOM要素の数を減らすことに重点を置き、ターミナルが大きくなるほど節約効果が高まります。

117列と36行のターミナルでの典型的なレンダリング呼び出しをテストした場合、以前は約10ミリ秒かかっていましたが、書き換え後は約2ミリ秒になりました。テストマシンのターミナルサイズを300x100に増やした場合、以前は約25〜35ミリ秒かかっていたレンダリングが、書き換え後は約4〜5ミリ秒になりました。

選択範囲のレンダリングの改善

GPUアクセラレーションがオフの場合、選択範囲のレンダリングは WebGL レンダラーと同じになり、コントラストと一貫性を確保するために、すべての背景がテーマの選択範囲の背景色に変更されるようになりました。

The background when selected will now be the same as the rest of the selection

暗いテキストの最小コントラスト比を半分尊重

最小コントラスト比機能を使用すると、ターミナルはターミナルの前景色をより細かく制御して、特定コントラスト比で表示されるようにすることができます。この機能の過去の問題の1つは、暗いテキスト (CSI 2 m) もコントラスト比を尊重するため、通常のテキストと同じくらい目立つ可能性があることでした。PowerShell の自動補完ゴーストテキストは、これがうまく機能しなかった例です。

暗いテキストは、コントラスト要件が 半分 になります。これは、テキストが最小コントラスト比を満たさなくなる可能性があることを意味しますが、通常のテキストとは明らかに異なるため、より重要です。

Now dimmed text should be visually different for typical minimum contrast ratios

フォーカスが外れたときのカーソルの外観を構成

フォーカスが外れているときのターミナルのカーソルの外観を、terminal.integrated.cursorStyleInactive で構成できるようになりました。これは、既存の terminal.integrated.cursorStyle のすべてのスタイルに加えて、outline (デフォルト) および none をサポートしています。

The new inactive cursor styles are underline, block, line, outline and none

検出されたリンクを開く コマンド (⇧⌘G (Windows、Linux Ctrl+Shift+G)) の動作が変更され、パフォーマンスを高く維持しながら、ターミナルバッファー全体でリンクを検索することがはるかに容易になりました。以前は、ビューポートと少し上にあるリンクのみを提供し、バッファーの残りの部分を検索するための面倒な さらにリンクを表示 ボタンが最後にありました。

Previously the last entry must have been selected to search everything

ビューポート内のリンクがすぐに表示されるようになり、クイックピックをできるだけ早く表示できます。

Now initial results are restricted to the initial viewport

クイックピックが表示されるとすぐに、ターミナルバッファーの残りの部分のリンクがバックグラウンドで検出されます。入力してフィルター処理すると、VS Code はすべての結果を待ってから、フィルター処理された結果に含めます。

Results from the entire buffer are included in the search when filtering begins

CodeQL.yml は、ビューポート外にあったため、フィルターが入力されるまで含まれていないことに注意してください。

次の GNU スタイルのリンク形式がターミナルで検出されるようになりました。

  • sourcefile:lineno.column
  • sourcefile:line1-column1.column2
  • sourcefile:line1.column1-line2.column2

デバッグ

JavaScript デバッガー

WebAssembly デバッグ

JavaScript デバッガーは、WebAssembly モジュールを WebAssembly テキスト形式に自動的に逆コンパイルし、逆コンパイルされたモジュールでステップスルーとブレークポイントの設定を許可するようになりました。

Breakpoint hit during a WebAssembly debug session

テーマ: Codesong (vscode.dev でプレビュー)

ソースマップの読み込みの改善

今回のリリースでは、ソースマップの読み込み方法に多くの改善を加えました。

  • tsc コマンドラインでコンパイルされたアプリケーションなど、一般的なケースでのソースマップの読み込みが 3〜5 倍高速になりました。
  • Vite 開発サーバーからのホットモジュールリロードがサポートされるようになりました。
  • ソースマップを認証されたエンドポイントから自動的に読み込めるようになりました。

テスト

改善されたステータス領域

テストビューのフィルターボックスの下にある「ステータス領域」がより簡潔になり、最後に実行されたテストを再実行するためのクリック可能なアクションも提供されるようになりました。再実行ボタンを Alt キーを押しながらクリックすると、代わりにそれらのテストがデバッグされます。

Testing view status area displaying test result count, test timing, and rerun button

リンク検出が、テスト出力が表示されるターミナルで実行されるようになりました。ファイル名、パス、および URI がクリック可能になりました。

テストに関連付けられた出力のエクスペリエンスの向上

テスト拡張機能は、コンソール出力を特定のテストまたは場所に関連付けることができます。以前は、この方法で作成された各出力は、テスト結果ビューに独自の項目として表示され、選択するとテキストエディターで開かれました。

現在、それらは適切なターミナルに表示され、出力メッセージに移動すると、メッセージが選択された状態でそのテストの出力のターミナルが開きます。

ノートブック

セル出力のコピー

セル出力メニューに、出力をシステムクリップボードにコピーするオプションが追加されました。コンテキストメニューは、画像出力を右クリックして 出力のコピー コマンドを選択することによっても使用できます。

テーマ: Bearded Theme feat. Gold D Raynh (vscode.dev でプレビュー)

言語

TypeScript 5.2

VS Code に TypeScript 5.2.2 が同梱されるようになりました。このメジャーアップデートでは、新しい TypeScript 言語機能、パフォーマンスの向上、および多くの重要な改善とバグ修正がもたらされます。TypeScript 5.2 については、TypeScript ブログ をお読みください。

ファイルへの移動リファクタリング

JavaScript および TypeScript の ファイルへの移動 リファクタリングを使用すると、クラス、関数、または定数を既存のファイルに移動できます。これにより、シンボルへのすべての参照も自動的に更新され、必要に応じてインポートが更新されます。

ファイルへの移動 を選択すると、VS Code は現在の TypeScript または JavaScript プロジェクト内のすべてのファイルの一覧を表示します。入力を開始して、必要なファイルにすばやくフィルター処理できます。

または、既存のファイルを選択... を使用して通常のファイルピッカーを使用してファイルを選択するか、新しいファイルパスを入力... を使用して作成する新しいファイルを指定することもできます。

変数のインライン化リファクタリング

JavaScript および TypeScript の 変数のインライン化 リファクタリングは、変数のすべての出現箇所をその定数値に置き換えます。

このリファクタリングは、多くの場合、既存のコードを書き換える場合に最も役立ちます。たとえば、変数が宣言されてすぐに返される場合、変数のインライン化を使用して、余分な宣言を削除し、値を直接返すことができます。

function add(a, b) {
  const result = a + b;
  return result;
}

result変数のインライン化 を実行した後

function add(a, b) {
  return a + b;
}

クリック可能なパラメーターヒント

パラメーターヒントをクリックして、パラメーター宣言にすばやくジャンプできるようになりました。インレイヒントをオンにした後

"editor.inlayHints.enabled": "on",
"typescript.inlayHints.parameterNames.enabled": "all",
"javascript.inlayHints.parameterNames.enabled": "all"

Ctrl/Cmd キーを押しながらパラメーター名をクリックして、そのパラメーターの宣言にジャンプします。

今後のリリースでは、他の JavaScript および TypeScript インレイヒントの 定義へ移動 を有効にする予定です。

リモート開発

リモート開発拡張機能を使用すると、開発コンテナー、SSH経由のリモートマシン、または リモートトンネル、または Windows Subsystem for Linux (WSL) をフル機能の開発環境として使用できます。

ハイライト:

  • リモート - トンネル接続の信頼性の向上。
  • 新しい WSL に Docker をインストール コマンド。
  • 開発コンテナーの事前構築に関する説明ガイド。

新しい拡張機能とバグ修正の詳細については、リモート開発リリースノート を参照してください。

拡張機能への貢献

GitHub Copilot

チャットビューからワークスペースを作成

GitHub Copilot Chat 拡張機能の安定版で、/createWorkspace を使用して自然言語の説明からワークスペースを作成できるようになりました。

次の改善も行いました。

  1. 提案されたワークスペースが、チャット応答でファイルツリーとしてレンダリングされるようになりました。
  2. ファイルをクリックして、エディターで読み取り専用プレビューを開くことができます。
  3. Copilot の最初の提案が適切でなかった場合は、フォローアップの質問をして、Copilot が反復処理して改善するのを支援できます。

インラインチャットで未タイトルのエディターでコーディングを開始

未タイトルのテキストエディターを開くと、⌘I (Windows、Linux Ctrl+I) を介してインラインチャットセッションを開始する方法のヒントが表示されるようになりました。スクリーンリーダーユーザーは、このヒントを聞いて、accessibility.verbosity.untitledHint 設定で無効にすることを選択できます。

クイックチャットの改善

数か月前にクイックチャットを導入し、VS Code 用に作られたと感じられるエクスペリエンスを提供するために迅速に反復処理を行ってきました。

今回のイテレーションのハイライト:

  • よりコンパクトなUX。
  • フォーカスが失われても、クイックチャットが開いたままになるようになりました。
  • ウィンドウのサイズを変更するためのサッシュと「スクロールして拡大」動作。
  • コマンドセンターに クイックチャットを開く が追加されました。

The Quick Chat window with a question and answer displayed

全体として、UX はよりコンパクトになり、コマンドパレットなどの他の「クイックオープン」エクスペリエンスと整合性が取れるようになりました (全体的にパディングが少なくなり、ユーザーと Copilot のアイコンが小さくなり、ボタンがタイトルバーではなくインラインになりました)。

デフォルトでは、質問をすると、クイックチャットは画面の占有面積を最小限に抑えるために、その質問と回答に焦点を当てるようにサイズが変更されます。また、Copilot に尋ねたい簡単な質問に集中するのに役立つと考えています。会話の履歴は引き続き利用可能であり、スクロールアップして時間を遡ることができます。

この動的な高さのため、必要に応じてウィンドウのサイズを変更する方法も提供したいと考えました。ウィンドウサイズを調整するには、2つのオプションがあります。1つ目は、私たちが「スクロールして拡大」と呼んでいるものです。クイックチャットウィンドウが短い回答で小さくても、以前の長い回答を見たい場合は、スクロールアップすると、クイックチャットが最大高さまで拡大します。

クイックチャットの高さをリセットして、最後の質問と回答のみを表示するように戻すには、次のいずれかを実行します。

  • クイックチャットを閉じて30秒間待機します。
  • 別の質問をするか、/clear を実行します (/clear はチャット履歴を完全にクリアすることに注意してください)。
  • 下部のサッシュをダブルクリックします。

サッシュといえば... クイックチャットの下部にもサッシュがあり、クイックチャットの高さを手動で調整するために使用できます。サッシュを使用すると、デフォルトの動的な動作をオプトアウトし、「リセットされるまでこの高さを固定したい」と言うことになります。

: 動的な動作に戻したい場合は、サッシュをダブルクリックするか、チャットに /clear と入力します (/clear はチャット履歴をクリアします)。

最後に重要なこととして、コマンドセンターから クイックチャットを開く オプションを使用してクイックチャットを起動できます。

Open Quick Chat command in the Command Center

ターミナルの選択範囲の説明

Copilot は、ターミナルのコンテキストメニュー (プラットフォームに応じて 右クリック または Shift + 右クリック) で Copilot: これを説明 を選択することにより、現在のターミナルの選択範囲を説明する機能を持つようになりました。

The terminal context menu's first entry is Copilot: Explain This

Copilot: これを説明 コマンドはチャットビューを表示し、Copilot は詳細な説明を返します。

Copilot goes into detail in the explanation, for example it explains that a git push uses LFS, what delta compression is

設定の自然言語検索

設定エディターで、GitHub Copilot Chat を使用した自然言語検索が可能になりました。

自然言語検索の結果は、現在、キーワード一致の結果の下に配置され、類似度スコアの降順で並べられていますが、検索結果が目次グループによって引き続き配置されるように、来月順序を修正する予定です。

自然言語検索は現在、Copilot 埋め込みに依存しています。したがって、自然言語検索の結果は、埋め込みが利用可能になる前に行われた検索の設定エディターには表示されません。つまり、GitHub Copilot Chat 拡張機能がアクティブ化されてから数秒後です。

Searching "make text bigger" in the Settings editor shows editor.fontSize as a result

テーマ: Light Pink (vscode.dev でプレビュー)

Python

新しい Python フォーマットに関する記事

Python フォーマット に関する新しい専用トピックがあります。autopep8Black などのデフォルトのフォーマッターを設定し、さまざまな設定を通じてカスタマイズする方法を学ぶことができます。

環境変数を使用したターミナルアクティベーション

Python 拡張機能に、明示的なアクティベーションコマンドを実行せずにターミナルで選択された環境をアクティベートする新しいアクティベーションメカニズムが追加されました。今月は、これを実験としてロールアウトし始め、デフォルトのエクスペリエンスにしています。新しいアプローチでは、環境変数を使用してターミナルをアクティベートします。これはターミナルの起動時に暗黙的に行われるため、特に conda 環境の場合、より迅速になる可能性があります。次の ユーザー 設定を追加できます: "python.experiments.optInto": ["pythonTerminalEnvVarActivation"] を試してみてください。

この実験に関するコメントや提案がある場合は、vscode-python issue #11039 で自由にご共有ください。

既存の .venv 環境の再作成または使用

すでに .venv フォルダーが含まれているワークスペース内で作業している場合、Python: 環境を作成 コマンドが更新され、既存の環境を再作成するか、使用するかのオプションが追加されました。環境を再作成することにした場合、現在の .venv が削除され、.venv という名前の新しい環境を再作成できます。次に、Python: 環境を作成 フローに従って、優先インタープリターを選択し、インストールする依存関係ファイルを指定することで、この新しい環境をカスタマイズできます。環境が削除できない場合 (たとえば、アクティブになっているため)、環境を手動で削除するように求められます。

または、既存の環境を使用することを選択した場合、環境がワークスペース用に選択されます。

プレビュー機能

ワークスペース検索の結果をクイックアクセス メニューに表示する実験を行っています。お試しいただくには、Search: Quick Text Search (Experimental) を実行してください。このコマンドを実行すると、クイックオープンが検索クエリを受け入れるように設定されます。テキストを入力すると、さまざまなワークスペース ファイルから一致するものが表示されます。

フォーカスされていないエディターとターミナルを暗くする

現在フォーカスされていないエディターとターミナルを暗くする新しい実験的機能があります。この機能の目的は、通常の点滅カーソルと比較して、テキストがどこに入力されるかをより明確にすることです。

When dim unfocused is enabled in a 2x2 grid editor group layout, only one will be fully opaque

上の画像は、フォーカスされていない部分を暗くする機能を有効にし、不透明度を 0.5 に設定した場合の例です。terminalService.ts のエディターにフォーカスがあることがより明確になります。

これは accessibility.dimUnfocused.enabled を使用して有効にでき、暗さの度合いは accessibility.dimUnfocused.opacity で制御できます。

この機能は現在エディターとターミナルのみを対象としていますが、将来的には ユーザーが自分で暗くしたいビューを設定できるように拡張する予定です。

拡張機能の作成

バッチ範囲フォーマットのサポート

DocumentRangeFormattingEditProvider API がバッチ フォーマットをサポートするようになりました。つまり、拡張機能はオプションで、複数の範囲で一度に呼び出されることをサポートしていることをエディターに通知できます。これにより、フォーマット プロバイダーへの呼び出し回数が減り、パフォーマンスが向上します。

バッチ フォーマットをオプトインするには、プロバイダーは新しいオプション関数 provideDocumentRangesFormattingEdits を実装する必要があります。

ワークスペース フォルダーにスコープされた EnvironmentVariableCollection

EnvironmentVariableCollection API が、特定のワークスペース フォルダーにスコープされ、「グローバル」コレクションに加えて適用される新しいコレクションの作成をサポートするようになりました。

// Get a scoped collection for the first workspace folder
const scoped = context.environmentVariableCollection.getScoped({
  workspaceFolder: workspace.workspaceFolders[0]
});
scoped.replace('SCOPED', '1');
// Only terminals created in the first workspace folder will have SCOPED=1 set

Python 拡張機能 は、このメカニズムを使用して、マルチルート ワークスペースでターミナルが属するフォルダーに応じて異なる仮想環境を設定します。

EnvironmentVariableMutator が適用されるタイミングを構成する

EnvironmentVariableCollection API に、シェル初期化スクリプトの後に実行されるシェル統合スクリプト内で変更を適用する機能が追加されました。これは、シェル統合が有効になっている場合にのみ機能するため、変更はシェルの作成時と、重要な場合はシェル統合内でも適用できます。

context.environmentVariableCollection.prepend('PATH', '/my/custom/path', {
  applyAtProcessCreation: true,
  applyAtShellIntegration: true
});

この機能は、問題の変数がシェル初期化スクリプトによって変更される可能性がある場合に役立ちます。

提案されたAPI

すべてのマイルストーンには、新しい提案された API が付属しており、拡張機能の作成者はそれらを試すことができます。いつものように、皆様からのフィードバックをお待ちしております。提案された API を試すための手順は次のとおりです。

  1. 試したい提案を見つけて、その名前を package.json#enabledApiProposals に追加します。
  2. 最新の @vscode/dts を使用して、npx @vscode/dts dev を実行します。対応する d.ts ファイルがワークスペースにダウンロードされます。
  3. これで、提案に対してプログラミングできます。

提案された API を使用する拡張機能を公開することはできません。次のリリースで破壊的な変更が発生する可能性があり、既存の拡張機能を決して壊したくありません。

TestMessage の contextValue とコントリビューション ポイント

ユーザーがメッセージに対してアクションを実行したときに表示される TestMessagecontextValue を指定できます。さらに、2 つの新しいメニュー コントリビューション ポイント testing/message/contexttesting/message/content が利用可能です。前者はテスト結果ツリー ビューのメッセージに表示され、後者はエディターのメッセージの上に表示されます。

contextValue の詳細については、issue #190277 を参照してください。

ターミナル コンテキスト メニューのコントリビューション

拡張機能が独自のコンテキスト メニュー アクションをターミナルに統合できるようにする 2 つの新しいメニューが提案されています。

  • terminal/context - ターミナル コンテキスト メニュー
  • terminal/title/context - ターミナル タブ コンテキスト メニュー

ターミナル コマンドの実行をリッスンする

拡張機能がターミナル コマンド実行 API をリッスンする機能に対する長年の要望に応える初期の提案がテスト用に利用可能です。この API は シェル統合 を使用して実装されており、有効になっていて動作しているターミナルでのみ発火します。

export interface TerminalExecutedCommand {
  /**
   * The {@link Terminal} the command was executed in.
   */
  terminal: Terminal;
  /**
   * The full command line that was executed, including both the command and the arguments.
   */
  commandLine: string | undefined;
  /**
   * The current working directory that was reported by the shell. This will be a {@link Uri}
   * if the string reported by the shell can reliably be mapped to the connected machine.
   */
  cwd: Uri | string | undefined;
  /**
   * The exit code reported by the shell.
   */
  exitCode: number | undefined;
  /**
   * The output of the command when it has finished executing. This is the plain text shown in
   * the terminal buffer and does not include raw escape sequences. Depending on the shell
   * setup, this may include the command line as part of the output.
   */
  output: string | undefined;
}

export namespace window {
  /**
   * An event that is emitted when a terminal with shell integration activated has completed
   * executing a command.
   *
   * Note that this event will not fire if the executed command exits the shell, listen to
   * {@link onDidCloseTerminal} to handle that case.
   */
  export const onDidExecuteTerminalCommand: Event<TerminalExecutedCommand>;
}

この API の形状は最終的なものではありませんが、基本的な考え方は同じままです。

成功した git push コマンドをリッスンし、拡張機能でリフレッシュをトリガーする使用例を次に示します。

const disposables = [];
disposables.push(
  window.onDidExecuteTerminalCommand(command => {
    if (command.commandLine.startsWith('git push') && command.exitCode === 0) {
      refreshState();
    }
  })
);
function refreshState() {
  /* ... */
}

ターミナル選択アクセス

ターミナル選択にアクセスするためのシンプルな提案された API

export interface Terminal {
  /**
   * The selected text of the terminal or undefined if there is no selection.
   */
  readonly selection: string | undefined;
}

この API は最終決定される前に、対応する変更イベントが含まれる可能性が高く、API 名は TextEditor.selection のように Range ベースではなく、単純な文字列であることをより明確にするために変更される可能性があります。

ターミナル クイックフィックスの進捗

ターミナル クイックフィックスの提案は、ターミナル コマンドではなく、通常の VS Code コマンドをトリガーできるようになりました。この変更により、ターミナル コマンド インターフェイス名の変更も必要になりました。

export interface TerminalQuickFixProvider {
  /**
   * Provides terminal quick fixes
   * @param commandMatchResult The command match result for which to provide quick fixes
   * @param token A cancellation token indicating the result is no longer needed
   * @return Terminal quick fix(es) if any
   */
  provideTerminalQuickFixes(
    commandMatchResult: TerminalCommandMatchResult,
    token: CancellationToken
  ): ProviderResult<
    SingleOrMany<TerminalQuickFixExecuteTerminalCommand | TerminalQuickFixOpener | Command>
  >;
}
export class TerminalQuickFixExecuteTerminalCommand {
  /**
   * The terminal command to run
   */
  terminalCommand: string;
  constructor(terminalCommand: string);
}

エンジニアリング

Electron 25 アップデート

今回のマイルストーンでは、Electron 25 アップデートを安定版ユーザーにプロモートしています。このアップデートには、Chromium 114.0.5735.289 と Node.js 18.15.0 が含まれています。Insiders ビルドでセルフホストし、早期フィードバックを提供してくださった皆様に感謝申し上げます。

Node.js のアップデート ハイライト

デスクトップ アプリケーションにバンドルされている Node.js と、サーバー にバンドルされているスタンドアロン実行可能ファイルが v16 -> v18 にアップデートされました。これはメジャー バージョン アップであるため、いくつかの動作と互換性の変更があります。

  • OS からの DNS 結果の順序 はソートされなくなりました。まだこの変更を採用していない可能性のある拡張機能を壊さないようにするために、ローカルとサーバーの両方のシナリオで拡張機能ホストに --dns-result-order=ipv4first を追加しました。今後、拡張機能では、結果の順序の変更に対応するために、socket.connect API の autoSelectFamily オプションを使用することをお勧めします。

  • Linux 用の 公式 Node.js リポジトリ からのプリビルド バイナリは、glibc 2.28 以降に基づく Linux ディストリビューションと互換性があります。これは、Ubuntu 18、CentOS 7、RHEL 7 などのサーバーからのサポートを削除することを意味します。glibc 2.17 以降の互換性を維持するために、Linux サーバー用のカスタム ビルドの Node.js を出荷しています。このサポートは、CentOS 7 イメージで新しい Node.js バージョンをビルドできなくなった将来のアップデートで変更されるため、影響を受けるサーバー ユーザーは OS バージョンをアップデートすることをお勧めします。

Chromium のアップデート ハイライト

  • Mesa バージョンのアップデート後、Chromium シェーダーのコンパイルが壊れ、アプリケーション UI にアーティファクトが発生する可能性があります。この問題は issue #190437 で追跡されており、Chromium のバグ レポートへのリンクも含まれています。この問題を特定するには、--verbose を付けて実行し、ログに次の行 ERROR:shared_context_state.cc(81)] Skia shader compilation error がないか確認してください。この問題の影響を受けている場合、現在の回避策は ~/.config/Code/GPUCache にある GPU キャッシュを削除することです。
  • Chromium が webgl に SwiftShader バックエンドを使用する場合、統合ターミナルの Windows と Linux の両方でパフォーマンスが低下しているようです。回避策として、GL_RENDERER 文字列に基づいて影響を受けるユーザーを検出し、ターミナルの DOM バックエンドに切り替えます。詳細については、issue #190195 を参照してください。ここには Chromium のバグ レポートへのリンクも含まれています。

謝辞

最後に、VS Code のコントリビューターの皆様に心から感謝申し上げます。

Issue tracking

Issue tracking への貢献

プルリクエスト

vscode への貢献

vscode-css-languageservice への貢献

vscode-hexeditor への貢献

vscode-js-debug への貢献

vscode-pull-request-github への貢献

vscode-vsce への貢献

  • @bandantonio (Antonio)
    • feat: add user-friendly info to --help PR #884
    • feat: add support for packaging and publishing without license file PR #887
    • rephrase error message for mismatched pricing values in manifest PR #890