VS 代码 VIM 扩展复制粘贴

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

我试过将 VIM 寄存器命令映射到我习惯使用的快捷命令(ctrl + c 用于复制,ctrl + v 用于粘贴) ,但结果非常奇怪,我不确定如何正确执行。

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

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

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

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

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

如何正确地做到这一点? 还有别的办法吗?

40874 次浏览

不需要重新绑定,只需停止 vscodevim扩展完全处理 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 扩展配置标志

通过搜索“ vim 夹”在设置中勾选复选框。

或者

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

"vim.useSystemClipboard": true

访问 VSCode settings.json文件 :

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

VSCode access settings json file


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

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

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

插入模式下,按 CTRL + R,然后按 *+

我发现一个人可以成功地使用 CTRL+INSERT/SHIFT+INSERT与 VS 代码 VIM 复制到/从系统剪贴板,而不会绊倒在 VIM 缓冲区。

对于上下文,我正在 Windows 上的 WSL2上运行 VS 代码。

在最新版本的 VS 代码(Linux,latpak 版本,1.68.1)和 vim addon (在编写本文时)中,可以通过勾选“ Vim: Use System Clipboard”轻松实现这一点。

注意: 你可以通过 Ctrl+,打开设置,然后搜索“ vim 剪贴板”

enter image description here

如果你使用 Linux (或者终端本身) ,你必须知道为了复制和粘贴,你在中间添加了 shift键,这就是:

ctrl + shift + c收到

粘贴 ctrl + shift + v

因此,对我来说,记住这一点并将其添加到配置中更为简单,因为它有助于我将 VS Code 视为一个“终端”。

步骤:

  1. F1
  2. 首选项: 打开键盘快捷键(JSON)
  3. 加上这个
 {
"key": "ctrl+shift+c",
"command": "editor.action.clipboardCopyAction"
},
{
"key": "ctrl+shift+v",
"command": "editor.action.clipboardPasteAction"
}