Переопределение Home / End-ключей для VSCode - PullRequest
0 голосов
/ 09 апреля 2020

Я хотел бы переопределить действия, запускаемые клавишами Home и End в VSCode, следующим образом:

  • Home Key: при расположении где-то в середине текстовой области строки с отступом, Home при первом нажатии клавиши переместится к первому символу строки, затем следующее нажатие переместится в начало строки (пока это поведение по умолчанию в VSCode); если курсор уже находится в начале строки, то еще одно нажатие клавиши Home переводит меня в начало следующей строки (а не обратно в конец отступа, как по умолчанию).
  • End Key: При расположении где-нибудь в области с отступом строки конец переместится в конец области с отступом; в этой позиции и справа от нее конец переместится в конец строки. Если курсор уже находится в конце строки или за ее пределами, нажатие кнопки «Конец» переместит в конец следующей строки.

Для тех, кто знаком с Vim, вот код Vim, который делает это:

inoremap @ = ExtHome ()

nnoremap @ = ExtHome ()

vnoremap @ = ExtHome ()

inoremap <silent> <End> <c-o>@=<SID>ExtEnd()<cr>
nnoremap <silent> <End> @=<SID>ExtEnd()<cr>
vnoremap <silent> <End> @=<SID>ExtEnd()<cr>

function! s:ExtHome()
   if col('.')=='1'                                       | return 'j'
   elseif strpart(getline('.'), -1, col('.')) =~ '^\s\+$' | return '0'
   else                                                   | return '^'
   endif
endfunction

function! s:ExtEnd()
   let fnzcol=match(getline('.'), '\S')
   if strlen(getline('.')) == 0            | return 'j'
   elseif getpos('.')[2] < fnzcol          | return '^'
   elseif strlen(getline('.')) == col('.') | return 'j$'
   else                                    | return '$'
   endif
endfunction

У меня есть следующие вопросы:

  1. Может ли кто-то быть так любезен, чтобы указать мне, как кодировать эти функции для VSCode?
  2. Можно ли напрямую добавить этот код в настройки сопоставления клавиш VSCode, или у меня есть написать расширение для этого? Если да, то как мне написать такое расширение?

Извините, я знаю, что это действительно базовые c вопросы, но я только начинаю работать с VSCode. Кроме того, я могу представить, что ответы на эти вопросы могут быть полезны и другим.

Спасибо!

...