Разное

Python vim ide: VIM как IDE для разработки на Python / Хабр

Содержание

VIM как IDE для разработки на Python / Хабр

Данная статья будет посвящена настройке vim, в которой я поделюсь своим «скромным» пониманием того, каким должен быть текстовый редактор, чтобы в нем было удобно/приятно/легко (нужное подчеркнуть) писать код также, как это сейчас возможно во всевозможных IDE типа PyCharm, SublimeText и т.п.
Весь процесс постараюсь описать как можно более подробно, чтобы вопросов по мере чтения для начинающих осваивать vim возникало как можно меньше.

Предыстория

Сам я знаком с vim не очень продолжительное время, однако, к его изучению и желанию использовать привело:

  • достаточное количество на хабре статей по vim
  • большое количество существующих плагинов
  • преимущественно, разработчики на Python занимаются написанием кода под Linux (хотя vim — кроссплатформенный)
  • собственное любопытство

В настоящее время я использую весьма часто vim как основной инструмент для разработки на Python и нисколько об этом не жалею. Если чего-либо нехватает, то проблема решается гуглением в течении пару минут. Поверьте, vim действительно стоит тех затраченных сил на его изучения. Это достаточно быстро себя «окупает». Было бы только желание и немножечко терпения.

Подготовительный этап

Итак. Перейдем непосредственно к подготовительному этапу. Нам понадобится:

  1. Vim версии 7.4 (получить нужное можно либо скачиванием из репозиториев, либо сборкой вручную)
  2. Python 2.7 (с установленным pip)
  3. Клиент для работы с git

После того, как вышеперечисленное у нас имеется, можно приступать непосредственно к настройке и «кастомизации».

Настройка

Самое первой проблемой для любого новичка, который решает обуздать vim, является vimscript. Vimscript — это скриптовый язык, предназначенный для vim. На нем мы будем описывать используемые плагины, горячие клавиши и все тому подобное, чтобы обеспечить себе простую и легкую работу в vim. Для ознакомления советую посетить вот этот и этот сайты. Там достаточно неплохо все описано, что, где, как, и почему.

Первым делом стоит рассказать о том, что конфигурационный файл vim находится в домашнем каталоге пользователя (~/) и называется .vimrc. В нем-то и будут расписываться моменты относительно того, какие шрифты, цветовая схема, хоткеи и т.п. будут использоваться.

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

Какие включает в себя подкаталоги исходный каталог .vim? Примерно такие:

.vim

|____after

|____autoload

|____colors

|____doc

|____ftplugin

|____indent

|____plugin

|____scripts

|____syntax

Однако, из всех вышеперечисленных каталогов нам понадобится лишь несколько:

  • colors — для цветовых схем/тем
  • indent — сюда будет скидывать файлы для работы с тегами HTML/XML и т.п.
  • scripts — для скриптов
  • syntax — файлы синтаксиса

В эти каталоги помещаем соответствующие файлы, взяв их, например, у меня.

До начала установки и работа с менеджером пакетов пропишем в консоли:

pip install pyflakes pep8 pylint ipython

В дальнейшем, эти библиотеки нам пригодятся для того, чтобы отслеживать качество своего кода: ошибки, соответствие его PEP8 и т.п. Последняя же в этом списке библиотека/пакет — ipython нам будет удобна для настройки своего «дебаггера».
Также нам еще необходимо установить Exuberant ctags. Скачать его можно отсюда либо поискать и установить через менеджер пакетов apt-get/aptitude/rmp/pacman/и т.п.

Менеджер плагинов

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

  • настраивать и устанавливать плагины, указанные в. vimrc
  • обновлять плагины при необходимости
  • удалять неиспользуемые плагины

Однако прежде чем приступать к описанию необходимого набора плагинов в конфигурационном файле, сначала необходимо установить сам Vundle. Для этого делаем следующее:

git clone https://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

"---------=== Code/project navigation ===-------------
Plugin 'scrooloose/nerdtree' 	    	" Project and file navigation
Plugin 'majutsushi/tagbar'          	" Class/module browser

"------------------=== Other ===----------------------
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

"--------------=== Snippets support ===---------------
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

"---------------=== Languages support ===-------------
" --- 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 'ссылка_до_плагина' представляет собой ссылки в интернете эти плагины, которые 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

В качестве руководства/гайда по использованию Vundle можно зайти сюда. Однако для наших целей будет предостаточно одной:

:PluginInstall

Эта команда сканирует файл .vimrc на наличие списка плагинов прописанных в виде Plugin 'ссылка_до_плагина'.
Для того, чтобы запустить установку набора плагинов, заходим в vim/gvim и прописываем :PluginInstall. Придется немного подождать, поскольку каждый плагин, указанный выше в конфиге, будет скачан с githuba либо еще откуда-то и настроен до установок «по умолчанию», подождите пару минут. Каждый выкачанный и настроенный плагин отмечается как «+». Как только увидите, что все из списка подсвечены «+» — значит, все готово. И для дальнейшего использования необходимо будет перезапустить vim. Однако на этом все еще не оканчивается статья — все необходимо «подкрутить», чтобы работать в vim’е было комфортно.

Общие настройки vim’а

Эти настройки для меня являются базовыми. Тут я указываю свои предпочтения относительно парочки плагинов, размера шрифтов, цветовой схемы, отображаемых элементов и т.п.
Добавьте эти строчки в конец своего .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 molokai
" раскомментируйте эти строки, если хотите, чтобы NERDTree/TagBar автоматически отображались при запуске vim
" autocmd vimenter * TagbarToggle
" autocmd vimenter * NERDTree
" autocmd vimenter * if !argc() | NERDTree | endif

" на маке vim?
if has("mac")
  set guifont=Consolas:h23
  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 - закрыть текущий буффер

Python-mode

Очень нравится этот плагинчик, который кстати, сделан klen. Предоставляет море возможностей при работе с кодом:

  • рефакторинг
  • автодополнение
  • работа с дебаггером
  • автофикс PEP8 ошибок
  • и многое-многое другое…

Добавьте эти строчки в конец своего .vimrc файла:

"=====================================================
" Python-mode settings
"=====================================================
" отключаем автокомплит по коду (у нас вместо него используется jedi-vim)
let g:pymode_rope = 0
let g:pymode_rope_completion = 0
let g:pymode_rope_complete_on_dot = 0

