Расширение vscode vim не записывает реальные символы?

#visual-studio-code #vim #vscode-settings

#vim #visual-studio-code

Вопрос:

Я настроил vim-расширение в vscode, и для большинства режимов оно выполняет команды правильно. Однако, если я попытаюсь записать фактические символы (которые, таким образом, больше не являются командами), этого не произойдет. Почему это?

Пример:

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

Это должно быть записано только Abcd , потому что перед этим последовательность i переключается в режим вставки. (Таким образом, <Esc> -> i , является избыточным, это здесь просто в качестве примера). Расширение vscode vim выполняет <Esc> а также i (потому что я знаю, что после этой команды я вернусь в режим вставки), но не будет печатать Abcd . Почему? Настроено ли расширение только для выполнения команд, а не для фактической печати чего-либо? Как это включить?

Комментарии:

1. может быть, глупый вопрос. но вы пробовали удалять "<Esc>", "i" часть из сопоставления?

2. @DoktorOSwaldo Я сделал — тот же результат. Но это было просто в качестве примера. В любом случае в обоих случаях Vscode-vim не будет выводить его

3. хм github.com/VSCodeVim/Vim#vscodevim-settings смотрите параметры отладки там. это также должно допускать отладочные сопоставления. К сожалению, я больше не могу вам помочь, поскольку я не использую vscode. У меня просто была одна идея о том, в чем может быть проблема, и ваш комментарий не указывает в этом направлении

4. Можете ли вы уточнить, чего вы пытаетесь достичь? Похоже, что в режиме вставки <leader>o записывается Abcd в файл в текущем местоположении курсора?

5. @dwrecked да, так и должно быть. Но это не так. Я пытаюсь просто «распечатать» (написать Abcd , например, с помощью ярлыка), но с расширением vim, похоже, я не могу так «печатать»

Ответ №1:

Похоже, вам просто нужно разделить каждый символ "Abcd" на отдельную строку:

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

Комментарии:

1. ни то, ни другое не помогло.

2. Хм, за исключением того, что мой настроен как явный «\» вместо <лидер>, то, что указано выше, в настоящее время работает для меня нормально. К сожалению, я не уверен, что еще могло бы внести свой вклад — извините за это!

3. @milanHrabos Еще один вопрос — вы видите, что <leader>o вставлено вашим набором текста, а затем удалено? Когда у меня это работает, эти символы вставляются, затем удаляются и заменяются на Abcd . Если исходные символы не удалены, то это говорит о том, что команда никогда не запускается.

Ответ №2:

Как упоминалось в документации проекта, предполагается, что вы передаете один ключевой символ (один символ для обычной клавиши и несколько символов для специальных клавиш, таких как клавиши со стрелками или escape-клавиши).

Обновление после значения решит проблему:

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

Вы можете взглянуть на внутренности плагина, чтобы понять, почему он не работает с несколькими символами, передаваемыми здесь, в частности, с функцией NormalizeKey, которая обертывает любую строку с несколькими символами с помощью <>.