是否有用于从选定代码或剪贴板代码创建新文件的 VS 代码快捷方式?

Is there a VS Code shortcut for creating a new file from selected or clipboard code?

我处理大型 html 文件,我想将它们分成单独的文件。这样做的过程非常繁琐,因为它需要复制代码,创建一个新文件,将其粘贴到新文件中,然后选择一个文件夹和一个新名称来保存它。

是否有用于 VS Code 的内置快捷方式、宏或扩展来简化此操作?

请注意,由于这是一个 html 文件,因此新的重构 Move to a new file 不可用。它做你想做的事,并且可以在许多其他语言中工作,但不是 html。您可以通过 select 移动文本并在上下文菜单中选择 Refactor.. 来访问它 - 如果支持,它甚至可以将导入语句添加到旧文件。


这是一个可以执行您想要的操作的宏。我正在使用宏扩展 multi-command,但还有其他扩展。

在settings.json中:

 "multiCommand.commands": [

    {
      "command": "multiCommand.newFileWithContent",
      "sequence": [

        // choose which one you want
        "editor.action.clipboardCutAction",
        // "editor.action.clipboardCopyAction",

        "workbench.action.files.newUntitledFile",
        "editor.action.clipboardPasteAction",

        // prompt for save immediately?
        "workbench.action.files.saveAs",

      ]
    },

然后通过命令选项板(搜索 "multi")或使用快捷键(keybindings.json)触发它:

{
  "key": "strl+alt+b",                            // your keybinding choice
  "command": "extension.multiCommand.execute",
  "args": { "command": "multiCommand.newFileWithContent" }
},

我不知道如何自动处理您问题的 "selecting a folder and a new name to save it under" 部分。我认为您仍然需要手动执行此操作,但在 "saveAs" 对话框中有一些方便的 "intellisense"。


2020年更新

想出这个答案后,请参阅

我认为可能有更好的方法来处理通过任务创建文件并一次性提示输入文件夹和文件名。您在文件夹结构上失去了 saveAs 智能感知,但在任何情况下都知道这是一项非常好的技术。而且不需要宏。在 bash shell:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "newFile",

        // assuming your folder name isn't static
      "command": "echo '${selectedText}' > ${input:folderName}/${input:fileName}.html",
      "type": "shell",
      "problemMatcher": [],
      "presentation": {    // terminal handling which you may not care about and could delete
        "echo": false,
        "reveal": "silent",
        "focus": false,
        "panel": "shared",
        "showReuseMessage": false,
        "clear": true
      },
      "promptOnClose": false
    }
  ],

  "inputs": [
    {
      "type": "promptString",     
      "id": "folderName",
      "description": "Complete my folder name.",
      "default": "folder"
    },
    {
      "type": "promptString",
      "id": "fileName",
      "description": "Complete my file name.",
      "default": "new file name"
    }
  ]
}

一些键绑定到 运行 该任务(或者只是 运行 它来自命令面板 Run Task 命令):

{
  "key": "alt+r",    // whatever you choose
  "command": "workbench.action.tasks.runTask",
  "args": "newFile"
},

就是这样,select你的任务,运行任务Alt+R.