Vim для VSCode: переназначить ctrl + e, чтобы перейти в конец строки в режиме вставки

Я использую Vim с VSCode.

Я пытаюсь для переназначения ctrl+e до конца строки в режиме вставки. Вот что я написал в своем settings.json:

"vim.insertModeKeyBindingsNonRecursive": [{ "before": ["<C-o>", "$"], "after": ["<C-e>"] }]

К сожалению, это как-то не работает. Как я могу переназначить это?

Изменить: На основании ответов я также попробовал

"vim.insertModeKeyBindingsNonRecursive": [ { "before": ["<C-e>"], "commands": { "command": "cursorLineEnd" } } ]

а также

"vim.insertModeKeyBindingsNonRecursive": [{ "before": ["<C-e>"], "commands": "cursorLineEnd" }]

которые также оба не работали.


person J. Hesters    schedule 22.12.2018    source источник


Ответы (7)


Попробуйте вместо этого использовать параметр commands:

"vim.insertModeKeyBindingsNonRecursive": [{
       "before":[
          "<C-e>"
       ],
       "after":[],
       "commands":[
          {
             "command":"cursorEnd",
             "args":[]
          }
       ]
    }]

Обновление: я попытался использовать несколько <C-...> комбинаций и после пары часов возни я пришел к выводу, что некоторые Ctrl привязки просто не работают. Я пробовал несколько вариантов безрезультатно, и любая другая комбинация клавиш, похоже, работает безупречно, см. Например:

"vim.insertModeKeyBindingsNonRecursive": [
      {
         "before": [
            "j",
            "k"
         ],
         "commands": [
            "cursorLineEnd",
         ]
      }
   ]

Я предлагаю вам избегать Ctrl повторных применений, вместо этого используйте <leader>. Вы также можете правильно организовать эти выводы и открыть новый выпуск на GitHub.

P.S

Вы можете проверить имена команд в Файл -> Настройки -> Сочетания клавиш:

введите описание изображения здесь

person kutacoder    schedule 22.12.2018
comment
Я пробовал использовать: "vim.insertModeKeyBindingsNonRecursive": [ { "before": ["<C-e>"], "commands": { "command": "cursorLineEnd" } } ], потому что cursorLineEnd - это то, что я ищу. К сожалению, тоже не работает :( - person J. Hesters; 23.12.2018
comment
Похоже, что привязка к определенным <C-...> комбинациям в настоящее время не так стабильна, я обновил свой ответ своими мыслями по этому поводу. - person kutacoder; 23.12.2018

Попробуйте это в своем keybindings.json:

{
  "key": "ctrl+a",
  "command": "cursorLineStart",
  "when": "textInputFocus && vim.mode == 'Insert'"
},
{
  "key": "ctrl+e",
  "command": "cursorLineEnd",
  "when": "textInputFocus && vim.mode == 'Insert'"
}
person Jaul Chen    schedule 27.11.2019
comment
Это мне очень помогло, когда я установил Rewrap и сопоставил его с gq. В режиме vim я больше не мог писать букву g, потому что vsCode ждал, когда произойдет g. Я добавил условие в свое отображение, и это устранило мою проблему. - person xh3b4sd; 26.05.2020

Вот что сработало для меня:

VSCode 1.37.1 (июль 2019 г.)

VSCodeVim v1.9

Сначала сообщите расширению VSCodeVim unhandle C-a и C-e. Это делегирует эти управляющие ключи VSCode вместо расширения:

// In your settings.json
"vim.handleKeys": {
        "<C-a>": false,
        "<C-e>": false
    },

Теперь просто переназначьте эти ключи в VSCode:

// In your keybindings.json
[
  {
      "key": "ctrl+a", // default is Home
      "command": "cursorHome",
      "when": "textInputFocus"
  },
  {
      "key": "ctrl+e", // default is End
      "command": "cursorEnd",
      "when": "textInputFocus"
  },
  {
      "key": "ctrl+a", // default is Home
      "command": "extension.vim_home",
      "when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert'"
  },
  {
      "key": "ctrl+e", // default is End
      "command": "extension.vim_end",
      "when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode != 'Insert'"
  },
]

Я обнаружил, что первые две привязки работают в обычном режиме и в режиме вставки, но не в визуальном режиме (он как бы перемещает курсор, но ничего не выбирается). Последние два гарантируют, что он также работает в визуальном режиме.

Изменить: Я обнаружил, что простое удаление последнего условия vim.mode != 'Insert' в when работает и намного чище. Поэтому вместо сочетаний клавиш, указанных выше, просто:

// In your keybindings.json
[
  {
      "key": "ctrl+a",
      "command": "extension.vim_home",
      "when": "editorTextFocus && vim.active && !inDebugRepl"
  },
  {
      "key": "ctrl+e",
      "command": "extension.vim_end",
      "when": "editorTextFocus && vim.active && !inDebugRepl"
  },
]
person Michael    schedule 01.09.2019

Я обнаружил, что рекурсивные сопоставления работают:

    "vim.insertModeKeyBindings": [
        {
            "before": [
                "<C-e>"
            ],
            "commands": [
                "cursorEnd"
            ],
        },
        {
            "before": [
                "<C-a>"
            ],
            "commands": [
                "cursorHome"
            ],
        }
    ],

Хотя они не идеальны.

person moba    schedule 15.07.2019
comment
К сожалению, вскоре это перестало работать, и я понятия не имею. - person moba; 19.07.2019

Добавление следующего в settings.json работает для меня:

"vim.inserModeKeyBindings": [
        {
            "before": ["<C-e>"],
            "after": ["<esc>", "$", "a"]
        }
]
person Ramasamy Kandasamy    schedule 11.05.2020

tl;dr

в keybindings.json:

[
  {
    "key": "ctrl+a",
    "command": "cursorHome",
    "when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Insert'"
  },
  {
    "key": "ctrl+e",
    "command": "cursorEnd",
    "when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Insert'"
  }
]

длинная версия

Пробовал ответы в этой теме на 2020-05-15, но все еще не работает. Обнаружил эту проблему https://github.com/VSCodeVim/Vim/issues/3126 содержащий обходной путь, и это сработало для меня.
Моя версия vscode: 1.45.0
Благодарим автора проблемы https://github.com/paupalou

person snowhs    schedule 14.05.2020

Во-первых: установите vim.useCtrlKeys": true, в свой setting.json

тогда:

    "vim.insertModeKeyBindingsNonRecursive": [
        {
            "before": ["<C-e>"],
            "after": [],
            "commands":[
                {
                   "command":"cursorLineEnd",
                   "args":[]
                }
             ]
        },
        {
            "before": ["<C-a>"],
            "after": [],
            "commands":[
                {
                   "command":"cursorLineStart",
                   "args":[]
                }
             ]
        }
    ],

и твоя воля сделана

person HanleyLee    schedule 26.09.2020