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" }]
что тоже не сработало.
1 ответ
Попробуйте использовать commands
вариант вместо:
"vim.insertModeKeyBindingsNonRecursive": [{
"before":[
"<C-e>"
],
"after":[],
"commands":[
{
"command":"cursorEnd",
"args":[]
}
]
}]
Обновление: я попытался несколько <C-...>
комбинации и после нескольких часов возни я пришел к выводу, что некоторые Ctrl
привязки просто не работают. Я пробовал несколько вариантов безрезультатно, и любая другая комбинация клавиш, кажется, работает безупречно, посмотрите это, например:
"vim.insertModeKeyBindingsNonRecursive": [
{
"before": [
"j",
"k"
],
"commands": [
"cursorLineEnd",
]
}
]
Мое предложение для вас сейчас состоит в том, чтобы избежать Ctrl
переназначения, использование <leader>
вместо. Вы также можете правильно организовать эти выводы и открыть новый выпуск на GitHub.
PS
Вы можете проверить имена команд в меню Файл -> Настройки -> Сочетания клавиш:
Попробуйте это в своем keybindings.json
:
{
"key": "ctrl+a",
"command": "cursorLineStart",
"when": "textInputFocus && vim.mode == 'Insert'"
},
{
"key": "ctrl+e",
"command": "cursorLineEnd",
"when": "textInputFocus && vim.mode == 'Insert'"
}
Вот что сработало для меня:
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"
},
]
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
Добавление следующего в settings.json
работает для меня:
"vim.inserModeKeyBindings": [
{
"before": ["<C-e>"],
"after": ["<esc>", "$", "a"]
}
]
Во-первых: установить
vim.useCtrlKeys": true,
в вашем
setting.json
тогда:
"vim.insertModeKeyBindingsNonRecursive": [
{
"before": ["<C-e>"],
"after": [],
"commands":[
{
"command":"cursorLineEnd",
"args":[]
}
]
},
{
"before": ["<C-a>"],
"after": [],
"commands":[
{
"command":"cursorLineStart",
"args":[]
}
]
}
],
и твоя воля сделана
Я обнаружил, что рекурсивные сопоставления работают:
"vim.insertModeKeyBindings": [
{
"before": [
"<C-e>"
],
"commands": [
"cursorEnd"
],
},
{
"before": [
"<C-a>"
],
"commands": [
"cursorHome"
],
}
],
Хотя они не идеальны.