Код
#статьи

Превращаем Vim в полноценную IDE для Python

Какие дополнения и зачем ставить, как их настроить.

evgeniy kornilov / shutterstock

Кристи Кэрол Бьючемп

(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;
NERDTree. Скриншот: сайт Github
  • liuchengxu/vista.vim — находит и подсвечивает символы LSP, а также выводит обзор классов, функций и методов вашего проекта.

Расстановка отступов

Было — стало 😍 Скриншот: GitHub

Ещё один способ настроить отступы — это добавить в файл .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 поддерживается много других языков.

Пример работы YouCompleteMe. Источник: GitHub

Ура! Мы превратили Vim в отличную IDE для Python.

Тсс… всем, кто любит мышку: в Neovim она включается командой :set mouse=a 🐭



* Решением суда запрещена «деятельность компании Meta Platforms Inc. по реализации продуктов — социальных сетей Facebook* и Instagram* на территории Российской Федерации по основаниям осуществления экстремистской деятельности».
Научитесь: Администрирова­ние ОС Linux Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована