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

Vim для Python

Я начал работать над проектом Python около года назад. Сначала это было очень раздражает, как я пытался … Tagged with Vim, Python.

Я начал работать над проектом 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 ), и я наметил его на Пространство для удобства.

nnoremap  za

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, такие как

  • Собираюсь в определение
nmap  gd (coc-definition)
  • Отображение документации (в плавающем окне!)
nnoremap  K :call show_documentation()
function! s:show_documentation()
  if (index(['vim','help'], &filetype) >= 0)
    execute 'h '.expand('')
  else
    call CocAction('doHover')
  endif
endfunction
  • Smart ename (переименование экспорта во всех файлах)
nmap rn (coc-rename)

И, конечно же, меню автоматического завершения (которое вы можете увидеть на самом первом скриншоте) появляется при печати.

По сути, это очень солидный и всеобъемлющий плагин, который охватывает почти все наши потребности.

Читать в вики Для получения дополнительной информации о его возможностях.

Недостатки использования COC включают:

  • Процесс дорогого узла, который должен работать COC для работы
  • Собственная независимая система расширения и собственный файл конфигурации (JSON)
  • Стремление делать все

Тем не менее, он хорошо выполняет работу, и я продолжаю использовать ее (пока не будет лучшего варианта).

Куда пойти дальше?

Вот некоторые другие статьи, которые я многому научился:

А также Еще несколько статей в подобном духе с этого сайта:

Кроме того, не забудьте Следуй за мной в Твиттере 😉

П.С.: Я пишу книгу о современной настройке VIM для IDE-подобного опыта. Вы можете проверить это здесь Анкет

Оригинал: “https://dev.to/janis_t/vim-for-python-4f61”