【问题标题】:The vscode vim extension does not write real characters?vscode vim 扩展不写真字符?
【发布时间】:2020-12-20 10:46:37
【问题描述】:

我在 vscode 中自定义了 vim-extension,对于大多数模式,它都能正确执行命令。但是,如果我尝试编写实际字符(因此不再是命令),它不会。这是为什么呢?

例子:

"vim.insertModeKeyBindingsNonRecursive": [
        {
            "before": [
                "<leader>",
                "o"
            ],
            "after": [
                "<Esc>",
                "i",
                "Abcd"
            ]
        },
]

这应该只写Abcd,因为之前那个序列是i,切换到插入模式。 (所以&lt;Esc&gt; -> i 是多余的,这里只是作为示例)。 vscode vim 扩展执行&lt;Esc&gt;i(因为我知道在该命令之后我又回到了插入模式),但不会打印Abcd。为什么?扩展配置是否只是为了执行命令而不是实际打印一些东西?如何启用?

【问题讨论】:

  • 也许是个愚蠢的问题。但是您是否尝试过从映射中删除 "&lt;Esc&gt;", "i" 部分?
  • @DoktorOSwaldo 我做了 - 结果相同。但这只是一个例子。无论如何,在这两种情况下,Vscode-vim 都将 not 输出它
  • hmm github.com/VSCodeVim/Vim#vscodevim-settings 在那里查看调试选项。它也应该允许调试映射。不幸的是,由于我不使用 vscode,因此我无法为您提供任何进一步的帮助。我只是知道问题可能出在哪里,而您的评论并未指向那个方向
  • 您能澄清一下您要达到的目标吗?看起来在插入模式下,&lt;leader&gt;oAbcd 写入当前光标位置的文件?
  • @dwrecked 是的,应该。但事实并非如此。我试图简单地“打印”(例如写Abcd,使用快捷方式),但是使用vim扩展名,我似乎无法像那样“打印”

标签: visual-studio-code vim vscode-settings


【解决方案1】:

看起来您只需将"Abcd" 的每个字符拆分为单独的一行:

"vim.insertModeKeyBindingsNonRecursive": [
    {
        "before": [
            "<leader>",
            "o"
        ],
        "after": [
            "<Esc>",
            "i",
            "A",
            "b",
            "c",
            "d"
        ]
    },
]

【讨论】:

  • 都没有帮助。
  • 嗯,除了将我的设置为显式“\\”而不是 ,上面的内容目前对我来说很好。不幸的是,我不确定还有什么可以贡献的 - 很抱歉!
  • @milanHrabos 还有一个问题 - 您是否看到 &lt;leader&gt;o 在您的输入中插入然后被删除?当这对我有用时,会插入这些字符,然后将其删除并替换为Abcd。如果未删除原始字符,则表明该命令永远不会触发。
【解决方案2】:

正如项目的documentation 中所述,您应该传递单个键字符(普通键为单个字符,特殊键如箭头键或转义键为多个字符)。

更新后的值将解决问题:

"after": [
    "<Esc>",
    "i",
    "A", "b", "c", "d"
]

您可以查看插件的内部结构,以了解为什么它无法处理here 中的多个字符传递,特别是NormalizeKey 函数,该函数将使用 包装具有多个字符的任何字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    相关资源
    最近更新 更多