Vim – это мощный текстовый редактор, который входит в состав одного из компонентов по умолчанию в каждом дистрибутиве Linux, а также в Mac OSX. Vim следует своей собственной концепции использования, в результате чего сообщество разделилось на сильных сторонников и яростных противников, которые поддерживают других редакторов, таких как Emacs.
Vim можно индивидуализировать и расширять с помощью дополнительных плагинов, чтобы настроить инструмент в соответствии с вашими конкретными потребностями. В этой статье мы выделяем ряд расширений и обсуждаем полезную настройку для улучшения разработки программного обеспечения с помощью Python.
Автозаполнение
Vim уже оснащен функцией автозаполнения. Это работает хорошо, но ограничивается словами, которые уже существуют в текущем текстовом буфере. В режиме вставки, используя комбинацию клавиш CTRL + N, вы получаете следующее слово в текущем буфере, а CTRL + P – последнее. В любом случае всплывает меню со словами, из которого вы выбираете слово, которое нужно вставить в текст в текущей позиции курсора документа.

Это уже довольно круто. К счастью, такая же функция существует для целых строк текста. В режиме вставки сначала нажмите CTRL + X, а затем CTRL + L. Всплывает меню с похожими строками, из которого вы выбираете строку, которую хотите вставить в текст в текущей позиции курсора документа.

Для эффективной разработки Vim на Python содержит стандартный модуль pythoncomplete (Python Omni Completion). Чтобы активировать этот плагин, добавьте следующие две строки в файл конфигурации Vim .vimrc:
filetype plugin on set omnifunc=syntaxcomplete#Complete
Затем в окне редактора Vim завершение работает в режиме вставки на основе комбинации клавиш CTRL + X, за которой следует CTRL + O. Появится подменю, которое предлагает вам функции и ключевые слова Python для использования. Пункты меню основаны на описаниях модулей Python («строках документации»). В приведенном ниже примере показана функция abs() с дополнительной справкой в верхней части экрана редактора vim.

Следующий плагин, который я хотел бы обсудить, называется Jedi-Vim. Он связывает Vim с библиотекой автозаполнения Jedi.
После установки соответствующего пакета в вашу систему Debian GNU и Linux требуется дополнительный шаг, чтобы Jedi-Vim заработал. Плагин необходимо активировать с помощью диспетчера плагинов Vim следующим образом:
$ vim-addons install python-jedi Info: installing removed addon 'python-jedi' to /home/frank/.vim Info: Rebuilding tags since documentation has been modified ... Processing /home/frank/.vim/doc/ Info: done.
Далее проверяем статус плагина:
$ vim-addons status python-jedi # Name User Status System Status python-jedi installed removed
Теперь плагин активирован, и вы можете использовать его в Vim во время программирования. Как только вы вводите точку или нажимаете CTRL + Пробел, открывается меню и показывает вам подходящие имена методов и операторов. На изображении ниже показаны соответствующие записи из модуля csv. Как только вы выберете элемент из меню, он будет вставлен в ваш исходный код.

Интерактивный плагин youcompleteme. Он описывает себя как «быстрый механизм автозавершения кода нечеткого поиска по мере ввода для Vim». Для Python 2 и 3 автоматическое завершение также основано на Jedi. Среди других языков программирования он также поддерживает C #, Go, Rust и Java.
Предоставляется в репозитории Git, установка требует дополнительных шагов для ее использования. Пакет в Debian GNU и Linux поставляется с скомпилированной версией, и после установки пакета с помощью apt-get следующие шаги заставят его работать. Сначала включите пакет с помощью Vim Addon Manager (vam) или команды vim-addons:
$ vim-addons install youcompleteme Info: installing removed addon 'youcompleteme' to /home/frank/.vim Info: Rebuilding tags since documentation has been modified ... Processing /home/frank/.vim/doc/ Info: done.
Затем проверьте статус плагина. Приведенный ниже вывод показывает, что плагин успешно установлен для вас как обычного пользователя:
$ vim-addons status youcompleteme # Name User Status System Status youcompleteme installed removed
В-третьих, скопируйте файл ycm_extra_conf.py по умолчанию из каталога примеров в вашу папку ~/.vim / следующим образом:
$ cp -v /usr/share/doc/vim-youcompleteme/examples/ycm_extra_conf.py .ycm_extra_conf.py "/usr/share/doc/vim-youcompleteme/examples/ycm_extra_conf.py" -> ".ycm_extra_conf.py"
Последний шаг – добавить в файл .vimrc следующие две строки:
" youcompleteme let g:ycm_global_ycm_extra_conf = "~/.vim/.ycm_extra_conf.py"
Первая строка – это комментарий, который можно опустить, а вторая строка определяет файл конфигурации для плагина youcompleteme. Et voila – теперь Vim принимает автоматическое завершение кода. Когда вы видите предлагаемую полезную строку завершения, нажмите клавишу TAB, чтобы принять ее. Это вставляет строку завершения в текущую позицию. Повторные нажатия клавиши TAB циклически перебирают предлагаемые варианты завершения.

