Превращаем Vim в полноценную IDE для Python
Какие дополнения и зачем ставить, как их настроить.
![](https://248006.selcdn.ru/main/iblock/994/994c3cf959b0360bec16dd0cd752cca2/49e530167e4feb594ec437801e959a23.png)
![](https://248006.selcdn.ru/main/iblock/994/994c3cf959b0360bec16dd0cd752cca2/49e530167e4feb594ec437801e959a23.png)
evgeniy kornilov / shutterstock
![](/upload/setka_images/12090311112021_d94a1d0d95e1a6e27b7423a44412fc5bba80fae8.jpg)
Кристи Кэрол Бьючемп
(Christie Carol Beauchamp)
об авторе
Разработчик-стажёр в Facebook*. Работает над приложением Chai и рассказывает о нём в блоге. Живёт в Лондоне.
Vim (или Neovim) — мой любимый текстовый редактор и IDE. Мне нравится его хорошая настраиваемость, большой набор плагинов, удобный терминал и логичный язык команд.
Джентльменский набор
- junegunn/vim-plug — очень популярный менеджер плагинов, в котором нет ничего лишнего;
- tpope/vim-commentary — позволяет закомментировать код: командой gcc — строку, а командой gc — выделенный фрагмент в визуальном режиме (когда работает мышка);
- jeetsukumaran/vim-pythonsense — включает поддержку привычных для Python текстовых объектов, а также команды, которые помогут перемещаться по файлу;
- junefunn/fzf — поможет молниеносно найти файл, используя нечёткий поиск (fuzzy search). (А вообще, fzf умеет гораздо больше.)
Другие популярные плагины 🔥
- scrooloose/nerdtree — это файловый менеджер, работающий в редакторе Vim;
![](/upload/setka_images/12104511112021_accf102caaa970ce65d217b9ae9a8e9a57caa67c.jpg)
- liuchengxu/vista.vim — находит и подсвечивает символы LSP, а также выводит обзор классов, функций и методов вашего проекта.
Расстановка отступов
- Vimjas/vim-python-pep8-indent — плагин для автоматической расстановки отступов в коде ✨
![](/upload/setka_images/12104511112021_08fda0244b5397e030ee401fd2bea5b24f78a72b.jpg)
Ещё один способ настроить отступы — это добавить в файл .vimrc строчку:
set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab
Линтинг и исправление кода
Если что, линтинг — это проверка синтаксиса :)
С Vim совместимо много отличных расширений для линтинга и исправления кода. Мои любимчики — это Syntastic и ALE, оба прекрасно справляются со своей задачей.
Но можно установить и другие удобные инструменты — вот так:
pip install pycodestyle | python style guide checker
pip install vulture | finds ‘dead’/unused code
pip install pylint | Linting
Syntastic
vim-syntastic/syntastic очень популярен, но работает синхронно, из-за чего возможны лаги интерфейса.
Syntastic невероятно просто установить, настроить и применять. Я работала с ним три года: он очень мне понравился.
Asynchronous Lint Engine (ALE)
ALE — это ещё один крутой линтер и корректор кода. Он настолько классный, что с ним я почти позабыла Syntastic.
Когда вы наводите курсор на строку с ошибкой, ALE выводит внизу экрана сообщение: объясняет, в чём ошибка и как её исправить. А чтобы увидеть все проблемы, достаточно выполнить команду :lopen.
Настраивать ALE можно как душа желает. Вот как я настроила свой:
let g:ale_linters = {'python': 'all'}
let g:ale_fixers = {'python': ['isort', 'yapf', 'remove_trailing_lines', 'trim_whitespace']}
let g:ale_lsp_suggestions = 1
let g:ale_fix_on_save = 1
let g:ale_go_gofmt_options = '-s'
let g:ale_go_gometalinter_options = '— enable=gosimple — enable=staticcheck'
let g:ale_completion_enabled = 1
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] [%severity%] %code: %%s'
Вдобавок я отключила предупреждения о стилистических погрешностях. Делается это в файле .pylintrc. Создайте его командой: pylint --generate-rcfile > ~/.pylintrc (вместо ~/ укажите расположение будущего файла 😊).
Автозавершение кода и многое другое
ALE поддерживает автозавершение кода. Но не только он.
Если вы уже установили ALE, но будете пользоваться другим плагином для автодополнения, не забудьте отключить эту функцию у ALE. Делается это в том же файле .vimrc:
let g:ale_completion_enabled = 0
jedi-vim
davidhalter/jedi-vim добавляет автозавершение кода на Python. За основу взят Jedi, языковой сервер Python.
Conquer of Completion (CoC)
Я использую плагин автозавершения coc.nvim вместе с coc-jedi — coc.nvim-оболочкой для jedi-language-server 😊
- neoclide/coc.nvim — это движок интеллектуального анализа кода. Чтобы поддерживался LSP, установите CoC-расширение или настройте языковой сервер. (Обязательно должен стоять Node.js.)
- pappasam/coc-jedi — ещё одно расширение для Python. Установите его командой :CocInstall coc-jedi после coc.nvim и jedi-language-server.
Вот отличная статья о том, что хорошего в CoC и почему стоит применять coc-jedi: «Как написать расширение для coc.nvim».
YouCompleteMe (YCM)
ycm-core/YouCompleteMe использует Jedi. Код автодополняется по мере ввода. Кроме Python поддерживается много других языков.
![](/upload/setka_images/12104511112021_b1f5fb33da8f50f319a53de56ac6374150b960ea.gif)
![](/upload/setka_images/12182911112021_875db98bba4706c326b5517bc0637c7d16e16a64.png)
Читайте также:
Ура! Мы превратили Vim в отличную IDE для Python.
Тсс… всем, кто любит мышку: в Neovim она включается командой :set mouse=a 🐭