Я хотел бы переопределить действия, запускаемые клавишами 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
У меня есть следующие вопросы:
- Может ли кто-то быть так любезен, чтобы указать мне, как кодировать эти функции для VSCode?
- Можно ли напрямую добавить этот код в настройки сопоставления клавиш VSCode, или у меня есть написать расширение для этого? Если да, то как мне написать такое расширение?
Извините, я знаю, что это действительно базовые c вопросы, но я только начинаю работать с VSCode. Кроме того, я могу представить, что ответы на эти вопросы могут быть полезны и другим.
Спасибо!