Несколько дней я поработал в «пустой» VS и понял, что долго так продолжаться не может. Слишком уж неудобным показался редактор студии после нескольких лет регулярного использования Vim. И я начал искать способ продолжать работу над проектом и при этом использовать свой любимый редактор.
Непродолжительный поиск дал следующие варианты частичного решения проблемы.
Вариант 1: ViEmu
viemu.com
Первое что мне пришло в голову — найти плагин, который бы изменил интерфейс тестового редактора студии на Vim-подобный. Такой плагин существует и называется ViEmu. Сразу замечу, что он поддерживает далеко не все возможности Vim.
Плюсы ViEmu
- Элементарная установка
- Безглючная работа внутри VS
- Интеграция с IntelliSense и отладчиком
Минусы ViEmu
- По умолчанию работают не все хоткеи, их надо настраивать вручную
- Минимальное количество настроек
- Нет поддержки скриптов и, соответственно, плагинов
- Наверняка ещё много чего не поддерживает (использовал его недолго, поэтому подробный список привести не могу)
- Стоит денег (около 100$ за персональную лицензию)
Короче говоря, ViEmu реализует базовую функциональность Vim, не мешая использовать весь функционал VS. Но, что для меня главное, ViEmu — это не Vim. Поиграв с ViEmu несколько дней, я от него отказался. Слишком уж меня раздражало, когда я на автомате вводил Vim'овские команды или нажимал хоткеи, которые ViEmu не поддерживает и каждый раз недоумевал, почему ничего не работает. Таким образом, ViEmu — это не лучшее решение для пользователя Vim с большим опытом. Он должен хорошо подойти людям, которые хотят научиться использовать Vim, не отказываясь при этом от привычной среды разработки, а также людям, которые в повседневной работе используют только базовый функционал Vim.
Вариант 2: ViVim
code.google.com/p/vivim
ViVim — это ещё один плагин к VS, который использует принципиально другой подход по сравнению с ViEmu. Он просто позволяет запустить GVim внутри окна Visual Studio. После его установки в диалоге «Open with» студии появляется пункт «Vim Editor». Там же можно назначить Vim редактором по умолчанию. На мой взгляд это — наиболее простое и правильное решение проблемы, однако его реализация далеко не идеальна. На моём компьютере ViVim не раз зависал и даже обрушивал VS. Если ViVim немного доработают, я обязательно буду его использовать. Пока же я решил поискать другие варианты.
Плюсы ViVim
- Полная поддержка всех возможностей Vim
- Работа внутри окна VS
Минусы ViVim
- Глюки
- Отсутствие возможности использовать функционал VS непосредственно внутри Vim (хотелось бы хотя бы компилировать проект и просматривать список ошибок командой Vim'а)
Таким образом, ViVim основан на правильной идее, но пока сыроват.
Вариант 3: скрипт visual_studio.vim
www.vim.org/scripts/script.php?script_id=864
Если предыдущие два метода были реализованы как дополнения к VS, то данный является дополнением к Vim. Работает он следующим образом: нужно запустить Visual Studio, открыть в ней проект, затем запустить Vim, выполнить в нём специальную команду, скрипт найдёт запущенную студию и будет обращаться к ней чтобы скомпилировать проект.
Плюсы visual_studio.vim
- Возможность писать код и компилировать внутри Vim'а
Минусы visual_studio.vim
- Необходимость держать VS запущенной
- Отсутствие интеграции с MS SourceSafe, IntelliSense, отладчиком
Возможно, стоит попробовать использовать ViVim совместно с visual_studio.vim.
Вариант 4: Compiler files
www.vim.org/scripts/script.php?script_id=524
www.vim.org/scripts/script.php?script_id=1437
Последний вариант — самый радикальный. Можно просто редактировать файлы в Vim и запускать VS вместо make только для компиляции проекта.
Плюсы
- Можно работать над проектом, не выходя из Vim и не запуская VS вручную
Минусы
- Помимо возможности компиляции никакая интеграция с VS не осуществляется
Итак, есть несколько способов работать с проектами VS с помощью Vim. Ни один из них не является идеальным. Я для себя пока не выбрал, какой способ использовать. Если вы знаете другие способы — напишите пожалуйста в комментариях.
UPD: Этим постом я не хотел показать, что Visual Studio хуже Vim или наоборот. Я хотел лишь хотел показать, как можно использовать привычный интерфейс там, где он изначально не предусмотрен.

