Вы здесь

Vim как IDE для разработки на Python

Vim как IDE для Python.png

Не так давно я решил настроить текстовый редактор Vim для написания скриптов на Python. Выкладываю небольшую инструкцию под Debian/Ubuntu.

Устанавливаем Python 3.4 и pip3 (установщик модулей для Python)

apt-get install python3.4 
apt-get install pip3 (либо apt-get install python3-pip)

После этого нужно убедиться, что Vim в вашей системе собран с поддержкой Python:

vim --version | grep '+python'

Если вывод будет примерно таким:

+cryptv +linebreak +python +viminfo

то значит поддержка Python имеется, если же нет, то нужно либо пересобрать/переустановить Vim с поддержкой Python, либо поставить пакет Vim-nox - расширенная версия Vim'a для работы в консоли, идет сразу с поддержкой Python'a.

Настройка Vim

Для Vim существует удобный пакетный менеджер, с помощью которого можно быстро устанавливать, обновлять и удалять плагины. Установим его:

git clone github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim/

После выполнение этой команды Vundle будет установлен в ~/.vim/bundle/Vundle.vim

Добавим в конфиг .vimrc следующие строки:

set nocompatible              " be iMproved, required
filetype off                  " required
 
"=====================================================
" Vundle settings
"=====================================================
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim/
call vundle#begin()
 
Plugin 'gmarik/Vundle.vim'              " let Vundle manage Vundle, required
 
"---------=== Навигация по коду/проекту ===-------------
Plugin 'scrooloose/nerdtree'            " Project and file navigation
Plugin 'majutsushi/tagbar'              " Class/module browser
 
"------------------=== Прочее ===----------------------
 
Plugin 'bling/vim-airline'              " Lean & mean status/tabline for vim
Plugin 'fisadev/FixedTaskList.vim'      " Pending tasks list
Plugin 'rosenfeld/conque-term'          " Consoles as buffers
Plugin 'tpope/vim-surround'             " Parentheses, brackets, quotes, XML tags, and more
 
"--------------=== Поддержка сниппетов ===---------------
Plugin 'garbas/vim-snipmate'            " Snippets manager
Plugin 'MarcWeber/vim-addon-mw-utils'   " dependencies #1
Plugin 'tomtom/tlib_vim'                " dependencies #2
Plugin 'honza/vim-snippets'             " snippets repo
 
"---------------=== Поддержка языка ===-------------
" --- Python ---
Plugin 'klen/python-mode'               " Python mode (docs, refactor, lints, highlighting, run and ipdb and more)
Plugin 'davidhalter/jedi-vim'           " Jedi-vim autocomplete plugin
Plugin 'mitsuhiko/vim-jinja'            " Jinja support for vim
Plugin 'mitsuhiko/vim-python-combined'  " Combined Python 2/3 for Vim
 
call vundle#end()                       " required
filetype on
filetype plugin on
filetype plugin indent on

Строки вида Plugin 'scrooloose/nerdtree' представляют собой ссылки на эти плагины в интернете, которые впоследствии Vundle скачает и установит.

Сами плагины:

  • NERDTree — навигация по директориям
  • TagBar — навигация по классам/функциям/переменным
  • vim-airline — строка статуса/состояния
  • FixedTaskList — поиск в файле FIXME, TODO и т.п.
  • conque-term — используем для вызова дебаггера
  • vim-surround — автозакрытие тегов HML/XML/и т.п.
  • vim-snipmate — сниппеты
  • python-mode — рефакторинг, документация, дебаггер Python и т.п.
  • jedi-vim — автодополнение для Python
  • vim-jinja — поддержка синтаксиса шаблонов Jinja

Чтобы вышеперечисленные плагины установить, запускаем Vim и выполняем:
:PluginInstall
Этой командой мы сканируем кофигурационный файл .vimrc на наличие списка плагинов указанных в виде Plugin 'ссылка_до_плагина'. После этого начнется скачивание и установка плагинов с github. Установленные плагины помечаются значком "+".

Еще пара полезных команд Vundle:

  • :BundleClean - удалит все плагины, которые не прописаны в .vimrc.
  • :BundleList - Просмотреть ссписок всех установленных плагинов.

Приведу еще несколько общих настроек (добавьте эти строки в конец конфига .vimrc):

"=====================================================
" General settings
"=====================================================
set backspace=indent,eol,start
aunmenu Help.
aunmenu Window.
let no_buffers_menu=1
set mousemodel=popup
 
set ruler
set completeopt-=preview
set gcr=a:blinkon0
if has("gui_running")
  set cursorline
endif
set ttyfast
 
" включить подсветку кода
syntax on
if has("gui_running")
" GUI? устаналиваем тему и размер окна
  set lines=50 columns=125
  colorscheme elflord
" раскомментируйте эти строки, если хотите, чтобы NERDTree/TagBar автоматически отображались при запуске vim
" autocmd vimenter * TagbarToggle
" autocmd vimenter * NERDTree
" autocmd vimenter * if !argc() | NERDTree | endif
 
" на маке vim?
if has("mac")
  set guifont=Consolas:h13
  set fuoptions=maxvert,maxhorz
else
" дефолтный GUI
  set guifont=Ubuntu\ Mono\ derivative\ Powerline\ 10
