Недавно я решил присоединиться к крутым ребятам, переключившись с Vim на VSCode (не стесняйтесь не соглашаться, какой из них круче).

Как и любой другой пользователь Vim, я накопил множество сочетаний клавиш, функций и плагинов в моем .vimrc. После установки VSCodeVim перенос большинства вещей, которые я обычно использовал, занял всего одну ночь.

Одним из самых сложных моментов было заставить номера строк переключаться между абсолютными и относительными числами в зависимости от режима редактирования. Я хотел, чтобы VSCode отображал относительные номера строк в обычном режиме и абсолютные номера строк в режиме вставки.

Немного покопавшись в проблемах GitHub для VSCodeVim, я обнаружил проблему № 423, касающуюся относительных номеров строк.

Итак, в настоящее время есть несколько способов получить относительные номера строк в VSCode:

  1. Плагин Установить относительные номера строк ​​с торговой площадки. Этот плагин добавит в ваш редактор еще один столбец с номерами строк, в котором будут отображаться относительные номера строк наряду с абсолютными. Я думаю, что это слишком беспорядок, поэтому решил не использовать его.

2. Включите конфигурацию встроенного редактора для относительных номеров строк, который был добавлен в v1.6.

3. Мое хакерское решение: номера строк, зависящие от режима, достигаются путем переключения конфигурации собственного редактора (editor.lineNumbers между on и relative ) с использованием сочетаний клавиш VSCodeVim.

Решение довольно простое, но оно основано на другом плагине под названием Циклер настроек. Этот плагин позволяет вам назначать переключаемые сочетания клавиш для любых настроек VSCode, которые вы хотите. Установите этот плагин и добавьте конфигурацию ниже в свой settings.json.

В нашем случае мы хотели бы переключать editor.lineNumbers , когда пользователь переключается в режим вставки, нажимая любую из букв: i, I, a, A, o, O.

Также переключайтесь, когда пользователь выходит из режима вставки, нажимая последовательно j и k. Я знаю, что многие другие используют jj для выхода из режима вставки, вероятно, очень немногие полагаются на ‹Esc›. Измените это по своему усмотрению.

Для этого добавьте следующие строки (ключи) в свой settings.json

   "editor.lineNumbers":"relative",
   "settings.cycle":[
      {
         "id":"lineNumber",
         "overrideWorkspaceSettings":false,
         "values":[
            {
               "editor.lineNumbers":"on"
            },
            {
               "editor.lineNumbers":"relative"
            }
         ]
      }
   ],
   "vim.insertModeKeyBindings":[
      {
         "before":[
            "j",
            "k"
         ],
         "after":[
            "<Esc>"
         ],
         "commands":[
            {
               "command":"settings.cycle.lineNumber"
            }
         ]
      }
   ],
   "vim.otherModesKeyBindingsNonRecursive":[
      {
         "before":[
            "i"
         ],
         "after":[
            "i"
         ],
         "commands":[
            {
               "command":"settings.cycle.lineNumber"
            }
         ]
      },
      {
         "before":[
            "I"
         ],
         "after":[
            "I"
         ],
         "commands":[
            {
               "command":"settings.cycle.lineNumber"
            }
         ]
      },
      {
         "before":[
            "a"
         ],
         "after":[
            "a"
         ],
         "commands":[
            {
               "command":"settings.cycle.lineNumber"
            }
         ]
      },
      {
         "before":[
            "A"
         ],
         "after":[
            "A"
         ],
         "commands":[
            {
               "command":"settings.cycle.lineNumber"
            }
         ]
      },
      {
         "before":[
            "o"
         ],
         "after":[
            "o"
         ],
         "commands":[
            {
               "command":"settings.cycle.lineNumber"
            }
         ]
      },
      {
         "before":[
            "O"
         ],
         "after":[
            "O"
         ],
         "commands":[
            {
               "command":"settings.cycle.lineNumber"
            }
         ]
      }
   ]

Вышеуказанная конфигурация должна дать вам предполагаемое поведение, однако есть одно предостережение…

editor.lineNumbers конфигурация сохраняется во всех открытых файлах, однако разные файлы могут находиться в разных режимах редактирования. При переключении между вкладками редактора для редактирования разных файлов в нормальном режиме можно получить абсолютные номера строк. Чтобы обойти это, я добавил еще одну привязку клавиш для быстрого переключения номеров строк вручную, когда это необходимо.

В файл keybindings.json добавьте следующий фрагмент. Измените комбинацию клавиш, если хотите. Моя срабатывает, когда я нажимаю ‹cmd› + r на компьютере MacOS.

[
 {
  "key": "cmd+r",
  "command": "settings.cycle.lineNumber",
 }
]

В моем файле settings.json есть некоторые другие полезности VSCodeVim, которые вы можете проверить на моем github здесь.

На этом пока все. Давайте посмотрим, куда меня приведет мое путешествие по VSCode в ближайшем будущем.

Есть предложения? Дай мне знать в комментариях.