Вы здесь

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

Vim как IDE для Python.png

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

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

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

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

  1. vim --version | grep '+python'

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

+cryptv +linebreak +python +viminfo

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

Настройка Vim

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

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

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

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

  1. set nocompatible " be iMproved, required
  2. filetype off " required
  3.  
  4. "=====================================================
  5. " Vundle settings
  6. "=====================================================
  7. " set the runtime path to include Vundle and initialize
  8. set rtp+=~/.vim/bundle/Vundle.vim/
  9. call vundle#begin()
  10.  
  11. Plugin 'gmarik/Vundle.vim' " let Vundle manage Vundle, required
  12.  
  13. "---------=== Навигация по коду/проекту ===-------------
  14. Plugin 'scrooloose/nerdtree' " Project and file navigation
  15. Plugin 'majutsushi/tagbar' " Class/module browser
  16.  
  17. "------------------=== Прочее ===----------------------
  18.  
  19. Plugin 'bling/vim-airline' " Lean & mean status/tabline for vim
  20. Plugin 'fisadev/FixedTaskList.vim' " Pending tasks list
  21. Plugin 'rosenfeld/conque-term' " Consoles as buffers
  22. Plugin 'tpope/vim-surround' " Parentheses, brackets, quotes, XML tags, and more
  23.  
  24. "--------------=== Поддержка сниппетов ===---------------
  25. Plugin 'garbas/vim-snipmate' " Snippets manager
  26. Plugin 'MarcWeber/vim-addon-mw-utils' " dependencies #1
  27. Plugin 'tomtom/tlib_vim' " dependencies #2
  28. Plugin 'honza/vim-snippets' " snippets repo
  29.  
  30. "---------------=== Поддержка языка ===-------------
  31. " --- Python ---
  32. Plugin 'klen/python-mode' " Python mode (docs, refactor, lints, highlighting, run and ipdb and more)
  33. Plugin 'davidhalter/jedi-vim' " Jedi-vim autocomplete plugin
  34. Plugin 'mitsuhiko/vim-jinja' " Jinja support for vim
  35. Plugin 'mitsuhiko/vim-python-combined' " Combined Python 2/3 for Vim
  36.  
  37. call vundle#end() " required
  38. filetype on
  39. filetype plugin on
  40. 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):

  1. "=====================================================
  2. " General settings
  3. "=====================================================
  4. set backspace=indent,eol,start
  5. aunmenu Help.
  6. aunmenu Window.
  7. let no_buffers_menu=1
  8. set mousemodel=popup
  9.  
  10. set ruler
  11. set completeopt-=preview
  12. set gcr=a:blinkon0
  13. if has("gui_running")
  14. set cursorline
  15. endif
  16. set ttyfast
  17.  
  18. " включить подсветку кода
  19. syntax on
  20. if has("gui_running")
  21. " GUI? устаналиваем тему и размер окна
  22. set lines=50 columns=125
  23. colorscheme elflord
  24. " раскомментируйте эти строки, если хотите, чтобы NERDTree/TagBar автоматически отображались при запуске vim
  25. " autocmd vimenter * TagbarToggle
  26. " autocmd vimenter * NERDTree
  27. " autocmd vimenter * if !argc() | NERDTree | endif
  28.  
  29. " на маке vim?
  30. if has("mac")
  31. set guifont=Consolas:h13
  32. set fuoptions=maxvert,maxhorz
  33. else
  34. " дефолтный GUI
  35. set guifont=Ubuntu\ Mono\ derivative\ Powerline\ 10
  36. endif
  37. else
  38. " терминал?
  39. colorscheme myterm
  40. endif
  41.  
  42. tab sball
  43. set switchbuf=useopen
  44.  
  45. " отключаем пищалку и мигание
  46. set visualbell t_vb=
  47. set novisualbell
  48.  
  49. set enc=utf-8 " utf-8 по дефолту в файлах
  50. set ls=2 " всегда показываем статусбар
  51. set incsearch " инкреминтируемый поиск
  52. set hlsearch " подсветка результатов поиска
  53. set nu " показывать номера строк
  54. set scrolloff=5 " 5 строк при скролле за раз
  55.  
  56. " отключаем бэкапы и своп-файлы
  57. set nobackup " no backup files
  58. set nowritebackup " only in case you don't want a backup file while editing
  59. set noswapfile " no swap files
  60.  
  61. " прячем панельки
  62. "set guioptions-=m " меню
  63. set guioptions-=T " тулбар
  64. "set guioptions-=r " скроллбары
  65.  
  66. " настройка на Tab
  67. set smarttab
  68. set tabstop=8
  69.  
  70. " при переходе за границу в 80 символов в Ruby/Python/js/C/C++ подсвечиваем на темном фоне текст
  71. augroup vimrc_autocmds
  72. autocmd!
  73. autocmd FileType ruby,python,javascript,c,cpp highlight Excess ctermbg=DarkGrey guibg=Black
  74. autocmd FileType ruby,python,javascript,c,cpp match Excess /\%80v.*/
  75. autocmd FileType ruby,python,javascript,c,cpp set nowrap
  76. augroup END
  77.  
  78. " указываем каталог с настройками SnipMate
  79. let g:snippets_dir = "~/.vim/vim-snippets/snippets"
  80.  
  81. " настройки Vim-Airline
  82. set laststatus=2
  83. let g:airline_theme='badwolf'
  84. let g:airline_powerline_fonts = 1
  85. let g:airline#extensions#tabline#enabled = 1
  86. let g:airline#extensions#tabline#formatter = 'unique_tail'
  87.  
  88. " TagBar настройки
  89. map <F4> :TagbarToggle<CR>
  90. let g:tagbar_autofocus = 0 " автофокус на Tagbar при открытии
  91.  
  92. " NerdTree настройки
  93. " показать NERDTree на F3
  94. map <F3> :NERDTreeToggle<CR>
  95. "игноррируемые файлы с расширениями
  96. let NERDTreeIgnore=['\~$', '\.pyc$', '\.pyo$', '\.class$', 'pip-log\.txt$', '\.o$']
  97.  
  98. " TaskList настройки
  99. map <F2> :TaskList<CR> " отобразить список тасков на F2
  100.  
  101. " Работа буфферами
  102. map <C-q> :bd<CR> " CTRL+Q - закрыть текущий буффер

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

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

  1. pip3 install pyvenv-3.4

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

  1. pyvevn-3.4 /home/user/python

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

  1. source /home/user/python/activate

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

  1. pip3 install ipython

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

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

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

Vim как IDE для Python

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

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

Рубрики: 

Комментарии

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

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

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

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

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

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

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

let g:pymode_options_colorcolumn = 0

let g:pymode_options_max_line_length = 200

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

У меня проблема с темами - когда создаю файл - E185: cannot find color scheme 'myterm'
А когда открываю Vim, внизу надпись - Could not resolve airline theme "badwolf". Themes have been migrated to github.com/vim-airline/vim-airline-themes.

исправьте git clone github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim/
на git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
:)

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