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" }]

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
4 751
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

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

Я пробовал использовать: "vim.insertModeKeyBindingsNonRecursive": [ { "before": ["<C-e>"], "commands": { "command": "cursorLineEnd" } } ], потому что cursorLineEnd - это то, что я ищу. К сожалению, тоже не работает :(

J. Hesters 22.12.2018 23:36

Похоже, что привязка к определенным комбинациям <C-...> в настоящее время не так стабильна, я обновил свой ответ своими мыслями по этому поводу.

kutacoder 23.12.2018 01:32

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

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

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

К сожалению, вскоре это перестало работать, и я понятия не имею.

moba 19.07.2019 13:27

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

VSCode 1.37.1 (июль 2019 г.)

VSCodeVim v1.9

Сначала сообщите расширение VSCodeVim для не обрабатывать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"
  },
]

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

{
  "key": "ctrl+a",
  "command": "cursorLineStart",
  "when": "textInputFocus && vim.mode == 'Insert'"
},
{
  "key": "ctrl+e",
  "command": "cursorLineEnd",
  "when": "textInputFocus && vim.mode == 'Insert'"
}

Это мне очень помогло, когда я установил Rewrap и сопоставил его с gq. В режиме vim я больше не мог писать букву «g», потому что vsCode ждал, когда произойдет «g». Я добавил условие в свое отображение, и это устранило мою проблему.

xh3b4sd 26.05.2020 18:43

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

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

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

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

тогда:

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

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

Другие вопросы по теме