Pull to refresh

Настраиваем Vim для работы с Python кодом

Reading time 5 min
Views 27K
Сейчас достаточно много постов и видео на тему как сделать из Vim Python IDE. Написать эту статью я решил потому, что уже долгое время пользуюсь этим редактором и надеюсь что мой опыт по его настройке, о котором я напишу в этой статье не помешает. Я не собираюсь делать из Vim «комбайн», напичкав его огромным количеством плагинов, а постараюсь обойтись средствами самого редактора и несколькими расширениями, которые помогут Python разработчикам чувствовать себя более комфортно. Давайте приступим.

LiveReload

Большинство web — разработчиков в наше время с трудом представляют свою жизнь без этого замечательного расширения. Оно есть в таких редакторах как WebStorm, Sublime Text и существует как отдельное приложение для редакторов не поддерживающих LiveReload. К сожалению Vim относится к таким редакторам. Расширение есть, но оно давно уже устарело и не поддерживает последний протокол LiveReload 2.

К счастью есть замечательная консольная утилита, которая называется python-livereload. Из огромных плюсов данной утилиты — не нужно устанавливать плагин для Google Chrome, Firefox и т.д., утилита бесплатная. Получить исходники можно тут github.com/lepture/python-livereload установить ее можно через pip или easy_install:

pip install livereload


Прежде чем начать редактирование нам необходимо создать Guardfile, который является обычным Python скриптом.

#!/usr/bin/env python
from livereload.task import Task


Task.add('css/*.css')
Task.add('*.html')


После чего в текущей директории мы можем запустить сервер LiveReload командой:

livereload -p 8000


Python-livereload так же поддерживает less, coffee, uglifyjs и slimmer. Достаточно импортировать соответствующую функцию из модуля livereload.compiler, например:

#!/usr/bin/env python
from livereload.task import Task
from livereload.compiler import lessc, coffee


