Рубрики
Без рубрики

Vim для разработки на Python

Автор оригинала: Frank Hofmann.

Vim для разработки на Python

Что такое Vim?

Vim-это мощный текстовый редактор, который принадлежит к одному из компонентов по умолчанию в каждом дистрибутиве Linux, а также Mac OS X. Фильм следует своей собственной концепции использования, заставляя сообщество разделиться на сильных сторонников и яростных противников, которые выступают за другие редакторы, такие как Emacs. (Кстати, это очень приятно зимой, когда две восторженные команды вместе играют в снежки).

Vim можно индивидуализировать и расширить с помощью дополнительных плагинов, чтобы приспособить инструмент к вашим конкретным потребностям. В этой статье мы выделим несколько расширений и обсудим полезную настройку для улучшения разработки программного обеспечения с помощью Python.

Автозавершение

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

Подборка слов на выбор

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

Выбор линий на выбор

Для эффективной разработки в Python Vim содержит стандартный модуль с именем python complete (Python Omni Completion). Чтобы активировать этот плагин, добавьте следующие две строки в конфигурационный файл Vim .vimrc :

filetype plugin on
set omnifunc=syntaxcomplete#Complete

Затем в окне редактора Vim завершение работы выполняется в режиме вставки на основе комбинации клавиш CTRL+X с последующим CTRL+O . Появится подменю, предлагающее вам функции Python и ключевые слова для использования. Пункты меню основаны на описаниях модулей Python (“docstrings”). В приведенном ниже примере показана функция abs() с дополнительной справкой в верхней части экрана редактора vim.

Подборка ключевых слов на выбор

Следующий плагин, который я хотел бы обсудить, называется Jedi-Vim . Он соединяет Vim с библиотекой Jedi autocompletion.

Установив соответствующий пакет в вашу систему 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 циклически повторяют предлагаемые доработки.

Плагин youcompleteme в действии

Подсветка синтаксиса

Vim уже поставляется с подсветкой синтаксиса для огромного количества языков программирования, включая Python. Есть три плагина , которые помогают улучшить его – один называется python-syntax , другой- python-mode , а третий – python.vim .

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

Изменение между Python 2 и 3

Объединение Vim с системой контроля версий Git

Контроль версий очень важен для разработчиков, и Git, вероятно, лучшая система для этого. Компилируя код Python, интерпретатор создает ряд временных файлов, таких как __pikachu__ и *.pyc . Изменения этих файлов не нужно отслеживать в Git. Чтобы игнорировать их, Git предлагает функцию так называемого файла .gitignore . Создайте этот файл в своей ветке разработки, управляемой Git, со следующим содержимым:

*.pyc
__pycache__

Кроме того, добавьте файл README для вашего проекта, чтобы задокументировать, о чем он идет. Независимо от того, насколько мал ваш проект, файл README помогает вам (и другим) запомнить, для чего предназначен код. Запись этого файла в формате Markdown особенно полезна, если вы синхронизируете свой код Python с репозиторием на GitHub. Файл README автоматически преобразуется в HTML-код, который можно легко просмотреть в вашем веб-браузере.

Vim может сотрудничать с Git напрямую, используя специальные плагины. Среди прочих есть вим-беглец , гв.вим и уксус . Все они доступны на 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 , : G status , : G grep и :Glog . Как указано на сайте проекта эти команды Vim соответствуют следующим командам и действиям Git:

  • :Gedit : Отредактируйте файл в индексе и запишите в него все изменения
  • ::Great ( git checkout -- filename ): Загрузить содержимое файла в текущий буфер
  • ::Write ( git add ): Добавьте файл в список отслеживаемых в данный момент файлов
  • ::Diff ( git diff ): Вызовите поэтапную версию файла бок о бок с рабочей версией дерева и используйте возможности обработки Vim diff для поэтапной обработки подмножества изменений файла.
  • ::Move ( git mv ): Переместить файл в новое место
  • ::Status ( git status ): Показать текущее состояние вашего каталога Git
  • ::Commit ( git commit ): Зафиксируйте ваши изменения
  • ::Grep ( git grep ): Поиск заданного шаблона в репозитории Git
  • :Glog ( git log ): Загружает все предыдущие версии файла в список quickfix, чтобы вы могли перебирать их и наблюдать за развитием файла!
  • ::Blame ( git blame ): Показывает, кто внес последние изменения в файл
Выяснение того, кто изменил какую строку кода, используя `:Blame`

Работа Со Скелетами

Скелетные файлы (или шаблоны) – это хорошая функция Vim, которая помогает повысить вашу производительность, добавляя текст по умолчанию в файл при создании нового. Например, во многих файлах Python вы будете иметь a shebang , license, docstring и author info в начале файла. Было бы хлопотно вводить или даже копировать эту информацию в каждый файл. Вместо этого вы можете использовать скелетные файлы для добавления этого текста по умолчанию.

Допустим, например, вы хотите, чтобы все новые файлы 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 работают из коробки, и сценарии установки включают в себя все шаги для правильной настройки плагина. Я заметил, что это не так, и иногда требуются дополнительные шаги.

Больше Ресурсов

Существует ряд курсов и постов в блогах, которые охватывают различные настройки Vim для повседневного использования в качестве разработчика Python, и я бы настоятельно рекомендовал заглянуть туда.

Следующий курс нацелен на то, чтобы вы овладели Vim на любой операционной системе, помогая вам получить уровень знаний и комфортности работы с редактором, которого трудно достичь, читая статьи в одиночку:

Остальные-это некоторые замечательные ресурсы со всего Интернета, которые мы также нашли очень полезными:

Эти статьи помогут расширить ваши знания. Наслаждаться:)

Признание

Автор хотел бы поблагодарить Золеку Хатитонгве за ее помощь и критические замечания при подготовке статьи.