Переход с PHPStorm или Intellij IDEA на VIM
Может кому-то показаться странным, зачем переходить с полноценной IDE с кучей возможностей на редактор, из которого даже выйти сложно. А в PHPStorm или IDEA одной мышью программировать можно. В моём случае переход был инициирован двумя вещами: желание использовать инструмент матёрых программистов и желание хоть как-то продолжать работать =D
Преимущества VIM перед IDEA
- быстрое начало работы с проектом: 200 мс против 2..3 минут на моём железе
- быстрая работа с текстом: обрамление строк списком HTML за 2,5 с
vap<C-y>,ul>li*
- низкое потребление ресурсов: RAM 500-700 МБ при работающем NodeJS сервере LSP против 4+ ГБ с IDEA
- конфигурируемость: сами решаете как и что будет работать, используя VIMScript, плагины
- при отсутствии большого количества ресурсов работай удалённо по SSH, а с tmux вообще сказка
- работать можно с намного большим количеством проектов одновременно
Начало освоения VIM
Первые два года изучения VIM прошли безуспешно. Каждый год по месяцу уделял время на изучение возможностей, но как-то не срослось. То ли функционал казался скудным, то ли всё время уходило на изучение принципов работы в редакторе.
Сначала не понимал, зачем нужны эти режимы, если можно находясь только в одном режиме работать с текстом как в обычном редакторе. Пиши и пиши, даже мышь вроде работала для перемещения курсора =)
На третий год решил взяться изо всех сил изучить возможности VIM и создать свой vimrc файл, настроить под себя. Как говорится, первый блин комом. Ну поставил кучу плагинов, понадобавлял всяких полезностей собрав их с разных источников. Потом сел за редактор на следующий день и понял что ничего не помню. И снова бросил это дело.
Вынужденный переход на VIM с IDEA
IDE Intellij IDEA очень хороша по своему функционалу. Из используемого мной это:
- поддержка тонны разнообразных плагинов от разработчиков и от сообщества
- гибкость настроек
- магия рефакторинга: сменив имя поля в таблице происходит автоматическое переименование использования этого поля по всему коду
- очень удобная работа с базами данных
- умное быстрое автодополнение
- поддержка разделения экрана для работы с несколькими файлами одновременно
- хранение истории правок и многое многое другое.
Однако однажды перейдя на удалённую работу, работая с ноутбука и имея 4 гигабайта оперативки понял, что работа встаёт колом. Оперативка съедалась вся при запущенном браузере (45%) и загруженной IDEA. При этом по окончании рабочего дня своп использовался на 25%, это при условии, что был включён zRam. Так продолжать работать было невозможно. И тут я решил провести эксперимент и перейти на VIM полностью.
До очередной попытки чаще всего использовал VIM для правок конфигов на серверах.
Начал всё с чистого листа: создал новый vimrc файл и помаленьку стал добавлять в него нужное для работы.
Первое и необходимое для работы это плагины. С ними проще и быстрее получить нужный функционал. Сразу вспомнил, удобно когда менеджер плагинов сам устанавливается при старте VIM. Для этого у меня уже был кусок конфига.
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall | source $MYVIMRC
endif
Если менеджер плагинов не установлен при запуске редактора, он скачивается и запускается установка плагинов, указанных в директивах:
call plug#begin('~/.vim/plugged')
" здесь плагины
call plug#end()
Далее пошёл по просторам интернетов искать плагины, которые были нужны при работе в IDE IDEA (ну или PHPStorm).
Подсветка синтаксиса есть отдельно для каждого языка, но есть один мультиязыковый
плагин — sheerun/vim-polyglot
, объединяющий разные языки.
Для автодополнения решил использовать neoclide/coc.nvim
, т.к. он позволяет
получить результат как в VSCode.
Для вставки сниппетов пользуюсь тем же coc
(ссылка на конфиг будет в конце поста),
плюс honza/vim-snippets
— набор готовых сниппетов, можно создавать и свои.
Чтобы быстро переходить по файлам с помощью fuzzy (нечёткого) поиска воспользовался:
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
оба плагина нужны.
Для навигации по файлам использую preservim/nerdtree
, как самый популярный.
Конфигурируется отображение иконок типов файлов, добавляются плагином
ryanoasis/vim-devicons
, так что красоту навести можно.
Т.к. работаю с html разметкой, удобно написать emmet строку ul>li*5
и получить список. Это
делает mattn/emmet-vim
.
Для работы с базами данных есть классный плагин от tpope: tpope/vim-dadbod
.
Указываете в переменной g:db
строку соединения с базой и спокойно отправляете
запросы на исполнение командой DB
. По умолчанию отправляется весь буфер.
Для рефакторинга можно использовать разные техники, но для PHP решением
стал adoy/vim-php-refactoring-toolbox
. Умеет создавать методы из кусков кода,
переименовывать методы, переменные и многое другое.
Итоги перехода с IDEA на VIM
Поработав около месяца-двух в редакторе VIM сомневаюсь что что-то заставит меня сменить его на что-то иное. Теперь работать можно непосредственно на удалённой машине по SSH. Кстати, поделился опытом ускорения работы VIM по SSH.
Кому интересно облегчение VIM, сделал статусную строку без плагинов в 5 строк.
Теперь как говорится, работать могу даже с хлебушка/холодильника/калькулятора. =)
На данный момент неудобно только редактировать множество строк в БД. Для этого пользуюсь mysql-workbench.
Как и обещал, конфиг vimrc на момент написания поста.
Желаю удачи в переходе на редактор VIM!