" документация
let g:pymode_doc = 0
let g:pymode_doc_key = 'K'
" проверка кода
let g:pymode_lint = 1
let g:pymode_lint_checker = "pyflakes,pep8"
let g:pymode_lint_ignore="E501,W601,C0110"
" провека кода после сохранения
let g:pymode_lint_write = 1

" поддержка virtualenv
let g:pymode_virtualenv = 1

" установка breakpoints
let g:pymode_breakpoint = 1
let g:pymode_breakpoint_key = '<leader>b'

" подстветка синтаксиса
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

" отключить autofold по коду
let g:pymode_folding = 0

" возможность запускать код
let g:pymode_run = 0

Jedi-vim

Очень полезный плагин, предоставляющий отличные возможности автокомплита, go to definition, и т.п.
В своем конфиге добавьте в конец этот фрагмент:

" Disable choose first function/method at autocomplete
let g:jedi#popup_select_first = 0

Этой строчкой я отрубаю в автокомплите выбор первой строки из списка выбора метода/библиотеки/класса автокомплита. Это связано с тем, что достаточно часто я выбираю не первую строку из нее, а автоматический выбор раздражает.

После настройки jedi-vim получаем отображение документации по функции


и добротный автокомплит по аргументам функций

Хоткеи

Тут сложно что-либо посоветовать. У всех различное понимание того, какие хоткеи нужны, а какие-нет. Могу лишь сказать, что для желающих, найти/написать необходимые кусочки vimscript, переопределяющих поведение стандартных горячих клавиш — очень много.
Добавьте этот фрагмент в конец конфига:

"=====================================================
" User hotkeys
"=====================================================
" ConqueTerm
" запуск интерпретатора на F5
nnoremap <F5> :ConqueTermSplit ipython<CR>
" а debug-mode на <F6>
nnoremap <F6> :exe "ConqueTermSplit ipython " . expand("%")<CR>
let g:ConqueTerm_StartMessages = 0
let g:ConqueTerm_CloseOnEnd = 0
" проверка кода в соответствии с PEP8 через <leader>8
autocmd FileType python map <buffer> <leader>8 :PymodeLint<CR>

" автокомплит через <Ctrl+Space>
inoremap <C-space> <C-x><C-o>

" переключение между синтаксисами
nnoremap <leader>Th :set ft=htmljinja<CR>
nnoremap <leader>Tp :set ft=python<CR>
nnoremap <leader>Tj :set ft=javascript<CR>
nnoremap <leader>Tc :set ft=css<CR>
nnoremap <leader>Td :set ft=django<CR>

Отступы, табы, пробелы для разных языков

Это связано с тем, что в том же Python табы не рекомендуется к использованию. Поэтому будем заменять их на пробелы. Один таб = 4 пробелам. Плюс ко всему необходимо помнить, что всегда нужно сделать переход на следующую строку + отступ, чтобы было соответствие операторам for/if/while/и т.п.
Для других языков предостаточно будет указать размер Таба, и замены их на пробелы.
Добавьте этот фрагмент в конец своего конфига:

"=====================================================
" Languages support
"=====================================================
" --- Python ---
"autocmd FileType python set completeopt-=preview " раскомментируйте, в случае, если не надо, чтобы jedi-vim показывал документацию по методу/классу
autocmd FileType python setlocal expandtab shiftwidth=4 tabstop=8
\ formatoptions+=croq softtabstop=4 smartindent
\ cinwords=if,elif,else,for,while,try,except,finally,def,class,with
autocmd FileType pyrex setlocal expandtab shiftwidth=4 tabstop=8 softtabstop=4 smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class,with

" --- JavaScript ---
let javascript_enable_domhtmlcss=1
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd BufNewFile,BufRead *.json setlocal ft=javascript

" --- HTML ---
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags

" --- template language support (SGML / XML too) ---
autocmd FileType html,xhtml,xml,htmldjango,htmljinja,eruby,mako setlocal expandtab shiftwidth=2 tabstop=2 softtabstop=2
autocmd bufnewfile,bufread *.rhtml setlocal ft=eruby
autocmd BufNewFile,BufRead *.mako setlocal ft=mako
autocmd BufNewFile,BufRead *.tmpl setlocal ft=htmljinja
autocmd BufNewFile,BufRead *.py_tmpl setlocal ft=python
let html_no_rendering=1
let g:closetag_default_xml=1
let g:sparkupNextMapping='<c-l>'
autocmd FileType html,htmldjango,htmljinja,eruby,mako let b:closetag_html_style=1
autocmd FileType html,xhtml,xml,htmldjango,htmljinja,eruby,mako source ~/.vim/scripts/closetag.vim

" --- CSS ---
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType css setlocal expandtab shiftwidth=4 tabstop=4 softtabstop=4

Подведение итогов

После прохождения столь длительного процесса настройки у нас получился достаточно гибкий инструмент для работы с Python. При этом, последующая установка, на другие ПК будет представлять только доустановку необходимых библиотек, переноса соответствующего конфига и установку плагинов.

После настройки мы получим примерно такой vim:


В режиме работы с HTML/JavaScript/XML будет все выглядеть примерно так:

Если кому-либо нужен больший функционал (например поддержка автокомплита для любых иных языков), то могу посоветовать лишь поискать необходимые плагины на GitHub’е или на офицальном сайте сайте vim’a.

Полезные ссылки:

Раздел script сайта vim.org — тут
wikia по vim’у — тут
OpenVim: уроки по азам в vim — тут
Шрифты для vim-airline — тут

Мой конфиг для vim на GitHub

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

Не так давно я решил настроить текстовый редактор 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:h23

  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, для создания виртуального окружения:

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

  1. pyvevn-3.4 /home/user/python

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

  1. source /home/user/python/activate

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

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

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

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

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

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

Настраиваем Vim под Python / Хабр

Сегодня я хочу рассказать вам, как я настраивал любимый всеми редактор Vim (который в одном режиме пищит, а в другом — все портит) для написания кода на Python. Статья расчитана на начинающих виммеров.
У меня получилась такая картинка:

.vimrc

Для начала, нужно установить некоторые параметры в ~/.vimrc. Привожу весь файл целиком, может кому-то будет полезно.

