【问题标题】:VS code VIM extension copy and pasteVS code vim扩展复制粘贴
【发布时间】:2020-02-06 21:36:58
【问题描述】:

有没有使用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"]
        },
    ], }

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

如何正确地做到这一点? 还有另一种方法可以做到这一点吗?

【问题讨论】:

  • 您可以随时使用"+y 复制到剪贴板并使用"+p 从剪贴板复制过去
  • 在视觉模式下会与垂直视觉模式冲突

标签: vim visual-studio-code vscodevim


【解决方案1】:

Vim - 扩展配置标志

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

"vim.useSystemClipboard": true

访问 VSCode settings.json 文件

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


Settings found in VSCodeVim/Vim repository quick-example

【讨论】:

  • 这个答案比将&lt;C-c&gt;&lt;C-v&gt; 重新绑定到false 更好,因为它保留了可视块模式的快捷方式。
  • 快捷方式:进入设置,搜索“vim clip”,勾选。
  • 由于某种原因,这并没有解决我的问题。但是,第一个答案解决了它。你知道为什么吗?
  • @basilisk 我面临着类似的问题
  • @basilisk, @rbansal 关于此解决方案的另一个细节是,它使系统剪贴板能够与选择寄存器 (*) 一起使用。这允许您在正常模式下通过本机 p 命令粘贴(或在插入模式下通过 Ctrl-r * 粘贴)。它不允许您像预期的那样使用Ctrl-v
【解决方案2】:

您可以简单地停止 vscodevim 扩展程序完全处理 Ctrl-CCtrl-V ,而不是重新绑定,然后允许 VSCode 本地处理它们。这可以通过将以下代码放入扩展的 settings.json 文件中来完成:

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

无论您处于哪种模式,这都可以正常工作,并且可以完美地适应系统剪贴板。我不确定&lt;C-c&gt; 是否必要,但&lt;C-v&gt; 肯定是必要的,因为&lt;C-v&gt; 是进入可视块模式的标准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"]
  }
]

【讨论】:

  • 你知道为什么C 复制休息而不是改变它吗?
  • 是的!谢谢,这解决了我的一个问题,即 yank y 键 yanks 和删除键 d 覆盖寄存器。不过我还有一个问题:在拉扯之后,我想用ci' 替换'word',但是ci' 将单词复制到我的剪贴板?。您知道如何禁用此功能吗?
  • 我刚刚回答了我自己的问题:{ "before": ["c"], "after": ["\"", "_", "c"] }
  • 如果你在 OS X 上节省一些浏览时间:映射 "before": ["&lt;C-v&gt;"] 变为 "before": ["&lt;D-v&gt;"],因为 Vim 将命令键视为“D”。打开 vim 并输入 :help &lt;D- 以获取更多详细信息。
  • 从原始 VS Code 中保留的其他有用的快捷方式是 ctrl+a; ctrl+s; ctrl+x; settings.json:“vim.handleKeys”:{“”:假,“”:假,“”:假,“”:假,“”:假}
【解决方案3】:

使用vs代码默认复制、粘贴、删除行。

"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

【讨论】:

  • 这可能是一个正确的答案,但对您的代码提供额外的解释会很有用,以便开发人员能够理解您的推理。这对于可能不熟悉语法的新开发人员特别有用。此外,它可以帮助减少对后续问题的需求。您介意用其他详细信息更新您的评论吗?看看接受的答案是一个很好的例子。
【解决方案4】:

你也可以用vim访问系统剪贴板

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

【讨论】:

    猜你喜欢
    • 2018-10-06
    • 2011-02-08
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多