Михаил Юдин

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