如何透過terminal.sendSequence將CTRL + v傳送到終端機?

如何透過terminal.sendSequence將CTRL + v傳送到終端機?

我嘗試閱讀有關如何正確解決此問題的文檔,但我變得更加困惑。

文件狀態命令僅適用\u0000於此頁面的格式和鏈接XTerm 控制序列不要提及這種\u0000格式。

成立CTRL堆疊鏈接,它有所幫助,但我仍然不明白如何獲得+v的程式碼

用於terminal.sendSequence

任何幫助將非常受歡迎

如果您需要上下文來了解為什麼我需要 CTRL+v作為終端 via terminal.sendSequence,請閱讀以下內容。


目前在 VScode 中,剪貼簿會貼到終端機是由 VScode 處理的,而不是 Powershell PSReadline。

為什麼這很重要?如果剪貼簿中有多行,VScode 將一次貼上並執行一行,因此如下:

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 無需處理貼上,但現在 PSReadline 還處理所有其他鍵綁定,包括方便的終端 VSCode 查找欄的按鍵。

我真的不想沿著列出我想要 Vscode 處理的每個命令的路線terminal.integrated.commandsToSkipShell

答案1

關聯您提供了參考資料Xterm.js包含各種控制代碼的檔案。

其中列出的一項是^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"
  }
},

當我嘗試將多行內容傳送到互動式節點 shell 時,我遇到了類似的問題,並且必須將所選文字包裝在 和 之間,.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上面的範例。

相關內容