About | Blog | xapy

ropevim: vim, на шаг ближе к IDE

У всех пользователей vim, пишущих python-код в этом редакторе, рано или поздно возникает потребность в функциональности, знакомой по “большим” IDE. Многие в поиске решений останавливаются на встроенных возможностях вроде дополнения ключевых слов, встретившихся в открытом файле, встроенный go-to-defintion и другие, применение которых ограничивается их универсальностью. В этом посте рассмотрим инструмент, заточенный под работу с python-кодом, предназначенный для рефакторинга кода, и, одновременно, предоставляющий возможности более “умного” автодополнения, перехода в определению идентификатора и др.

Далее идёт собственная интерпретация довольно лаконичной документации, выполненная в виде небольшого howto.

Установка

Прежде всего понадобится vim с поддержкой питона. Для генту - делаем

# USE=python emerge app-editors/vim app-vim/vimpython

Далее — установка самой библиотеки rope и соответствующих скриптов. Для этого — получаем исходники из mercurial-репозитория (здесь и далее подразумевается, что исходники складываются в /usr/src):

/usr/src $ hg clone http://bitbucket.org/agr/rope
/usr/src $ hg clone http://bitbucket.org/agr/ropemode
/usr/src $ hg clone http://bitbucket.org/agr/ropevim

или, качаем снапшоты — http://rope.sf.net/hg/rope/archive/tip.tar.gz + http://rope.sf.net/hg/ropemode/archive/tip.tar.gz + http://rope.sf.net/hg/ropevim/archive/tip.tar.gz .

Первым делом — устанавливаем rope:

/usr/src/rope $ sudo python setup.py install

далее устанавливаем ropevim:

/usr/src/ropevim $ ln -s ../ropemode/ropemode
/usr/src/ropevim $ sudo python setup.py install

На этом установка библиотеки закончена, можно приступать к настройке.

Настройка

Чтобы воспользоваться всеми возможностями библиотеки ropevim, необходимо подключить её. Как говорит README.txt, есть два способа сделать это:

  1. включить в ~/.vimrc (echo "source /usr/src/ropevim/ropevim.vim" >> ~/.vimrc)
  2. скопировать в ~/.vim/plugins — ln -s /usr/src/ropevim/ropevim.vim ~/.vim/plugins

Остаётся дописать в ~/.vimrc строку let ropevim_vim_completion=1. Теперь этим инструментом можно уже пользоваться. Для теста попробуйте открыть python-файл и, оставив курсор в месте, подходящем для дополнения, в режиме вставки выполните <C-R>=RopeCodeAssistInsertMode(). В результате Вы должны получить приглашение ввести путь к корню текущего проекта, например “.”. После этого rope выполнит индексирование файлов текущего проекта, и сразу предложит подходящие варианты дополнения. Работает? Отлично. Сразу вешаем на горячую клавишу, например:

function! TabWrapperRope()
  if strpart(getline('.'), 0, col('.')-1) =~ '^\s*$'
    return "\<Tab>"
  else
    return "\<C-R>=RopeCodeAssistInsertMode()\<CR>"
  endif
endfunction

imap <Tab> <C-R>=TabWrapperRope()<CR>

Получили довольно симпатичное и вполне вменяемое автодополнение.

Разумеется, на этом возможности библиотеки не заканчиваются, а только начинаются. Здесь я не буду полностью описывать всё, что она умеет делать, а лишь перечислю некоторые часто используемые функции с их привязками по умолчанию. Все команды разделены на логические группы: для работы с проектами, собственно рефакторинг, code-assist. Их горячие комбинации начинаются, соответственно, с C-x p, C-c r, C-c r a. Последовательности из трёх-четырёх клавиш, очевидно, не самый удобный способ выполнять данные действия, потому для некоторых функций предусмотрены короткие сочетания “из коробки”. Если верить README.txt они выглядят так:

================  ============================
Key               Command
================  ============================
M-/               RopeCodeAssist
M-?               RopeLuckyAssist
C-c g             RopeGotoDefinition
C-c d             RopeShowDoc
C-c f             RopeFindOccurrences
================  ============================

Среди функций rope стоит отметить: переименование переменных, модулей, анализ и работа с “импортами”, отображение документации к функциям/методам/классам и др.

Таким образом, сделав vim на шаг ближе по функциональности к “старшим братьям”, ещё раз убеждаемся, что расширение возможностей этого текстового редактора ограничено лишь фантазией разработчиков.

Ссылки:

Add post to: Delicious Reddit Slashdot Digg Technorati Google
Понравился пост? Оставьте комментарий!
Comment

Comments

slav0nic 12.09.2008 12:24

мм, надо будет поюзать, уже года 2 пытаюсь писать в виме, но вечно чего-то не хватает, хотя автодополнения и стандартные есть, но надо будет поглядеть rope )

reply
gearheart 20.09.2008 23:58

Ссылки на репозитории устарели

http://bitbucket.org/agr/rope http://bitbucket.org/agr/ropemode http://bitbucket.org/agr/ropevim

reply
Yevgen 23.09.2008 18:26

А на оф. сайте всё так же ссылки на rope.sf.net/hg

reply

Comment form for «ropevim»

Required. 30 chars of fewer.

Required.

captcha image Please, enter symbols, which you see on the image