Настраиваем 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

    И выбираем тему.
    Метки:
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 61
    • +6
      Спасибо за статью. Чем мне подобные статьи нравятся — практически всегда среди знакомых вещей найдешь что-то новенькое и полезное.
      • –5
        у меня коряво работает тупое применение всего что вы описали
        • +6
          Вы знакомы с Vim? Если да, то что конкретно не работает? Если нет, что вы тут делаете?
          • +1
            а нельзя никак сделать своего рода свою сборку и выложить?
          • 0
            конечно знаком
            вечерком попробую еще раз, может вчера ночью что-то пропустил
          • 0
            зачем же тупо-применять — острее нужно мыслить! :)
          • НЛО прилетело и опубликовало эту надпись здесь
              • +1
                да, есть. плагинами или вручную написать
                www.vim.org/scripts/script.php?script_id=934 вот
                или вот www.vim.org/scripts/script.php?script_id=2424 для мака
                подробней не скажу, не пользуюсь. не представляю целей использования ftp, когда есть contol version systems разные и ssh для остального
                • НЛО прилетело и опубликовало эту надпись здесь
                • 0
                  Есть, но ИМХО лучше это делать через curlftpfs.
                  • 0
                    Замечательно есть на любой виртуальной файловой системе, например, GVFS. Монтируешь себе FTP в наутилусе и работаешь.
                    • 0
                      Хотя gedit для этих целей все-таки удобнее — он показывает прогрессбар при сохранении.
                  • +2
                    Давно хочу попробовать поработать в vim. Именно над рабочими проектами, чтобы сразу понять, удобно или нет. Но не могу этого сделать, т.к. «порог вхождения» довольно высок — клавиатурные сокращения непривычные, где брать всякие плагины и модули — тоже не очень понятно… Тот же эклипс или Idea я запросто освоил за несколько дней, а vim — не получается.

                    Что мне хотелось бы:
                    — готовый файл (файлы) с настройками клавиатурных сокращений, приведенных к традиционному для редакторов виду (они же там настраиваются, ведь правда?);
                    — нужные слова про подсветку синтаксиса, сниппеты, организацию проектов и т.д.;
                    — инструкции, написанные понятным для новичка языком, не больше 20 килобайт текста;
                    — скриншоты с тем, что я получу, выполнив все инструкции.

                    С чем мне хотелось бы работать:
                    — python, html, css, js
                    — svn, git, ftp

                    На хабре многие пользуются этим редактором, многие хвалят…
                    Наверняка у кого-нибудь найдутся ссылки на такую информацию (пусть на английском). Спасибо.
                    • 0
                      нету такого.
                      по виму книжки пишут толстые
                      это ide которую каждый точит под себя
                      eclipse хорош, просто подходы совершенно разные
                      • +2
                        Первое время не спешите настраивать хоткеи. Сначала разберитесь что к чему, возможно окажется что стандартные вимовские удобнее тех к которым вы привыкли.
                        Со сниппетами/проектами/VCS опять-таки спешить не надо, для начала важно просто освоиться. Иначе можете потратить кучу времени чтобы разобраться в каком-то плагине, и в конце концов понять что он вас не устраивает.
                        Инструкции — сначала vimtutor, потом пару коротких книжек, типа таких:
                        www.swaroopch.com/blog/a-free-book-on-vim/
                        vim.runpaint.org/
                        Всё сразу запомнить не получится, возможно имеет смысл делать для себя небольшой cheat-sheet по ключевым вещам, и периодически перечитывать его. Также полезно читать хелп, даже по уже известным командам.
                        Ещё, несмотря на обилие плагинов, возможно некоторые мелкие вещи придётся написать самому (что в общем-то не особо сложно, т.к. писать можно почти на любом языке).
                        • +1
                          > — готовый файл (файлы) с настройками клавиатурных сокращений, приведенных к традиционному для редакторов виду (они же там настраиваются, ведь правда?);

                          Этого делать крайне не рекомендуется. Более того, если хотите научиться продуктивно работать в vim, забудьте про существование нампада и стрелочек.
                          • +1
                            Прелесть вима в скорости, т.е. выучив хоткеи вы можете не отрываясь от привычных клавиш «фыва олдж» и не смотря на клавиатуру сделать что-то(копирование/удаление/поиск и тд). А если добавить свои хоткеи(у меня хоткеи только на сохранение и компиляция кода) и пользоваться мышкой, то смысл теряется и зачем тогда нужно настраивать вим если есть эклипс?
                            • +1
                              Используемые мной хоткеи:
                              F11 — открыть/зыкрыть VimCommander, двухпанельный файловый менеджер с классическими хоткеями (F5/F6 — копировать/переместить и т.д.)

                              F5/F6 — предыдущий/следующий буфер. Помогает MiniBufExplorer.

                              F10 — закрыть текущий буфер.

                              C-0/C-i — предыдущий/следующий тег (для тех кто использует ctags и им подобные).

                              \f — рекурсивный поиск слова под курсором во всех файлах, начиная с текущего каталога. ( map <LocalLeader>f :vimgrep /.*\<<c-r>=expand("")<cr>\> ../**/*<cr> )

                              {} — предыдущий/следующий элемент из QuickFix, содержащий строки с ошибками компиляции после make или с вхождением искомого слова после vimgrep (см пред. пункт)

                              ; — поиск и замена слова под курсором в текущем файле ( nmap ; :%s/\<<c-r>=expand("<cword>")<cr>\>/ )

                              И на закуску автоматическая вставка закрывающей фигурной скобки: imap {<CR> {<CR>}<Esc>O

                              Здесь всё в куче: stashbox.org/683702/.vimrc
                          • 0
                            Скажите, а какой у вас настроен шрифт?
                          • +8
                            я раньше из Vim reset'ом выходил…
                            • +3
                              а я в свою молодость переключался на другую виртуальную консоль )
                              • +1
                                ^z + killall vim :)

                                А теперь на работе и дома — только vim, и Python, и PHP, и C++. И не так уж и сложно оно мне далось, главное не бояться.
                                • 0
                                  Приостановленный процесс так не убьёшь. Либо killall vim; fg, либо killall -9 vim
                          • 0
                            У меня ругается на imap <c-r>=InsertTabWrapper(), говорит — No mapping found
                            Я в vim совсем некопенгаген, хотя и нравится :-).
                            • 0
                              наверно вместо = должен быть пробел.
                            • 0
                              1) У меня была проблема — не мог на виндах вязать гвим и питон 3.x.
                              2) Когда же апдейтнут vim

                              p.s.: gvim на винде — не извращение
                              • 0
                                Это у вас там меню на панельке с активного приложения, типа мак? Это что за аплет такой?
                              • +1
                                Кто — нибудь может уже исправленный runscript.vim выложить?
                                • 0
                                  Очень хорошо, есть вопросик, а как быть с кросплатформенностью? те подойдут ли конфиги одного vim из под linux в win версию? или macos?
                                  Просто часто надо бегать с машины на машину.
                                  Еще возникает вопрос, можно как то организовать доступ по sshfs+sudo на запись файлов?
                                  И может еще и терминал отдельно (да да, я знаю что хочу фантастиш) Но для админство и питоноводство был бы просто класс.
                                  • 0
                                    С кросспластформенностью проблем нет. Конфиги взаимозаменимы. Лучше юзать gvim.
                                    ssh+sudo это скорее вопрос к операционной системе. В линухе и маках можно, в винде наверное тоже можно извернуться. Вполне возможно что есть плагин для вима, но все же лучше ОС.
                                  • 0
                                    В общем с runscript.vim ничего не получилось, если править этот файл как в статье, то vim выдаёт вот это:
                                    «Привязки не найдены
                                    Привязки не найдены
                                    Привязки не найдены»,
                                    нашёл другой способ для запуска python скриптов:
                                    в .vimrc прописать следующее
                                    imap <special><F5> <ESC>:w\|!python %<CR>
                                    nmap <F5> :w\|!python %<CR>

                                    после этого скрипты будут выполняться по F5
                                    • 0
                                      Он с кривыми концами строк, мы должны его поправить:
                                      sudo apt-get install tofrodos #в бубунте
                                      dos2unix ~/.vim/plugin/runscript.vim


                                      А я думал через Vim проще:
                                      :set fileformat=unix
                                      :%s/^M//g

                                      Кто не знает, чтобы написать ^M, надо нажать Ctrl+V Ctrl+M.
                                      • 0
                                        Можно вместо ^M писать \r в s///.
                                        • 0
                                          но до этого режим концов строк нужно переключить
                                          • 0
                                            Для этого первой строчкой и идёт
                                            :set fileformat=unix
                                        • 0
                                          извините, что не в тему, но подскажите пожалуйста, а что за шрифт на картинке. мне так понравился. приятно работать. я под виндой.
                                          • +1
                                            Потрудитесь прочитать комментарии внимательно, их не так много.
                                            • +1
                                              огромное спасибо за содержательный ответ.
                                          • 0
                                            Лично я кроме тутора по Vim ничего не проходил, да и тот скорее из любопытства, да и тот давненько. Но остался открытым вопрос к ви-айм-гурам — ведь все эти хитрые команды предназначены для реального повышения скорости работы — набора и/или правки текста. Но основной режим редактора — ввод команд, поэтому при быстрой работе на клавиатуре промах мимо нужной кнопки (считай вместо одной команды ввел другую) весьма чреват, ну как минимум Esc+u. Как гуры достигают баланса между вводом команд где нельзя путать кнопки и быстротой работы. Как ни крути, а получается, что скорость из-за этого не настолько сильно и повышается. И вообще хотелось бы поглядеть видео как чел работает в Vim действительно эффективно, сам на ютубе не нашел.

                                            На самом деле давно хочется перейти на некий редактор, в котором вообще на 100% не требуется возить мышкой и при этом комфорт не теряется, но вот мотивации именно на Vim пока не хватает. На Vim'е, как я понял (под виндузами), до сих пор надо что-то допиливать, чтобы он понимал команды в русской раскладке и чтобы сохранял текст в UTF-8, но могу и ошибаться.

                                            И еще есть такое вот (наверное вообще еретическое пожелание) — немоноширинный шрифт он может отображать/использовать? Не люблю я их и все тут -)
                                            • 0
                                              www.vim.org/scripts/script.php?script_id=386 еще плагин вам в коллекцию
                                              python_match
                                              • 0
                                                Вопрос к Vim'оводам. Хочется перейти, но до жути не удобно со стандартными комбинациями. Может для начала посоветуете приближенную к реалиям gui-редакторов раскладку?

                                                Основные хотелки: перемещение стрелками, выделение с шифтом, буфер обмена — ctrl+c/ctrl+v или сtrl+ins/shift+ins, поиск по ctrl+f, сохранение по F2 или ctrl+s, желательно табы по ctrl+tab/ctrl+shift+tab, поддержка кодировок.

                                                Пробовал mswin.vim — как-то не помогло :(
                                                • +3
                                                  habrahabr.ru/blogs/python/74128/#comment_2138350

                                                  Попробуйте vimtutor и жёсткую дисциплину ;)
                                                  • +1
                                                    Табы есть с MiniBufExpl. habrahabr.ru/blogs/python/74128/#comment_2138350
                                                    Переключение на что угодно вешается: habrahabr.ru/blogs/python/74128/#comment_2138468
                                                    • +1
                                                      Первая ссылка должна была быть www.vim.org/scripts/script.php?script_id=159. Но лучше сначала убедиться что его нет в менеджере пакетов.
                                                      • 0
                                                        Спасибо за ссылки.

                                                        Я пробую переходить на его хоткеи… Но мне это непривычно и я не понимаю куда можно улучшать мои навыки, я же не собираюсь сдавать нормы секретаря машинистки. Просто вышеописанные хоткеи уже рефлекторно работают, а слепую печать я тоже пока не осилил.
                                                    • 0
                                                      ctrl+c/ctrl+v я описал, остальное не нужно.
                                                      Какие вам кодировки понадобились?
                                                      • 0
                                                        darvin, скажите, а как вы в убунте вынесли меню программы на верхнюю панель, как в Маке?
                                                        • 0
                                                          очень просто — code.google.com/p/gnome2-globalmenu/
                                                          не поленитесь, проголосуйте за него тут brainstorm.ubuntu.com/idea/3136/
                                                          скоро буду писать статью про затачивание gnome-based линукса удобными маковскими штучками (не скинизацию, как тысяча статей написана, а именно под юзабельность)
                                                          • 0
                                                            ну, вы просто герой :) отличное дело делаете.

                                                            спасибо за ссылки, буду вас читать.
                                                            • 0
                                                              некоторые умники считают, что если нравятся несколько интерфейсных решений эппл, ты обязан покупать Мак с анальным стимулятором
                                                        • 0
                                                          Парочка уточнений:

                                                          В основном конфиге:
                                                          i
                                                          map <c-r> InsertTabWrapper() (без знака = )

                                                          И при правке runscript.vim нужно не забыть указать хоткеи:

                                                          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

                                                          Ну и касательно настройки под FreeBSD:

                                                          порт с утилитой перекодировки: converters/unix2dos
                                                          расположение бинарника с питоном(для runscript.vim): /usr/local/bin/python
                                                          • 0
                                                            И да, если с опцией

                                                            set t_vb=

                                                            вим не перестает мерзко пищать, нужно поменять строку эту на

                                                            set t_vb="|40f"
                                                          • 0
                                                            У меня не работают спипеты для django. Открывают *.py файл, пиноновские снипеты, например def работает, django — нет. Если сделать set filetype=django_model, то снипеты работают, а подсветка синтаксиса пропадает. Как можно решить эту проблему?
                                                            • 0
                                                              Что-то тут не тут. У меня функция автокомплита не по табу а по C-r плюс она не выполняется, а просто название функции вставляется.
                                                              • 0
                                                                В коде, исправляющем plugin/runscript.vim вы, кажется, пропустили коды клавиш, которые мапятся на соответствующие команды. В противном случае для каждой команды nmap получаем варнинг при запуске vim: «No mapping found»

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

                                                                Остальное все получилось, спасибо еще раз.

                                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.