"Вырубаем режим совместимости с VI:

set nocompatible

«Включаем распознавание типов файлов и типо-специфичные плагины:

filetype on

filetype plugin on

«Настройки табов для Python, согласно рекоммендациям

set tabstop=4

set shiftwidth=4

set smarttab

set expandtab «Ставим табы пробелами

set softtabstop=4 «4 пробела в табе

«Автоотступ

set autoindent

«Подсвечиваем все что можно подсвечивать

let python_highlight_all = 1

«Включаем 256 цветов в терминале, мы ведь работаем из иксов?

«Нужно во многих терминалах, например в gnome-terminal

set t_Co=256

«Настройка omnicomletion для Python (а так же для js, html и css)

autocmd FileType python set omnifunc=pythoncomplete#Complete

autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS

autocmd FileType html set omnifunc=htmlcomplete#CompleteTags

autocmd FileType css set omnifunc=csscomplete#CompleteCSS

«Авто комплит по табу

function InsertTabWrapper()

let col = col(‘.’) — 1

if !col || getline(‘.’)[col — 1] !~ ‘\k’

return «\»

else

return «\<c-p>»

endif

endfunction

imap <c-r>=InsertTabWrapper()»Показываем все полезные опции автокомплита сразу

set complete=»»

set complete+=.

set complete+=k

set complete+=b

set complete+=t

«Перед сохранением вырезаем пробелы на концах (только в .py файлах)

