Сегодня я покажу тебе один классный плагин, который добавит режим VIM в твою Visual Studio 2015 и выше. Плагин называется VsVim, ссылка на visual studio marketplace — [link]. Его можно просто установить из Tools -> Extensions and updates
В модальном окне выбери вкладку Online, введи VsVim в строку поиска и загрузи наиболее подходящий вариант
После этого перезапусти Visual Studio. После перезапуска появится окно, сообщающее о конфликтах биндингов клавиш между плагином и VS. Выбери все маппинги для VsVim или что-то подобное. Основная идея — переопределить все правила VS правилами VsVim. Всё в порядке, не переживай. Отлично, теперь можно использовать vim в своей VS! Попробуй комбинации вроде I (переход во вставку), V (визуальный режим), и перемещай курсор по всей рабочей области клавишами VIM — такими как H, J, K, L и так далее.
Несколько рекомендаций:
Также могу порекомендовать сделать несколько настроек для режима VIM, которые очень распространены: JJ для Esc (позволяет быстрее выходить из режима редактирования комбинацией JJ, так же как через <ESC>)
Снять маппинг с Crtl + S (позволяет сохранять быстрее с помощью Ctrl + S, что будет обрабатываться VSStudio, а не vim. В vim для сохранения документов всегда нужно набирать :w)
<pre class="lang:default"decode:true="">nnoremap <c-s>:w<CR> # normal mode: save
inoremap <c-s><Esc>:w<CR>l # insert mode: escape to normal and save
vnoremap <c-s><Esc>:w<CR># visual mode: escape to normal and save
Все эти настройки можно сохранить в файле .vsvimrc, и они будут применяться при каждом запуске visual studio. Как это сделать — читай здесь: https://github.com/cboudereau/vsvimrc
Расположение файла .vimrc:
Пример моего текущего файла .vimrc:
" version control
nnoremap Ud :vsc Team.Git.CompareWithUnmodified<cr>
" from https://github.com/justinmk/config/blob/master/.vsvimrc
nnoremap yxx ggVG:vsc
EditorContextMenus.CodeWindow.ExecuteInInteractive<cr>" fsharp refactoring
" not yet implemented
nnoremap Un i failwith "not yet implemented"" extract (p/P)arameter
nnoremap Up
yawOlet<Space><Esc>Pa<Space>=<Space>failwith<Space>"not<Space>yet<Space>implemented"<Esc>j$innoremap UP
ciw<Esc>pa=<Esc>p<Esc>yawOlet<Space><Space><Esc>Pa<Space>=<Space>failwith<Space>"not<Space>yet<Space>implemented"<Esc>j$i" convert to Union (C)ase
nnoremap Uc
<Esc>diwatype<Space>[<Struct>]<Space><Esc>pa<Space>=<Space><Esc>pa<Space>of<Space>string
" extract (R)ecord member type to (I)dentifier
nnoremap Uri
/:<CR>d$byiw$a=<Space><Esc>pbvuyiw?{<CR>Olet<Space><Esc>pa<Space>=<Space>failwith
"not yet implemented"<Esc>''<Esc>
" fsharp interactiv(E/e)nnoremap Ue Vggo:vsc
EditorContextMenus.CodeWindow.ExecuteInInteractive<cr>nnoremap UE VGGo:vsc
EditorContextMenus.CodeWindow.ExecuteInInteractive<cr>imap jj <ESC>nnoremap <c-s> :w<CR>inoremap <c-s><Esc>:w<CR>l
vnoremap <c-s><Esc>:w<CR>setclipboard=unnamed
Также советую распечатать эту полезную шпаргалку по VIM.