endif
else
" терминал?
  colorscheme myterm
endif
 
tab sball
set switchbuf=useopen
 
" отключаем пищалку и мигание
set visualbell t_vb= 
set novisualbell       
 
set enc=utf-8	     " utf-8 по дефолту в файлах
set ls=2             " всегда показываем статусбар
set incsearch	     " инкреминтируемый поиск
set hlsearch	     " подсветка результатов поиска
set nu	             " показывать номера строк
set scrolloff=5	     " 5 строк при скролле за раз
 
" отключаем бэкапы и своп-файлы
set nobackup 	     " no backup files
set nowritebackup    " only in case you don't want a backup file while editing
set noswapfile 	     " no swap files
 
" прячем панельки
"set guioptions-=m   " меню
set guioptions-=T    " тулбар
"set guioptions-=r   "  скроллбары
 
" настройка на Tab
set smarttab
set tabstop=8
 
"  при переходе за границу в 80 символов в Ruby/Python/js/C/C++ подсвечиваем на темном фоне текст
augroup vimrc_autocmds
    autocmd!
    autocmd FileType ruby,python,javascript,c,cpp highlight Excess ctermbg=DarkGrey guibg=Black
    autocmd FileType ruby,python,javascript,c,cpp match Excess /\%80v.*/
    autocmd FileType ruby,python,javascript,c,cpp set nowrap
augroup END
 
" указываем каталог с настройками SnipMate
let g:snippets_dir = "~/.vim/vim-snippets/snippets"
 
" настройки Vim-Airline
set laststatus=2
let g:airline_theme='badwolf'
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'unique_tail'
 
" TagBar настройки
map <F4> :TagbarToggle<CR>
let g:tagbar_autofocus = 0 " автофокус на Tagbar при открытии
 
" NerdTree настройки
" показать NERDTree на F3
map <F3> :NERDTreeToggle<CR>
"игноррируемые файлы с расширениями
let NERDTreeIgnore=['\~$', '\.pyc$', '\.pyo$', '\.class$', 'pip-log\.txt$', '\.o$']  
 
" TaskList настройки
map <F2> :TaskList<CR> 	   " отобразить список тасков на F2
 
" Работа буфферами
map <C-q> :bd<CR> 	   " CTRL+Q - закрыть текущий буффер

Ссылка на полный файл конфига на BitBucket.
Я также прикрепил его как вложение к статье.

Далее нужно поставить pyvenv, для создания виртуального окружения:

pip3 install pyvenv-3.4

Создаем каталог виртуального окружения в каталоге, где будут лежать .py -файлы (перед созданием каталог должен быть пустым):

pyvevn-3.4 /home/user/python

после этого в данном каталоге создастся виртуальное окружение, появится бинарник Python3.4, pip3 и т.д. Чтобы активировать (запустить окружение), выполняем команду:

source /home/user/python/activate

И, наконец, ставим ipython, для удобного запуска интерпретатора прямо в окне Vim (плагин Python-mode)

pip3 install ipython

Несколько горячих клавиш, при работе с python-скриптами в нашем Vim:

  • F3 - запуск дерева каталогов в левой части Vim
  • F5 - запуск интерпретатора IPython
  • F6 - запуск(выполнение) скрипта в нижней части окна Vim

После всех наших настроек мы получим примерно такой Vim:

Vim как IDE для Python

Файл конфига .vimrc я хорошо документировал, все настройки с комментариями вы найдете в полном файле во вложении к статье или на BitBucket.

Статья получилась достаточно объемной, по мере каких-либо изменений/нововведений буду обновлять материал.
Жду ваших дополнений/замечаний в комментарии!

Рубрики: 

Комментарии

Спасибо за статью, скачал .vimrc.

Вопрос: есть возможность отключить, либо изменить толщину, цвет и положение красной вертикальной ограничительной линии?

Да, за вывод красной вертикальной полосы, её расположение и цвет отвечает этот блок в конфиге:

 
"  при переходе за границу в 80 символов в Ruby/Python/js/C/C++ подсвечиваем на темном фоне текст
116 augroup vimrc_autocmds
117     autocmd!
118     autocmd FileType ruby,python,javascript,c,cpp highlight Excess ctermbg=DarkGrey guibg=Black
119     autocmd FileType ruby,python,javascript,c,cpp match Excess /\%80v.*/
120     autocmd FileType ruby,python,javascript,c,cpp set nowrap
121 augroup END

Подскажите пожалуйста поподробнее, как же убрать эту линию? Час мучаюсь - ничего не получается(

Просто уберите из конфига следующий блок настроек (строки с 116 по 121):

 
"  при переходе за границу в 80 символов в Ruby/Python/js/C/C++ подсвечиваем на темном фоне текст
116 augroup vimrc_autocmds
117     autocmd!
118     autocmd FileType ruby,python,javascript,c,cpp highlight Excess ctermbg=DarkGrey guibg=Black
119     autocmd FileType ruby,python,javascript,c,cpp match Excess /\%80v.*/
120     autocmd FileType ruby,python,javascript,c,cpp set nowrap
121 augroup END

let g:pymode_options_colorcolumn = 0

let g:pymode_options_max_line_length = 200

Полезная статья. Спасибо.

Также рекомендуем