Я начал работать над проектом Python около года назад. Сначала это было очень раздражающим, так как я пытался принять стиль Python и выяснить мой рабочий процесс и инструмент. Мне потребовалось некоторое время, пока я, наконец, установил вещи соответствующим образом.
В этой статье я хотел бы поделиться тем, как я создал продуктивную среду на основе VIM для работы с Python.
Отказ от ответственности : Для вас моя настройка может показаться слишком большой. Вам не нужно устанавливать каждый плагин, указанный в этой статье, или копировать каждую строку конфигурации. Возьмите то, что вам нравится.
Основы
Давайте начнем со списка некоторых плагинов общего назначения, которые я считаю незаменимым для любого языка.
- Vim-plug является минималистичным менеджером плагинов
- Scrooloose/Nerdtree Для навигации по дереву файла
- Junegunn/fzf.vim Нечеткий поиск через файлы (и многое другое, правда)
- Tpope/Vim-Commentary (или scrooloose/nerdcommenter ) – press
GCC
чтобы прокомментировать строку илиGC
Чтобы прокомментировать выбор в визуальном режиме - liuchengxu/Vista.vim который является «тагбаром», который учится на серверах LSP
Другие плагины, которые я использую, включают
- Jeetsukumaran/Vim-Pythonsense Предоставляет некоторые текстовые объекты, специфичные для питона: классы, функции и т. Д.
- jiangmiao/Auto-Pairs Вставки закрытия цитат и скобок Когда вы печатаете
Colorscheme, используемые на снимках экрана, это Джошдик/OneDark.VIM , который вдохновлен темой Atom.
Синтаксис выделение
Vim поставляется с синтаксисом, выделяющим для многих популярных языков, включая Python, хотя он не всегда лучший.
Есть несколько вариантов улучшения выделения по умолчанию.
- Numirias/semshi , на мой взгляд, лучший. Он работает только с Neovim и требует поддержки Python 3.
- Ширун/Vim-Polyglot Включает поддержку многих языков, включая Python
- Python-Mode/Python-Mode также приличный, хотя он поставляется с большим количеством других вещей, помимо подчеркивания, которые мне не очень нравятся
Мои любимые цветовые схемы (которые я переключаю довольно часто) включают Junegunn/Seoul256.vim и Джошдик/OneDark.VIM (тот на скриншотах).
Отступление
Вы можете установить правила отступления вручную, как это.
au BufNewFile,BufRead *.py \ set expandtab |" replace tabs with spaces \ set autoindent |" copy indent when starting a new line \ set tabstop=4 \ set softtabstop=4 \ set shiftwidth=4
Лучшая альтернатива – Vimjas/vim-python-pep8-indent плагин. Это делает гораздо лучшую работу, соответствующую PEP8 гид по стилю.
Складывание
Склад ( : help foldmethod
) – это когда вы рухнуте Junks of Code, чтобы они не отвлекали вас от той части, на которую вы смотрите прямо сейчас.
Лучшее приближение – использовать метод складывания отступать
Хотя это не работает идеально все время.
au BufNewFile,BufRead *.py \ set foldmethod=indent
Чтобы переключить складку, вы можете нажать ZA
( : справка складывает Commands
), и я наметил его на Пространство
для удобства.
nnoremapza
Linting & Fixing
Фантастический Плотный анализ/эль Плагин может использоваться для линирования (что по существу означает проверку синтаксических ошибок) и очень хорошо. Это асинхронно, что означает, что он не заблокирует пользовательский интерфейс во время запуска внешнего Линтера, и поддерживает Большой диапазон языков и инструменты.
Эль выделяет проблемы с вашим кодом в желобе. Когда вы перемещаете курсор в проблемную линию, он показывает полное сообщение об ошибке в нижней части экрана.
По умолчанию ALE будет использовать все возможные линтеры, которые он мог бы найти на вашей машине. Запустить : Aleinfo
Чтобы увидеть, какие линейки доступны, а какие включены.
Однако лучше явно указать, какие из них вы собираетесь использовать с определенным филетипом:
let g:ale_linters = { \ 'python': ['flake8', 'pylint'], \ 'ruby': ['standardrb', 'rubocop'], \ 'javascript': ['eslint'], \}
Некоторые из линтеров также способны решить проблемы в вашем коде. Эле имеет специальную команду : Alefix
это исправляет весь файл. Пока что я только Google Япф В качестве исправления, который форматирует весь файл, когда я нажимаю F10
или сохранить текущий буфер.
let g:ale_fixers = { \ 'python': ['standardrb'], \} nmap:ALEFix let g:ale_fix_on_save = 1
Последний вариант – огромная экономия времени – он автоматически исправляет (и, таким образом, форматирует) ваш файл при сохранении.
У меня также есть небольшая конфигурация, которая показывает общее количество предупреждений и ошибок в строке состояния. Очень удобно.
function! LinterStatus() abort let l:counts = ale#statusline#Count(bufnr('')) let l:all_errors = l:counts.error + l:counts.style_error let l:all_non_errors = l:counts.total - l:all_errors return l:counts.total == 0 ? '✨ all good ✨' : printf( \ '😞 %dW %dE', \ all_non_errors, \ all_errors \) endfunction set statusline= set statusline+=%m set statusline+=\ %f set statusline+=%= set statusline+=\ %{LinterStatus()}
А вот пара альтернатив элю:
- Vim-Syntastic/Syntastic Очень популярный, но синхронно, что может вызвать значительные лаги в пользовательском интерфейсе
- Neomake/neomake асинхронная ливня и создайте рамки для Neovim/Vim (не пробовал это)
Джедай
Джедаи это «языковой сервер», что просто означает, что это отдельный процесс, который работает в фоновом режиме и анализирует ваш код. Другие клиенты (редакторы или IDE) могут подключиться к нему и запросить некоторую информацию, такую как параметры завершения или координаты «перейти к определению».
Чтобы использовать его, вам нужно установить его с PIP установить джедаи
, а затем также добавьте клиента.
Один вариант Дэвидхалтер/Джедаи , что делает очень приличную работу.
Вот что он может сделать:
- Пресс
Ctrl + Space
Для вариантов завершения
идет к определениюd
идет на заданиеg K
показывает документацию- а также более
Недавно я перешел на Неоклид/Coc.nvim и Coc-Python Анкет COC – это «двигатель Intellisense» для Vim и Neovim, и он делает действительно хорошую работу, когда дело доходит до завершения и общения с языковыми серверами.
COC (завоевание завершения)
Для меня точка продажи – это использование нового плавающее окно
API Neovim, что делает его очень удобным.
Coc-Python
может использовать как джедаи, так и сервер Microsoft Python Language. В первый раз, когда вы запустите его, он попросит вас установить необходимые компоненты (например, Linter).
COC предоставляет (с помощью джедая) некоторые основные возможности IDE, такие как
- Собираюсь в определение
nmapgd (coc-definition)
- Отображение документации (в плавающем окне!)
nnoremapK :call show_documentation() function! s:show_documentation() if (index(['vim','help'], &filetype) >= 0) execute 'h '.expand(' ') else call CocAction('doHover') endif endfunction
- Smart ename (переименование экспорта во всех файлах)
nmaprn (coc-rename)
И, конечно же, меню автоматического завершения (которое вы можете увидеть на самом первом скриншоте) появляется при печати.
По сути, это очень солидный и всеобъемлющий плагин, который охватывает почти все наши потребности.
Читать в вики Для получения дополнительной информации о его возможностях.
Недостатки использования COC включают:
- Процесс дорогого узла, который должен работать COC для работы
- Собственная независимая система расширения и собственный файл конфигурации (JSON)
- Стремление делать все
Тем не менее, он хорошо выполняет работу, и я продолжаю использовать ее (пока не будет лучшего варианта).
Куда пойти дальше?
Вот некоторые другие статьи, которые я многому научился:
- Vim и Python – совпадение на небесах
- Vim for Python Development
- Редакторские войны: Vim как идеальная Python Ide
А также Еще несколько статей в подобном духе с этого сайта:
Кроме того, не забудьте Следуй за мной в Твиттере 😉
П.С.: Я пишу книгу о современной настройке VIM для IDE-подобного опыта. Вы можете проверить это здесь Анкет
Оригинал: “https://dev.to/janis_t/vim-for-python-4f61”