← Назад в блог

Vim для Visual Studio 2015 и выше: настройка, биндинги и советы

Опубликовано
2 мин чтения
--- просмотров

Сегодня я покажу тебе один классный плагин, который добавит режим VIM в твою Visual Studio 2015 и выше. Плагин называется VsVim, ссылка на visual studio marketplace — [link]. Его можно просто установить из Tools -> Extensions and updates

vim

В модальном окне выбери вкладку Online, введи VsVim в строку поиска и загрузи наиболее подходящий вариант

vim

После этого перезапусти Visual Studio. После перезапуска появится окно, сообщающее о конфликтах биндингов клавиш между плагином и VS. Выбери все маппинги для VsVim или что-то подобное. Основная идея — переопределить все правила VS правилами VsVim. Всё в порядке, не переживай. Отлично, теперь можно использовать vim в своей VS! Попробуй комбинации вроде I (переход во вставку), V (визуальный режим), и перемещай курсор по всей рабочей области клавишами VIM — такими как H, J, K, L и так далее.

Несколько рекомендаций:

Также могу порекомендовать сделать несколько настроек для режима VIM, которые очень распространены: JJ для Esc (позволяет быстрее выходить из режима редактирования комбинацией JJ, так же как через <ESC>)

<pre class="lang:default" decode:true="">:imap 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$i
nnoremap 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>

set clipboard=unnamed

Также советую распечатать эту полезную шпаргалку по VIM.

vim

Открыт для работы по контракту

Я доступен для работы по контракту. Если у вас есть интересная идея проекта — запишитесь на звонок через Calendly.

Записаться на 30-минутный звонок