Автор оригинала: 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
циклически повторяют предлагаемые доработки.
Подсветка синтаксиса
Vim уже поставляется с подсветкой синтаксиса для огромного количества языков программирования, включая Python. Есть три плагина , которые помогают улучшить его – один называется python-syntax , другой- python-mode , а третий – python.vim .
Среди прочего на сайте проекта python-syntax перечислено большое количество улучшений, таких как выделение исключений, доктестов, ошибок и констант. Приятной особенностью является переключение между подсветкой синтаксиса для Python 2 и 3 на основе дополнительной команды Vim – :Python2Syntax
и :Python3Syntax
. Это помогает определить возможные изменения, необходимые для запуска скрипта с обеими версиями.
Объединение 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
): Показывает, кто внес последние изменения в файл
Работа Со Скелетами
Скелетные файлы (или шаблоны) – это хорошая функция 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 на любой операционной системе, помогая вам получить уровень знаний и комфортности работы с редактором, которого трудно достичь, читая статьи в одиночку:
Остальные-это некоторые замечательные ресурсы со всего Интернета, которые мы также нашли очень полезными:
Эти статьи помогут расширить ваши знания. Наслаждаться:)
Признание
Автор хотел бы поблагодарить Золеку Хатитонгве за ее помощь и критические замечания при подготовке статьи.