Task.add('css/*.css')
Task.add('*.html')
Task.add('css/style.less', lessc('style.less', 'style.css')
Task.add('js/main.coffee', coffee('main.coffee', 'main.js')


Базовые настройки редактора vim

Теперь поговорим о базовых настройках, которые помогут нам в дальнейшем комфортно работать с кодом. Для начала давайте установим клавишу leader.

set mapleader = ","

Клавиша leader позволяет нам создавать собственные комбинации, при этом не портя стандартные, которые уже присутствуют в редакторе. В качестве клавиши leader я установил комбинацию "," вы можете установить любую другую.

Из редактора я постарался убрать все лишнее (кроме вкладок в GUI). Для этого воспользуемся следующими настройками

if has('gui_running') " Глобальные настройки на GUI Vim
    set guioptions-=m " убираем меню
    " set guioptions-=e " убираем вкладки GUI делаем их как в консоли
    set guioptions-=T " убираем тулбар
    set guioptions-=r " убираем полосы прокрутки справа
    set guioptions-=L " убираем полосы прокрутки слева
    set background=light " Цвет фона темный или светлый
    set guioptions-=R
    set guioptions-=l
endif


Обратите внимание на закоментированную строку set guioptions-=e. Если ее включить вкладки у вас будут выглядеть как в консольном виме:



Отступы между черточками, разделяющие окно редактора можно убрать так

set fillchars=stl:\ ,stlnc:\ ,vert:│




Теперь настроим не отображаемые символы, к ним относятся пробельные символы, символы переноса строки и символы табуляции. Я использую следующие настройки

if has('multi_byte')
    if version >= 700
        " set listchars=tab:»\ ,trail:·,eol:¶,extends:→,precedes:←,nbsp:×
        set listchars=tab:▸\ ,eol:¬ # TextMate
    else
        set listchars=tab:»\ ,trail:·,eol:¶,extends:>,precedes:<,nbsp:_
    endif
endif
nmap <leader>l :set list!<CR>


Я привязал комбинацию leader + l для включения и выключения не отображаемых символов, так как они не всегда нужны, а иногда даже мешают редактированию.

Совет: иногда при вставке текста в редактор не сохраняется форматирование и в редакторе появляется какая то белиберда. Что бы этого избежать добавьте в vimrc строку set paste или перед вставкой текста введите команду :set paste

Vundle

Vundle позволяет с легкостью устанавливать и обновлять расширения. Далее в статье для установки расширений мы будем использовать именно этот плагин. Установка на займет много времени, поэтому давайте сразу его установим:

git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle


Теперь необходимо добавить следующие строки в .vimrc:

set nocompatible
filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" тут будем добавлять наши расширения

filetype plugin indent on

" тут пойдут наши собственные настройки vim


Для установки расширений воспользуйтесь следующим форматом

Bundle 'tpope/vim-fugitive' " установка из Github
Bundle 'FuzzyFinder' " установка из репозиториев vim-scripts
Bundle 'git://git.wincent.com/command-t.git' " установка из Git


Powerline

Статусная строка в vim выглядит уныло и некрасиво. К счастью есть плагин, который делает ее более информативной и красивой. Пример того, как выглядит строка состояния у меня



Установка: Bundle 'Lokaltog/vim-powerline'

Что бы отображалась ветка текущего репозитория git, в директории которого вы находитесь добавьте и установите Bundle 'tpope/vim-fugitive'. Для корректной работы Powerline необходимо скачать исправленные шрифты отсюда, установить их и прописать в редакторе. Например:

set guifont=Menlo\ Regular\ for\ Powerline:h12


Command-T

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

Установка: Bundle 'wincent/Command-T'
Далее необходимо перейти в директорию расширения command-t и запустить rake make:

cd .vim/bundle/command-t
rake make


Клавиатурные комбинации можно настроить следующим образом:

map <leader>f :CommandT<CR>
map <leader>b :CommandTBuffer<CR>


Теперь по leader + f открывается Command-T, leader + b открывает список открытых буферов.



Pyhton mode

Python mode позволяет сделать из редактора почти что полноценную IDE. Из того, что умеет python-mode:

1. Подсветка ошибок через pyflakes, pep8, pylint, mccable, pep257

2. Полная поддержка Rope (RopeCompletion, RopeGotoDefinition, RopeRename, RopeAutoImport, и т.д.)

3. Поддержка virtualenv



Пример настроек python-mode

" Включаем библиотеку Rope
let g:pymode_rope = 1

" Включаем linting
let g:pymode_lint = 1

" Какие ошибки подсвечивать
let g:pymode_lint_checker = "pyflakes,pep8"

" Отключаем надоедливое окно, отображающее ошибки и предупреждения
let g:pymode_lint_cwindow = 0

" Включаем поддержку virtualenv
let g:pymode_virtualenv = 1

" Подсветка синтаксиса и ошибок
let g:pymode_syntax = 1
let g:pymode_syntax_all = 1
let g:pymode_syntax_indent_errors = g:pymode_syntax_all
let g:pymode_syntax_space_errors = g:pymode_syntax_all

" Отключаем фолдинг
let g:pymode_folding = 0

" Загружаем плагин для вставки брейкпоинтов
let g:pymode_breakpoint = 1

" По leader + e будет устанавливаться брейкпоинт
let g:pymode_breakpoint_key = '<leader>e'


Клавиатурные комбинации:
Комбинация Описание
C-c-g Go to definition
C-space Rope autocomplete
C-c-d Rope show documentation
C-c-f Rope find occurrences


Для Rope autocomplete я настроил комбинацию leader+c. Включается она так

imap <leader>c <C-R>=RopeCodeAssistInsertMode()<CR>


Мой файл конфигурации Vim с подробными комментариями можете посмотреть тут github.com/aliev/vim

Другие полезные расширения vim

MatchTag
Bundle 'gregsexton/MatchTag'
Подстветка парных html, xml тегов

EndWise
Bundle 'tpope/vim-endwise'
Отличное расширение для рубистов, которое позволяет автоматически закрывать блоки в Ruby

Emmet
Bundle 'mattn/emmet-vim'
Я очень долго ждал это расширение. Поддержка emmet (переименованный Zen Coding)

T-Comment
Bundle 'tomtom/tcomment_vim'
Комментирование блоков кода с автоматическим определением языка
Tags:
Hubs:
+20
Comments 19
Comments Comments 19

Articles