autocmd BufWritePre *.py normal m`:%s/\s\+$//e «

«В .py файлах включаем умные отступы после ключевых слов

autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class

«»»»Дальше мои личные настройки,

«»»»в принципе довольно обычные, может кому надо

«Вызываем SnippletsEmu(см. дальше в топике) по ctrl-j

«вместо tab по умолчанию (на табе автокомплит)

let g:snippetsEmu_key = «<C-j>»

» Копи/паст по Ctrl+C/Ctrl+V

vmap <C-C> «+yi

imap <C-V> «+gPi

colorscheme wombat256 «Цветовая схема

syntax on «Включить подсветку синтаксиса

set nu «Включаем нумерацию строк

set mousehide «Спрятать курсор мыши когда набираем текст

set mouse=a «Включить поддержку мыши

set termencoding=utf-8 «Кодировка терминала

set novisualbell «Не мигать

set t_vb= «Не пищать! (Опции ‘не портить текст’, к сожалению, нету)

«Удобное поведение backspace

set backspace=indent,eol,start whichwrap+=<,>,[,]

«Вырубаем черточки на табах

set showtabline=0

«Колоночка, чтобы показывать плюсики для скрытия блоков кода:

set foldcolumn=1

«Переносим на другую строчку, разрываем строки

set wrap

set linebreak

«Вырубаем .swp и ~ (резервные) файлы

set nobackup

set noswapfile

set encoding=utf-8 » Кодировка файлов по умолчанию

set fileencodings=utf8,cp1251 » Возможные кодировки файлов, если файл не в unicode кодировке,

» то будет использоваться cp1251

Плагины

Чтобы ощутить Power of Vim, необходимо воспользоваться плодами трудов предшественников-первопроходцев.
Для начала, если вы не сделали раньше, нужно поставить плагин Vimball — велосипедный архиватор для вимовских плагинов. Без этого велосипеда нам не поставить многих полезных плагинов. Качаем и распаковываем в ~/.vim/

Далее. Нам нужна клевая подсветка синтаксиса вместо дефолтной — для Python (и для Django — если хотите). Качаем и сливаем в ~/.vim/syntax/ (здесь и далее — если папки в вашей домашней директории нету, создавайте ее)

Автодополнение тоже лучше не дефолтное — качаем pythoncomplete.vim и заливаем в ~/.vim/autoload/. В .vimrc мы уже настроили комплит на Tab.

Если мы что то написали, мы должны это запустить?.. Качаем runscript.vim и кидаем его в~/.vim/plugin/. Он с кривыми концами строк, мы должны его поправить:

sudo apt-get install tofrodos #в бубунте

dos2unix ~/.vim/plugin/runscript.vim

Теперь открываем его в Vim и правим настройки:

"Путь к питону, исправляем виндовый

let s:PathToExecutable = '/usr/bin/python'

» Map keys to function calls

«Выполнить скрипт, который назначен «Главным»

if !hasmapto(‘RunScript’)

nmap ExecuteScript

endif

«Назначить скрипт в буфере Главным

if !hasmapto(‘SetMainScript’)

nmap SetMainScript

endif

«Сбросить назначение Главного скрипта

if !hasmapto(‘ClearMainScript’)

nmap <S-F11> ClearMainScript

endif

«Показать/скрыть окно вывода

if !hasmapto(‘ToggleOutputWindow’)

nmap ToggleOutputWindow

endif

Можно конечно настройки скрипта и в .vimrc прописать, но скрипт все равно кривой и его ковырять пришлось.

Теперь самое вкусное — SnippletsEmu — снипплеты. Это маленькие заготовки языковых конструкций. Вводишь for, нажимаешь кнопку (у меня в .vimrc ctrl-j), получается:


Нажимаешь еще раз кнопку, курсор перескакивает к следующему полю… Так очень удобно добавлять функции, классы, циклы, что угодно.

Ставится это добро (оно, кстати, очень похоже на функционал Textmate) из двух vba архивов: с плагином и с готовыми снипплетами. Открываем архив в vim, набираем:

:source %

И все, поставилось. Повторить со вторым архивом

Можно и свои снипплеты создавать, коммандой типа:
:Snippet клевоимячко Меня зовут <{фамилия}> <{имя}>. Зови меня <{имядлядрузей}>.

И исспользовать, набрав клевоимячко и нажав назначенную комбинацию.

Но функционал SnippletEmu велик, и это тема для следующей статьи

Так, вроде все есть, только не хватает — темы! Лично я рекоммендую desert256, но если не нравится — могу посоветовать поставить плагин ScrollColor.vim и сборник лучших тем.

Затем вызываем плагин коммандой
:COLOR


И выбираем тему.

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

Сейчас достаточно много постов и видео на тему как сделать из 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:h22
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-gGo to definition
C-spaceRope autocomplete
C-c-dRope show documentation
C-c-fRope 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’

Комментирование блоков кода с автоматическим определением языка

Настройка Vim для работы с Python и Django / Хабр

Vim — уникальный по своей гибкости редактор, который при должной настройке может едва ли не идеально удовлетворять все пожелания работающего с ним. Правда эта настройка может продолжаться месяцы, а то и годы, что является и достоинством, и недостатком vim’а. Существует множество статей и туториалов по использованию Vim для разработки на Python и Django, надеюсь мне удастся рассказать что-то новое. В своей статье я постараюсь по минимуму упоминать плагины общего назначения, вроде NERDTree или surround.vim и опишу несколько более специализированных расширений и настроек, которые существенно упростили процесс работы на Python.


Настроить Vim под Django оказалось делом довольно непростым, в отличие от использования с тем же Rails, для которого rails.vim решает 80% всех проблем. Но к сожалению Tim Pope ничего подобного для питона не написал, поэтому пришлось собирать все по частям. Вкратце, о чем пойдет речь:

  • python-mode
  • tagbar
  • pydiction
  • neocomplcache

Все ниженаписанное было опробовано в gVim для Linux.

Python-mode

Просто низкий поклон Кириллу Клёнову, разработчику данного расширения. Отлично устанавливается и с помощью vundle, и через pathogen и так же отлично работает.

Python-mode устанавливает свои настройки для питон-файлов. Если вас это не устраивает (мне например не нужен set number, который он добавляет), допишите необходимые настройки в .vimrc. Вот пример моих настроек:

let g:pymode_options = 0
let g:pymode_lint_write = 0 “не проверять при каждом сохранении
let g:pymode_folding = 0 “мне не нужен авто-фолдинг
let g:pymode_rope_vim_completion = 0 “не использовать автодополнение rope

Как можно увидеть, я не использую автоматический фолдинг кода, также мне не нужна проверка pylint’ом при каждом сохранении файла(let g:pymode_lint_write = 0), вместо чего можно использовать команду :PyLint, повесив на нее какой-нибудь хоткей. К автодополнению вернемся позже.

Плагин предоставляет несколько удобных хоткеев для перемещения по объектам в питон-коде:











Сочетание клавишКоманда
KПоказать документацию
<C-c>gПерейти к определению
\rЗапустить код
[[Перейти к предыдущему классу или функции
]]Перейти к следующему классу или функции
aC CВыполнить действие для класса. (vaC, daC, dC, yaC, yC, caC, cC)
iCТо же, находясь внутри класса. (viC, diC, yiC, ciC)
aM MВыполнить действие для функции. (vaM, daM, dM, yaM, yM, caM, cM)
iMТо же, находясь внутри функции. (viM, diM, yiM, ciM)

Отдельно хотелось бы отметить возможность использовать Rope, в частности команды :RopeGoToDefinition, :RopeFindOccurrences и другие возможности по поиску кода и рефакторингу. просмотреть полный список команд Rope и сокращения к ним можно с помощью :help RopeKeys. Кроме того по умолчанию включена поддержка virtualenv, что значит, что с помощью того же :RopeGoToDefinition вы можете спокойно перейти к определнию функции любой библиотеки, установленной в site-packages вашего virtualenv’а.

Просмотр кода

Хотя самым популярным плагином для этого является Taglist, мне больше нравится Tagbar, также основанный на ctags(которые нужно установить перед использованием плагина). Вешаем :TagbarToggle на какой-нибудь хоткей, например:

nnoremap <F8> :TagbarToggle<CR>

Выглядит это примерно так:

Пара дополнительных настроек:

let g:tagbar_autofocus = 1
let g:tagbar_sort = 0 "tagbar shows tags in order of they created in file
let g:tagbar_foldlevel = 0 "close tagbar folds by default

Кроме того можно настроить, с какой стороны будет появляться окно тагбара, какими будут отступы, иконки и т.д. Обо всем этом можно узнать через :help tagbar.

Автодополнение

Один из плагинов, который я мог бы посоветовать — Pydiction, дополняющий ключевые слова на основе большого файла словаря. У данного плагина очень много плюсов:

  • автодополнение происходит по клавише Tab, не нужно запоминать всякие комбинации с Ctrl
  • абсолютно никаких конфликтов, можно одновременно использовать Pydiction с omnicomplete
  • автодополнение не затрагивает другие типы файлов
  • умеет дополнять импортированные объекты
  • довольно легко можно добавить в словарь собственные модули: python pydiction.py module_name

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

Другой способ — использовать neocomplcache. Кроме установки плагина, нужно задать omnifunc для питоновских файлов:

autocmd FileType python setlocal omnifunc=pythoncomplete#Complete

Neocomplcache несколько хуже справляется с дополнением из модулей, зато дополняет не только ключевые слова из текущих файлов, но и просто строки. Кроме того присутствует опция автоматически всплывающего дополнения, которое включается с помощью задания настройки:

let g:neocomplcache_enable_at_startup = 1

Шаблоны Django

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

fun! DetectTemplate()
  let n = 1
  while n < line("$")
    if getline(n) =~ '{%' || getline(n) =~ '{{'
      set ft=htmldjango
      return
    endif
    let n = n + 1
  endwhile
  set ft=html "default html
endfun

которую нужно запускать при открытии файла с раширением .html:

autocmd BufNewFile,BufRead *.html call DetectTemplate()

Если вы используете несколько шаблонизаторов, функцию несложно модифицировать под них, правда следует сделать условия определения типа шаблонизатора более строгими.

Случайные настройки

  • Питоновские отступы:
    autocmd FileType python setlocal ts=4 sts=4 sw=4
    

  • Если вы пользуетесь NERDTree, стоит добавить .pyc в список игнорируемых файлов:
    let NERDTreeIgnore=['\.pyc$']
    

  • простое сокращение для вставки дебаггера ipdb в код
    iab ipdb import ipdb; ipdb.set_trace()
    

  • сокращение для задания кодировки в начале файла:
    iab utf! # -*- coding: utf-8 -*-
    

  • убрать раздражающие всплывающие окна с документацией для omnicompletion:
    set completeopt-=preview
    

  • пара цветовых схем:darkspectrum, gruvbox, Lucius

Дополнительные ссылки

1. python-mode
github.com/klen/python-mode
2. Tagbar
github.com/majutsushi/tagbar
3. Pydiction
github.com/rkulla/pydiction
4. Neocomplcache
github.com/Shougo/neocomplcache

vim, и как сделать из него полноценную IDE. / Хабр

Vim (сокр. от Vi Improved, произносится Вим) — свободный режимный текстовый редактор, созданный на основе более старого vi. Ныне это один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации, и созданным благодаря этому расширениям и надстройкам. (с)wiki

Вот и настроим. У меня была цель — сделать из Vim полноценную IDE для perl. Но таким же путем это делается и для любого другого языка.


Прежде всего, официальный сайт — vim.org. На нем можно найти все, что необходимо.
Выбираем необходимый нам язык. Внизу качаем нужный пакет.

Синтаксис включается одной командой — :syntax on и при сохранении файла с соответствующим расширением будет включаться подсветка. Также можно поправить конфиг vimrc

Я качала perl-support. Затем создается папка /.vim/ в домашнем каталоге, и кидается в нее содержимое архива, вводится :helptags $HOME/.vim/doc/, которая генерирует тэги для документации. Подгружаются модули.

:help perl-support — выдается справка по модулям и всем имеющимся в них фичам. У нас появляется 2 окна. В конфиге лучше включить мышку для того, чтобы можно было нормально подстраивать окна под себя.

У нас появилась подсветка, можно работать сразу с двумя исходниками, и копировать что-то из одного в другой, убирая попутно комментарии, а затем расставляя их автоматически с помощью vim-а. Да и много чего еще — цитировать хелп я тут не буду) Для этого лишь необходимо разобраться с хоткеями.

Есть еще одна мега-полезная вещь — NERDTree. Это консольный файловый браузер. Удобная штука. Берется отсюда. Установка предельно проста. Один файлик кидается с doc, а второй в plugin. Опять делаем :helptags и получаем то, что нужно. Запускается, соответственно командой :NERDTree. Хэлп легкий. Навигация простая — o чтобы открыть ветку, go, чтобы открыть файл и т.д.

скриншот получившегося:

Переключение между окнами — ctrl W W, но это у меня. Вы можете настроить иначе. Главное посидеть недельку и разобраться с хоткеями, а дальше работа в нем будет на порядок быстрее, нежели в других редакторах. Также можно прикрутить тем же методом любые другие доки, плагины и прочее. Настроить полностью под себя и превратить во что угодно, тем самым оптимизировав позже свое рабочее время

И еще надеюсь, что моя первая статья окажется полезной для вас 😉

PS: эта статья — «как сделать и начать юзать». Не стоит ждать от нее большего. Каждый сам дорабатывает и вытачивает то, что ему нужно. Я показала лишь основное.

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

Данная статья будет посвящена настройке vim, в которой я поделюсь своим «скромным» пониманием того, каким должен быть текстовый редактор, чтобы в нем было удобно/приятно/легко (нужное подчеркнуть) писать код также, как это сейчас возможно во всевозможных IDE типа PyCharm, SublimeText и т.п.
Весь процесс постараюсь описать как можно более подробно, чтобы вопросов по мере чтения для начинающих осваивать vim возникало как можно меньше.

Предыстория

Сам я знаком с vim не очень продолжительное время, однако, к его изучению и желанию использовать привело:

  • достаточное количество на хабре статей по vim
  • большое количество существующих плагинов
  • преимущественно, разработчики на Python занимаются написанием кода под Linux (хотя vim — кроссплатформенный)
  • собственное любопытство

В настоящее время я использую весьма часто vim как основной инструмент для разработки на Python и нисколько об этом не жалею. Если чего-либо нехватает, то проблема решается гуглением в течении пару минут. Поверьте, vim действительно стоит тех затраченных сил на его изучения. Это достаточно быстро себя «окупает». Было бы только желание и немножечко терпения.

Подготовительный этап

Итак. Перейдем непосредственно к подготовительному этапу. Нам понадобится:

  1. Vim версии 7.4 (получить нужное можно либо скачиванием из репозиториев, либо сборкой вручную)
  2. Python 2.7 (с установленным pip)
  3. Клиент для работы с git

После того, как вышеперечисленное у нас имеется, можно приступать непосредственно к настройке и «кастомизации».

Настройка

Самое первой проблемой для любого новичка, который решает обуздать vim, является vimscript. Vimscript — это скриптовый язык, предназначенный для vim. На нем мы будем описывать используемые плагины, горячие клавиши и все тому подобное, чтобы обеспечить себе простую и легкую работу в vim. Для ознакомления советую посетить вот этот и этот сайты. Там достаточно неплохо все описано, что, где, как, и почему.

Первым делом стоит рассказать о том, что конфигурационный файл vim находится в домашнем каталоге пользователя (~/) и называется .vimrc. В нем-то и будет расписываться моменты относительно того, какие шрифты, цветовая схема, хоткеи и т.п. будут использоваться.

Во-вторых, при настойке текстового редактора, иногда будет необходимо заходить в каталог .vim (это скрытый каталог, и он расположен также в домашнем каталоге юзера), в который будут помещен ряд необходимых файлов, рассортированных по каталогам.
Какие включает в себя подкаталоги исходный каталог .vim? Примерно такие:
.vim
|____after
|____autoload
|____colors
|____doc
|____ftplugin
|____indent
|____plugin
|____scripts
|____syntax

Однако, из всех вышеперечисленных каталогов нам понадобится лишь несколько:

  • colors — для цветовых схем/тем
  • indent — сюда будет скидывать файлы для работы с тегами HTML/XML и т.п.
  • scripts — для скриптов
  • syntax — файлы синтаксиса

В эти каталоги помещаем соответствующие файлы, взяв их, например, у меня.

До начала установки и работа с менеджером пакетов пропишем в консоли:

pip install pyflakes pep8 pylint ipython

В дальнейшем, эти библиотеки нам пригодятся для того, чтобы отслеживать за качеством своего кода: ошибки, соответствие его PEP8 и т.п. Последняя же в этом списке библиотека/пакет — ipython нам будет удобна для настройки своего «дебаггера».
Также нам еще необходимо установить Exuberant ctags. Скачать его можно отсюда либо поискать и установить через менеджер пакетов apt-get/aptitude/rmp/pacman/и т.п.

Менеджер плагинов

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

  • настраивать и устанавливать плагины, указанные в. vimrc
  • обновлять плагины при необходимости
  • удалять неиспользуемые плагины

Однако прежде чем приступать к описанию необходимого набора плагинов в конфигурационном файле, сначала необходимо установить сам Vundle. Для этого делаем следующее:

git clone https://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

"---------=== Code/project navigation ===-------------
Plugin 'scrooloose/nerdtree' 	    	" Project and file navigation
Plugin 'majutsushi/tagbar'          	" Class/module browser

"------------------=== Other ===----------------------
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

"--------------=== Snippets support ===---------------
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

"---------------=== Languages support ===-------------
" --- 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 'ссылка_до_плагина' представляет собой ссылки в интернете эти плагины, которые 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

В качестве руководства/гайд по использованию Vundle можно зайти сюда. Однако для наших целей будет предостаточно одной:

:PluginInstall

Эта команда сканирует файл .vimrc на наличие списка плагинов прописанных в виде Plugin 'ссылка_до_плагина'.
Для того, чтобы запустить установку набора плагинов, заходим в vim/gvim и прописываем :PluginInstall. Придется немного подождать, поскольку каждый плагин, указанный выше в конфиге, будет скачан с githuba либо еще откуда-то и настроен до установок «по умолчанию», подождите пару минут. Каждый выкачанный и настроенный плагин отмечается как «+». Как только увидите, что все из списка подсвечены «+» — значит, все готово. И для дальнейшего использования необходимо будет перезапустить vim. Однако на этом все еще не оканчивается статья — все необходимо «подкрутить», чтобы работать в vim’е было комфортно.

Общие настройки vim’а

Эти настройки для меня являются базовыми. Тут я указываю свои предпочтения относительно парочки плагинов, размера шрифтов, цветовой схемы, отображаемых элементов и т.п.
Добавьте эти строчки в конец своего .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 molokai
" раскомментируйте эти строки, если хотите, что NERDTree/TagBar автоматически отображались при запуске vim
" autocmd vimenter * TagbarToggle
" autocmd vimenter * NERDTree
" autocmd vimenter * if !argc() | NERDTree | endif

" на маке vim?
if has("mac")
  set guifont=Consolas:h23
  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 - закрыть текущий буффер
Python-mode

Очень нравится этот плагинчик, который кстати, сделан klen. Предоставляет море возможностей при работе с кодом:

  • рефакторинг
  • автодополнение
  • работа с дебаггером
  • автофикс PEP8 ошибок
  • и многое-многое другое…

Добавьте эти строчки в конец своего .vimrc файла:

"=====================================================
" Python-mode settings
"=====================================================
" отключаем автокомплит по коду (у нас вместо него используется jedi-vim)
let g:pymode_rope = 0
let g:pymode_rope_completion = 0
let g:pymode_rope_complete_on_dot = 0

" документация
let g:pymode_doc = 0
let g:pymode_doc_key = 'K'
" проверка кода
let g:pymode_lint = 1
let g:pymode_lint_checker = "pyflakes,pep8"
let g:pymode_lint_ignore="E501,W601,C0110"
" провека кода после сохранения
let g:pymode_lint_write = 1

" поддержка virtualenv
let g:pymode_virtualenv = 1

" установка breakpoints
let g:pymode_breakpoint = 1
let g:pymode_breakpoint_key = '<leader>b'

" подстветка синтаксиса
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

" отключить autofold по коду
let g:pymode_folding = 0

" возможность запускать код
let g:pymode_run = 0
Jedi-vim

Очень полезный плагин, предоставляющий отличные возможности автокомплита, go to definition, и т.п.
В своем конфиге добавьте в конец этот фрагмент:

" Disable choose first function/method at autocomplete
let g:jedi#popup_select_first = 0

Этой строчкой я отрубаю в автокомплите выбор первой строки из списка выбора метода/библиотека/класса автокомплита. Это связано с тем, что достаточно часто я выбираю не первую строку из нее, а автоматический выбор раздражает.

Хоткеи

Тут сложно что-либо посоветовать. У всех различное понимание того, какие хоткеи нужны, а какие-нет. Могу лишь сказать, что для желающих, найти/написать необходимые кусочки vimscript, переопределяющих поведение стандартных горячих клавиш — очень много.
Добавьте этот фрагмент в конец конфига:

"=====================================================
" User hotkeys
"=====================================================
" ConqueTerm
" запуск интерпретатора на F5
nnoremap <F5> :ConqueTermSplit ipython<CR>
" а debug-mode на <F6>
nnoremap <F6> :exe "ConqueTermSplit ipython " . expand("%")<CR>
let g:ConqueTerm_StartMessages = 0
let g:ConqueTerm_CloseOnEnd = 0
" проверка кода в соответствии с PEP8 через <leader>8
autocmd FileType python map <buffer> <leader>8 :PymodeLint<CR>

" автокомплит через <Ctrl+Space>
inoremap <C-space> <C-x><C-o>

" переключение между синтаксисами
nnoremap <leader>Th :set ft=htmljinja<CR>
nnoremap <leader>Tp :set ft=python<CR>
nnoremap <leader>Tj :set ft=javascript<CR>
nnoremap <leader>Tc :set ft=css<CR>
nnoremap <leader>Td :set ft=django<CR>
Отступы, табы, пробелы для разных языков

Это связано с тем, что в том же Python табы не рекомендуется к использованию. Поэтому будем заменять их на пробелы. Один таб = 4 пробелам. Плюс ко всему необходимо помнить, что всегда нужно сделать переход на следующую строку + отступ, чтобы было соответствие операторам for/if/while/и т.п.
Для других языков предостаточно будет указать размер Таба, и замены их на пробелы.
Добавьте этот фрагмент в конец своего конфига:

"=====================================================
" Languages support
"=====================================================
" --- Python ---
"autocmd FileType python set completeopt-=preview " раскомментируйте, в случае, если не надо, чтобы jedi-vim показывал документацию по методу/классу
autocmd FileType python setlocal expandtab shiftwidth=4 tabstop=8
 formatoptions+=croq softtabstop=4 smartindent
 cinwords=if,elif,else,for,while,try,except,finally,def,class,with
autocmd FileType pyrex setlocal expandtab shiftwidth=4 tabstop=8 softtabstop=4 smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class,with

" --- JavaScript ---
let javascript_enable_domhtmlcss=1
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd BufNewFile,BufRead *.json setlocal ft=javascript

" --- HTML ---
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags

" --- template language support (SGML / XML too) ---
autocmd FileType html,xhtml,xml,htmldjango,htmljinja,eruby,mako setlocal expandtab shiftwidth=2 tabstop=2 softtabstop=2
autocmd bufnewfile,bufread *.rhtml setlocal ft=eruby
autocmd BufNewFile,BufRead *.mako setlocal ft=mako
autocmd BufNewFile,BufRead *.tmpl setlocal ft=htmljinja
autocmd BufNewFile,BufRead *.py_tmpl setlocal ft=python
let html_no_rendering=1
let g:closetag_default_xml=1
let g:sparkupNextMapping='<c-l>'
autocmd FileType html,htmldjango,htmljinja,eruby,mako let b:closetag_html_style=1
autocmd FileType html,xhtml,xml,htmldjango,htmljinja,eruby,mako source ~/.vim/scripts/closetag.vim

" --- CSS ---
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType css setlocal expandtab shiftwidth=4 tabstop=4 softtabstop=4
Подведение итогов

После прохождения столь длительного процесса настройки у нас получился достаточно гибкий инструмент для работы с Python. При этом, последующая установка, на другие ПК будет представлять только доустановки необходимых библиотек, переноса соответствущего конфига и установку плагинов.

Если кому-либо нужен больший функционал (например поддержка автокомплита для любых иных языков), то могу посоветовать лишь поискать необходимые плагины на
GitHub’е или на офицальном сайте сайте vim’a.

Полезные ссылки:

Раздел script сайта vim.org — тут
wikia по vim’у — тут
OpenVim: уроки по азам в vim — тут

Мой конфиг для vim на GitHub

Автор: Relrin

Источник

Vim для Python в 2020 году

Я уже некоторое время работаю над проектом Python. Вначале это было не очень удобно, так как я пытался выучить язык, разобраться в своем рабочем процессе и инструментах.

Спустя пару месяцев у меня наконец-то есть рабочая установка Vim с правильной подсветкой синтаксиса, интеллектуальным автозавершением кода и возможностями рефакторинга. Читайте дальше, чтобы увидеть, как это выглядит.

Заявление об ограничении ответственности : Моя установка может показаться слишком сложной.Вам не нужно устанавливать все плагины, перечисленные в этой статье, или копировать каждую строку конфигурации. Подбирайте то, что вам нравится.

Вот как выглядит мой Vim

TL; DR:

Основы

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

Другие плагины, которые я использую, включают

Цветовая схема, используемая на скриншотах, — joshdick / onedark.vim, вдохновленная темой Atom.

Подсветка синтаксиса

Vim поставляется с подсветкой синтаксиса для многих популярных языков, включая Python, хотя это не всегда лучший вариант.

Есть несколько вариантов улучшения выделения по умолчанию.

  • нумириас / семши, на мой взгляд, лучший. Он работает только с Neovim и требует поддержки Python 3.
  • sheerun / vim-polyglot включает поддержку многих языков, включая Python
  • python-mode / python-mode также неплохой вариант, хотя помимо выделения в нем есть много других вещей, которые мне не очень нравятся.

Семши (слева) против стандартного

Мои любимые цветовые схемы (которые я переключаю довольно часто): junegunn / seoul256.vim и joshdick / onedark.vim (тот, что на скриншотах).

Углубление

Вы можете настроить правила отступа вручную следующим образом.

  au BufNewFile, BufRead * .py
    \ set expandtab | "заменить табуляции пробелами
    \ set autoindent | "копировать отступ при начале новой строки
    \ set tabstop = 4
    \ set softtabstop = 4
    \ установить shiftwidth = 4
  

Лучшая альтернатива — плагин Vimjas / vim-python-pep8-indent. Он намного лучше соответствует руководству по стилю PEP8.

Складной

Сворачивание (: help foldmethod ) — это когда вы сворачиваете фрагменты кода, чтобы не отвлекаться.

Наилучшим приближением является использование метода сворачивания , отступ , хотя он не работает идеально.

  au BufNewFile, BufRead * .py \
  установить foldmethod = indent
  

Чтобы переключить сгиб, вы можете нажать za (: help fold-commands ), и для удобства я сопоставил его с Space .

  nnoremap <пробел> za
  

Линия и крепление

Плагин Fantastast density-analysis / ale можно использовать для линтинга (что по сути означает проверку на наличие синтаксических ошибок) и автоматического исправления. Он асинхронный, что означает, что он не будет блокировать пользовательский интерфейс во время работы внешнего линтера, и он поддерживает широкий спектр языков и инструментов.

Python + ALE = ❤️

ALE выявляет проблемы с вашим кодом в беспорядке.Когда вы перемещаете курсор на проблемную строку, в нижней части экрана отображается полное сообщение об ошибке.

По умолчанию ALE будет использовать все линтеры (которые являются просто исполняемыми файлами), которые он может найти на вашем компьютере. Запустите : ALEInfo , чтобы узнать, какие линтеры доступны, а какие включены.

Однако лучше явно указать, какие из них вы собираетесь использовать с конкретным типом файла:

  let g: ale_linters = {
      \ 'python': ['flake8', 'pylint'],
      \ 'рубиновый': ['standardrb', 'rubocop'],
      \ 'javascript': ['eslint'],
      \}
  

Некоторые линтеры также способны исправлять проблемы в вашем коде.В ALE есть специальная команда : ALEFix , которая исправляет весь файл. Пока что я всего лишь Google YAPF в качестве фиксатора, который форматирует весь файл, когда я нажимаю F10 или сохраняю текущий буфер.

  пусть g: ale_fixers = {
      \ 'python': ['yapf'],
      \}
nmap : ALEFix 
пусть g: ale_fix_on_save = 1
  

Последний вариант значительно экономит время — он автоматически исправляет (и, таким образом, форматирует) ваш файл при сохранении.

У меня также есть небольшая конфигурация, которая показывает общее количество предупреждений и ошибок в строке состояния.Очень удобно.

  функция! LinterStatus () прервать
  let l: counts = ale # statusline # Count (bufnr (''))

  пусть l: all_errors = l: counts.error + l: counts.style_error
  пусть l: all_non_errors = l: counts.total - l: all_errors

  return l: counts.total == 0? '✨ все хорошо ✨': printf (
        \ '😞% dW% dE',
        \ all_non_errors,
        \ all_errors
        \)
конечная функция

установить статусную строку =
установить статусную строку + =% m
установить статусную строку + = \% f
установить статусную строку + =% =
установить строку состояния + = \% {LinterStatus ()}
  

А вот еще парочка альтернатив ALE:

Джедаи

Jedi — это «языковой сервер» (см. Мою статью о LSP), отдельный процесс, работающий в фоновом режиме и анализирующий ваш код.

Другие клиенты (редакторы или IDE) могут подключаться к серверу и запрашивать некоторую информацию, например параметры завершения или координаты «перехода к определению».

По сути, Jedi — это IDE как услуга без графического интерфейса.

Чтобы использовать его, вам необходимо установить его с помощью pip install jedi , а затем также добавить клиента. Плагин davidhalter / jedi Vim отлично справляется.

Вот что он умеет:

  • Нажмите ctrl + пробел для вариантов завершения
  • d соответствует определению
  • g переходит к назначению
  • K показывает документацию
  • и более

Недавно перешел на neoclide / coc.nvim и coc-python. Coc — это «интеллектуальный движок» для Vim и Neovim, который действительно хорошо справляется с завершением работы и взаимодействием с языковыми серверами.

Кок (Завоевание завершения)

Для меня преимуществом является использование нового API с плавающим окном от Neovim, что делает его очень удобным.

Coc-python может использовать как Jedi, так и Microsoft’s Python Language Server. При первом запуске он попросит вас установить необходимые компоненты (например, линтер).

Coc предоставляет (с помощью Jedi) некоторые базовые возможности IDE, такие как

  nmap  gd  (определение coc)
  
  • Отображение документации (в плавающем окне!)
  nnoremap  K: вызов  show_documentation () 
функция! s: show_documentation ()
  if (index (['vim', 'help'], & filetype)> = 0)
    выполнить 'h' .expand ('')
  еще
    вызовите CocAction ('doHover')
  endif
конечная функция
  
  • Интеллектуальное переименование (переименовывает экспорт во всех файлах)
  nmap  rn  (совместное переименование)
  

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

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

Прочтите вики, чтобы узнать больше о его возможностях.

Два недостатка использования Coc:

  • Дорогой процесс узла, который необходимо запустить Coc для работы
  • Он имеет собственную независимую систему расширений и собственный (на основе JSON) файл конфигурации. Не для Vim.

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

Куда идти дальше?

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

И еще несколько статей в аналогичном ключе с этого сайта:

А …

.

Vim как Python IDE или Python IDE как Vim — PyCharm Blog

«Vim как Python IDE» — горячая тема. Всем известно, что Vim — это потрясающий текстовый редактор для быстрого и эффективного набора и редактирования текста (если вы опытный пользователь Vim). Кроме того, он обладает широкими возможностями настройки, надежен, работает практически в любой среде, а также получил высокую оценку опытных разработчиков. Естественно, многие люди выбирают Vim в качестве редактора для кодирования на Python и других языках.

Хотя Vim действительно отличный выбор, как только вы попытаетесь использовать его для чего-то, для чего он не предназначен, вы столкнетесь с проблемами. Например, если вы используете его как IDE. Очевидно, что многие разработчики Python хотят, чтобы это была IDE просто потому, что для продуктивной разработки Python требуется нечто большее, чем просто отличный редактор. Хотя это может работать для некоторых языков, но не для Python, который действительно сложно поддерживать в больших и сложных проектах.

В Python существует реальная необходимость избавиться от рутинных задач и использовать дополнительные инструменты, такие как проверки кода, выделение ошибок на лету, проверки зависимостей, быстрые исправления, рефакторинг, отладчик, поддержка фреймворков, помощь в тестировании, контроль версий, поиск и навигация, управление проектами, удаленная помощь в разработке, проверка соответствия PEP-8.Это настоящий список. И все эти функции должны работать вместе надежно, эффективно и надежно.

Вот для чего созданы IDE. Они обеспечивают необходимый уровень эффективности и комфорта для использования множества инструментов и функций в одном месте.

Хорошо это или плохо, но Vim не является IDE. Конечно, он настраивается и поддерживает множество вещей, с множеством плагинов и надстроек и других наворотов. Тем не менее, это действительно далеко от настоящей IDE.

Вот яркий пример перегрузки Vim.Результатом множества изощренных хаков модификаций, которые непонятны даже опытным пользователям Vim, является следующее тесное окно редактора:

Если вам нужна среда IDE для начала, это определенно трудный способ ее получить.

PyCharm предлагает обратный подход к этой проблеме. PyCharm — это полная IDE с настраиваемым и мощным редактором, унаследованным от платформы IntelliJ. Но вам не нужно выбирать между IDE или Vim: благодаря плагину IdeaVim (доступному для всех продуктов на базе IntelliJ) вы действительно можете получить лучшее из обоих миров.IdeaVim поддерживает множество функций Vim, включая сочетания клавиш, клавиши управления движением, многие типы команд, регистры, макросы, режимы и многое другое.

Но не верьте нам на слово. « Ничто не может заменить Vim, но IdeaVim кажется ближе, чем попытки любого другого редактора », — говорит Эндрю Брукинс, опытный разработчик, который пробовал разные текстовые редакторы и инструменты для Python и веб-разработки, в своем удивительно всеобъемлющем обзоре One Year Later: An Эпический обзор PyCharm 2.7 с точки зрения пользователя Vim.Мы настоятельно рекомендуем прочитать его, если вы еще этого не сделали.

Чтобы использовать эмуляцию VIM внутри PyCharm, загрузите и установите PyCharm, перейдите в Файл | Настройки | Плагины и поиск IdeaVim. Установите его, перезапустите IDE и все!
Попробуйте, и пока вы работаете, не стесняйтесь голосовать за новые функции и сообщать о любых проблемах в YouTrack.

Развивайте с удовольствием!
Команда PyCharm

.

vim как python ide

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

Загрузка…

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *