VS code VIM 扩展复制粘贴

VS code VIM extension copy and paste

是否有使用 vim 扩展名在 vs code 中复制和粘贴的正常方法?

我已经尝试将 VIM 注册命令映射到我习惯的快捷命令(ctrl + c 用于复制,ctrl + v 用于粘贴),但结果很奇怪,我不确定如何正确执行此操作。

虽然使用 vim 键绑定非常简单, vimrc 文件:

map <C-c> "+y
map <C-v> "+p

现在我尝试通过编辑 json.settings 文件将它们迁移到 vs-code:

{
    "vim.visualModeKeyBindings": [
        {
            "before": ["<C-c>"],
            "after": ["\"", "+", "y"]
        },
        {
            "before": ["<C-v>"], 
            "after":  ["\"", "+", "p"]
        },
    ], }

我希望它能在可视模式和正常模式(用于粘贴)下运行,并且能够使用这些快捷方式从剪贴板复制和粘贴。

如何正确执行此操作? 还有另一种方法吗?

无需重新绑定,您只需完全停止 Ctrl-CCtrl-V 扩展即可,然后允许 VSCode 本地处理它们。这可以通过将以下代码放在扩展的 settings.json 文件中来完成:

"vim.handleKeys": {
    "<C-c>": false,
    "<C-v>": false
}

无论您处于哪种模式,这都会起作用,并且会完美地适应系统剪贴板。我不确定 <C-c> 是否有必要,但 <C-v> 肯定是,因为 <C-v> 是进入视觉块模式的标准 Vim 和弦。

顺便说一句,您的重新绑定方法完全有效;它只需要更多的代码:

// For visual mode
"vim.visualModeKeyBindings": [
  {
    "before": ["<C-c>"],
    "after": ["\"", "+", "y"]
  },
  {
    "before": ["<C-v>"], 
    "after":  ["\"", "+", "p"]
  }
],
// For normal mode
"vim.normalModeKeyBindings": [
  {
    "before": ["<C-c>"],
    "after": ["\"", "+", "y"]
  },
  {
    "before": ["<C-v>"], 
    "after":  ["\"", "+", "p"]
  }
]

Vim - 扩展配置标志

将以下内容粘贴到您的 VS Code 的 settings.json 文件中:

"vim.useSystemClipboard": true

访问VSCodesettings.json文件:

  1. Ctrl + ,(或转到 文件 > 首选项 > 设置)
  2. 点击图标:右上角的“带箭头的文件”


Settings found in VSCodeVim/Vim repository quick-example

使用vs code默认复制、粘贴、删除行

"vim.normalModeKeyBindingsNonRecursive": [
        {
            "before": ["d","d"],
            "commands":["editor.action.deleteLines"],
            "when":"textInputFocus && !editorReadonly"
        },
        {
            "before":["y"],
            "commands":["editor.action.clipboardCopyAction"],
            "when":"textInputFocus"
        },
        {
            "before":["y","y"],
            "commands":["editor.action.clipboardCopyAction"],
            "when":"textInputFocus"
        },
        {
            "before":["p"],
            "commands":["editor.action.clipboardPasteAction"],
            "when":"textInputFocus && !editorReadonly"
        }
    ],
    "vim.visualModeKeyBindingsNonRecursive":[
        {
            "before":["y"],
            "commands":["editor.action.clipboardCopyAction"],
            "when":"textInputFocus"
        },
        {
            "before":["y","y"],
            "commands":["editor.action.clipboardCopyAction"],
            "when":"textInputFocus"
        },
        {
            "before":["x"],
            "commands":["deleteRight"],
            "when":"textInputFocus"
        },
    ]

https://github.com/VSCodeVim/Vim/#key-remapping https://code.visualstudio.com/docs/getstarted/keybindings

您还可以通过vim

访问系统剪贴板

INSERT 模式下点击 CTRL+R 然后 *+

我发现可以通过 VS Code VIM 成功使用 CTRL+INSERT / SHIFT+INSERT 来复制 to/from 系统剪贴板而不会绊倒 VIM缓冲区。

对于上下文,我是 运行 Windows 上的 WSL2 上的 VS Code。