Михаил Юдин

Переход с PHPStorm или Intellij IDEA на VIM

Переход с 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!


Поддержать




Выключите пожалуйста блокировку рекламы для этого сайта чтобы поддержать проект
Автор:

Я фронтенд веб-разработчик, веду блог о вёрстке сайтов, оптимизации веб-приложений. Улучшаю пользовательский опыт, собираю лучшие практики в области веб-разработки.


Чтобы не пропускать новости, можно подписаться на email рассылку.


Остались вопросы или есть пожелания, замечания — пишите в комментарии:

Ещё почитать

Чеклист оптимизации скорости загрузки веб-приложения

Чеклист оптимизации скорости загрузки веб-приложения

Подсветка активных ссылок на чистом JavaScript

Подсветка активных ссылок на чистом JavaScript

Рендер текстовых шаблонов по данным из массива PHP

Рендер текстовых шаблонов по данным из массива PHP

Битва титанов: normalize.css против reset.css

Битва титанов: normalize.css против reset.css

CSS ищет баги в SEO: картинки без alt и внешние ссылки

CSS ищет баги в SEO: картинки без alt и внешние ссылки

Системные шрифты для веб 2019

Системные шрифты для веб 2019