CTRL + v をterminal.sendSequence経由でターミナルに送信するにはどうすればいいですか?

CTRL + v をterminal.sendSequence経由でターミナルに送信するにはどうすればいいですか?

これを正しく理解する方法に関するドキュメントを読んでみましたが、さらに混乱するばかりでした。

ドキュメント\u0000状態コマンドは、このページの形式とリンクでのみ機能しますXTerm 制御シーケンスこの\u0000形式については何も言及しません。

見つかったこれスタックリンク、それは少し役立ちましたが、私はまだ私ができるCTRL+のコードを取得する方法がわかりませんv

のために使用しますterminal.sendSequence

どのような助けでも大歓迎です

ターミナルにCTRL+ が必要な理由について詳しく知りたい場合は 、以下をお読みください。vterminal.sendSequence


現在、VScode では、ターミナルへのクリップボードの貼り付けは、Powershell の PSReadline ではなく、VScode によって処理されます。

なぜこれが重要なのでしょうか? クリップボードに複数の行がある場合、VScode は一度に 1 行ずつ貼り付けて実行します。つまり、次のようになります。

Function Hello{
    Write-Host "Hello World"
}

Powershell ターミナルに貼り付ける場合: 行 1:

Function Hello{

2行目:

Write-Host "Hello World"

3行目:

}

私はこれを変えようと何度も読みました。リンクホストプロセスがクリップボードを台無しにしているので、PSReadline で貼り付けを処理する必要があると記載されています。

VScode でこれが当てはまることが確認できたので、次の設定を使用しました。

  "terminal.integrated.sendKeybindingsToShell": true,

  " `": [
    "workbench.action.focusActiveEditorGroup"
  ],

これにより、PSReadline が貼り付けを処理する問題は修正されましたが、ターミナルの便利な VSCode 検索バーのキーを含む、他のすべてのキーバインドも PSReadline が処理するようになりました。

私は、Vscodeで処理したいコマンドをすべてリストアップするルートをたどりたくありません。terminal.integrated.commandsToSkipShell

答え1

リンクあなたは参考文献を提供しましたjs のさまざまな制御コードを含むファイル。

リストされているものの 1 つは次のものです^V:

  /** Synchronous Idle (Caret = ^V) */
  export const SYN = '\x16';

後の文字を使用して、コード\xの最後の2文字と置き換えます。\u00NN

たとえば、ショートカットCtrl+vを使用してターミナルでトリガーするには、次のようにします。Ctrl+k Ctrl+enter

{
  "key": "ctrl+k ctrl+enter",
  "command": "workbench.action.terminal.sendSequence",
  "args": { 
    "text": "\u0016"
  }
},

インタラクティブ ノード シェルに複数行のコンテンツを送信しようとしたときにも同様の問題が発生し、次のように選択したテキストを.editorとの間で折り返す必要がありました。Ctrl+D

{
  "key": "ctrl+k ctrl+enter",
  "command": "workbench.action.terminal.sendSequence",
  "when": "editorTextFocus && terminalIsOpen",
  "args": { 
    "text": ".editor\n${selectedText}\n\u0004"
  }
},

上記の例で\u0004は が に対応することに注意してください。Ctrl+D

関連情報