Vim для VSCode: переназначить Ctrl + E, чтобы перейти к концу строки в режиме вставки - PullRequest
0 голосов
/ 22 декабря 2018

Я использую 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" }]

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

Ответы [ 3 ]

0 голосов
/ 15 июля 2019

Я нашел работу рекурсивных отображений:

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

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

0 голосов
/ 01 сентября 2019

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

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"
  },
]
0 голосов
/ 22 декабря 2018

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

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

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

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

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

PS

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

enter image description here

...