52

有没有使用vim扩展复制和粘贴vs代码的正常方法?

我尝试将 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"]
        },
    ], }

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

如何正确执行此操作?还有另一种方法可以做到这一点吗?

4

4 回答 4

119

Vim - 扩展配置标志

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

"vim.useSystemClipboard": true

访问 VSCodesettings.json文件

  1. Ctrl+ ,(或转到File> Preferences> Settings
  2. 点击右上角的图标:“带箭头的文件”

VSCode 访问设置 json 文件


在 VSCodeVim/Vim 存储库快速示例中找到的设置

于 2020-04-06T18:04:13.807 回答
57

无需重新绑定,您可以简单地完全停止处理vscodevim扩展,然后允许 VSCode 本地处理它们。这可以通过将以下代码放在扩展程序的文件中来完成:Ctrl-CCtrl-Vsettings.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"]
  }
]
于 2019-10-09T15:49:00.020 回答
1

您还可以使用 vim 访问系统剪贴板

INSERT模式下点击CTRL+ Rthen*+

于 2021-12-01T16:58:04.350 回答
1

使用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

于 2020-05-12T01:45:20.233 回答