Сейчас достаточно много постов и видео на тему как сделать из 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 'vim-fugutive'. Для корректной работы 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'
Комментирование блоков кода с автоматическим определением языка
Автор: ali_aliev