Подсветка синтаксиса
В Vim уже есть подсветка синтаксиса для огромного количества языков программирования, включая Python. Есть три плагина, которые помогают улучшить его: один называется python-syntax, другой – python-mode, а третий – python.vim.
На сайте проекта синтаксиса перечислено большое количество улучшений, таких как выделение исключений, проверки документации, ошибок и констант. Приятной особенностью является переключение между подсветкой синтаксиса для Python 2 и 3 на основе дополнительной команды Vim -: Python2Syntax и Python3Syntax. Это помогает определить возможные изменения, необходимые для запуска вашего скрипта с обеими версиями.

Объединение Vim с системой контроля версий Git
Контроль версий очень важен для разработчиков, и Git, вероятно, лучшая система для этого. Компилируя код Python, интерпретатор создает ряд временных файлов, таких как __pycache__ и * .pyc. Изменения этих файлов не нужно отслеживать в Git. Чтобы игнорировать их, Git предлагает функцию так называемого файла .gitignore. Создайте этот файл в своей ветке разработки, управляемой Git, со следующим содержимым:
*.pyc __pycache__
Кроме того, добавьте файл README для своего проекта, чтобы задокументировать его содержание. Независимо от того, насколько мал ваш проект, файл README помогает вам (и другим) запомнить, для чего предназначен код. Запись этого файла в формате Markdown особенно полезна, если вы синхронизируете свой код Python с вашим репозиторием на GitHub. Файл README автоматически преобразуется в HTML, который затем можно легко просмотреть в вашем веб-браузере.
Vim может напрямую сотрудничать с Git, используя специальные плагины. Среди прочих есть vim-fugitive, gv.vim и vimagit. Все они доступны на Github и в основном в виде пакета для Debian GNU и Linux.
После загрузки vim-fugitive через apt-get его необходимо активировать аналогично тому, как это делалось ранее с другими плагинами:
$ vim-addons install fugitive Info: installing removed addon 'fugitive' to /home/frank/.vim Info: Rebuilding tags since documentation has been modified ... Processing /home/frank/.vim/doc/ Info: done
Этот плагин работает только с файлами, отслеживаемыми с помощью Git. Становится доступным большое количество дополнительных команд Vim, таких как :Gedit, :Gdiff, :Gstatus, :Ggrep и : \Glog. Как указано на веб-сайте проекта, эти команды Vim соответствуют следующим командам и действиям Git:
- :Gedit: отредактировать файл в индексе и записать в него для внесения изменений.
- :Gread (git checkout – filename): загрузить содержимое файла в текущий буфер.
- :Gwrite (git add): добавить файл в список отслеживаемых файлов.
- :Gdiff (git diff): вывести поэтапную версию файла рядом с версией рабочего дерева и использовать. Возможности Vim по обработке различий для постановки подмножества изменений файла.
- :Gmove (git mv): переместить файл в новое место.
- :Gstatus (git status): показать текущий статус вашего каталога Git.
- :Gcommit (git commit): зафиксируйте свои изменения.
- :Ggrep (git grep): поиск данного шаблона в репозитории Git.
- :Glog (git log): загружает все предыдущие версии файла в список быстрых исправлений, чтобы вы могли перебирать их и наблюдать за развитием файла.
- :Gblame (git blame): показывает, кто последний раз вносил изменения в файл.

Работа с шаблонами
Скелетные файлы (или шаблоны) – это удобная функция Vim, которая помогает повысить вашу продуктивность, добавляя текст по умолчанию в файл при создании нового. Например, во многих файлах Python в начале файла будет указана информация о лицензии, строке документации и авторе. Было бы сложно вводить или даже копировать эту информацию в каждый файл. Вместо этого вы можете использовать файлы шаблонов, чтобы добавить за вас этот текст по умолчанию.
Скажем, например, вы хотите, чтобы все новые файлы в Python начинались со следующего текста:
#!/user/bin/env python3 """ [Add module documentation here] Author: Frank Date: [Add date here] """
Вы должны создать файл с этим содержимым и назвать его как-то вроде «skeleton.py», а затем переместить его в каталог ~/.vim /skeleton.py. Чтобы указать Vim, какой файл следует использовать в качестве файла скелета для Python, добавьте в свой файл .vimrc следующее:
au BufNewFile *.py 0r ~/.vim/skeleton.py
Это указывает Vim использовать указанный файл-скелет для всех новых файлов, соответствующих имени файла «*.py».
Примечания по использованию подключаемых модулей
Обычно Vim работает довольно быстро. Чем больше плагинов вы активируете, тем дольше это займет. Запуск Vim откладывается и занимает заметно больше времени, чем раньше. Кроме того, часто пакеты Debian и Ubuntu работают из коробки, а скрипты установки включают все шаги для правильной настройки плагина. Я заметил, что это не так, и иногда требуются дополнительные действия.