Я использую 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" }]
которые также оба не работали.





Попробуйте вместо этого использовать опцию 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
Вы можете проверить имена команд в Файл -> Настройки -> Сочетания клавиш:
Похоже, что привязка к определенным комбинациям <C-...> в настоящее время не так стабильна, я обновил свой ответ своими мыслями по этому поводу.
Я обнаружил, что рекурсивные сопоставления работают:
"vim.insertModeKeyBindings": [
{
"before": [
"<C-e>"
],
"commands": [
"cursorEnd"
],
},
{
"before": [
"<C-a>"
],
"commands": [
"cursorHome"
],
}
],
Хотя они не идеальны.
К сожалению, вскоре это перестало работать, и я понятия не имею.
Вот что сработало для меня:
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». Я добавил условие в свое отображение, и это устранило мою проблему.
Добавление следующего в settings.json работает для меня:
"vim.inserModeKeyBindings": [
{
"before": ["<C-e>"],
"after": ["<esc>", "$", "a"]
}
]
в 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":[]
}
]
}
],
и твоя воля сделана
Я пробовал использовать:
"vim.insertModeKeyBindingsNonRecursive": [ { "before": ["<C-e>"], "commands": { "command": "cursorLineEnd" } } ], потому чтоcursorLineEnd- это то, что я ищу. К сожалению, тоже не работает :(