Полезные плагины для Vim

Немного рекламы

Эту статью можно рассматривать как продолжение статьи Vim. Первая установка, написанной два года назад. На этот раз речь пойдет про некоторые полезные плагины, которые упрощают установку и удаление плагинов, приближают возможности vim к полноценной среде разработке (IDE) за счет показа структуры исходников, дерева каталогов и дерева проекта.

Pathogen. Упорядочиваем плагины

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

  • в директорию, где расположена сам Vim (под Windows это C:\Program Files\Vim\vim73). Этого делать не рекомендуется;
  • в директорию vimfiles, расположенную на уровень выше (C:\Program Files\Vim\vimfiles). Уже лучше, но тоже не очень хорошо, потому что в этом случае необходимо иметь права доступа на запись в Program Files;
  • в рабочей директории пользователя. Под Linux это ~/.vim, а под Windows XP - C:\Documents and Settings\USERNAME\vimfiles, или, как иногда пишут (а Vim эту запись понимает) - ~\vimfiles.

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

Как вы наверняка знаете, в vim существует несколько типов плагинов, каждый из которых необходимо устанавливать в разные директории: autoload, plugin, syntax, ftplugin и т.д. Кроме того, документацию по плагину необходимо устанавливать в директорию doc. Часто плагины включают в себя несколько файлов, которые нужно раскидывать по разным директориям, например, plugin и doc. При этом в папке plugins и других образуется каша из файлов разных плагинов. Такая каша мешает при обновлении плагинов - сначала желательно удалить все старые файлы обновляемого плагина, а потом скопировать туда новые, но при этом надо помнить, в какие директории были скопированы файлы плагина.

На помощь приходит плагин pathogen, который решает проблему следующим образом: внутри ~/.vim (или ~\vimfiles под Windows) вы создаете специальную директорию - по умолчанию она должна называться bundle, но в настройках плагина ее можно и переименовать. Затем, когда вам надо установить плагин, вы не просто кидаете его файлы в общие директории plugin, doc и т.п., а создаете для каждого плагина свою поддиректорию в bundle, а в нем создаете директории plugin, doc и т.п. Получается, что директории plugin, doc и т.п. будут индивидуальные для каждого плагина. Чтобы стало понятнее, вот пример такой директории с двумя установленными плагинами bufexplorer и bufferlist:

C:\Documents and Settings\USERNAME\vimfiles\ 
|---bundle
    |---bufexplorer
    |   |---doc
    |   |   |---bufexplorer.txt
    |   |   `---tags
    |   `---plugin
    |       `---bufexplorer.vim
    `---bufferlist
        `---plugin
            `---bufferlist.vim

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

Кроме того, pathogen предоставляет удобную возможность генерации тегов справки для всех установленных плагинов с помощью одной команды :Helptags (с большой буквы). То есть теперь не надо выполнять :helptags для каждой отдельной директории справки (doc), достаточно просто вызвать только команду :Helptags.

Этот плагин в последнее время активно развивается, и за неделю до написания этой статьи у него вышла версия 2.0, на которую и будем ориентироваться.

Установка

Установка плагина довольно простая.

  1. Необходимо скопировать файл pathogen.vim в директорию ~/.vim/autoload (под Linux) или в ~\vimfiles\autoload (под Windows, C:\Documents and Settings\USERNAME\vimfiles\autoload - под Windows XP). В дальнейшем я не буду уточнять, что обозначает запись ~\vimfiles под Windows.
  2. Создать директорию bundle внутри ~/.vim или ~\vimfiles
  3. Как можно выше в .vimrc (или _vimrc под Windows) добавить строчку call pathogen#infect().
    Эту строчку надо добавлять до команды filetype plugin indent on в .vimrc/_vimrc.

Если вам не нравится имя директории bundle, то вы можете переименовать ее в любую другую, например, myplugins, только при этом в .vimrc/_vimrc вместо

call pathogen#infect()

нужно написать

call pathogen#infect('myplugins')

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

call pathogen#infect('~/src/vim/bundle')

Как это работает

Давайте коротко рассмотрим, каким образом pathogen позволяет создавать свою структуру директорий plugin, doc и т.п. для каждого плагина. А никакой хитрости здесь нет. В vim есть встроенная переменная runtimepath, или в сокращенном виде rtp (чтобы получить к ней доступ, надо писать &runtimepath или &rtp), которая хранит список директорий, где могут быть установлены плагины.

По умолчанию в *nix &runtimepath содержит:

  • $HOME/.vim
  • $VIM/vimfiles
  • $VIMRUNTIME
  • $VIM/vimfiles/after
  • $HOME/.vim/after

В Windows этот список выглядит следующим образом:

  • $HOME/vimfiles
  • $VIM/vimfiles
  • $VIMRUNTIME
  • $VIM/vimfiles/after
  • $HOME/vimfiles/after

Что обозначают переменные $HOME, $VIM и $VIMRUNTIME я писал в статье Программирование скриптов для Vim, здесь приведу краткую таблицу с тем, где эти директории расположены в Windows XP:

ПеременнаяОписаниеПример пути в Windows XP
$VIMПуть до установленного VimC:\Program Files\Vim
$VIMRUNTIMEПуть до исполняемого файла VimC:\Program Files\Vim\vim73
$HOMEПуть до домашней директорииC:\Documents and Settings\USERNAME

Плагин pathogen при инициализации просто просматривает директории внутри bundle и добавляет их в переменную runtimepath. Чтобы посмотреть содержимое этой переменной выполните следующую команду:

:echo &runtimepath

Вот, например, как результат этой команды выглядит у меня под Windows XP со многими установленными с помощью pathogen плагинами:

Vimball. Установка плагинов в формате vba

Плагин vimball относится скорее к списку необходимых плагинов, потому что многие плагины распространяются в виде единственного файла с расширением .vba или .vmb. Чтобы его установить, как раз и должен быть установлен этот плагин. Этот же плагин и создает пакеты в данном формате. Раньше vimball работал только с расширением .vba (и очень многие пакеты плагинов распространяются именно с этим расширением), однако в последних версиях сделана попытка перейти к расширению .vmb, и по умолчанию пакет создается именно в с этим расширением.

Для установки плагина или набора плагинов с использованием vimball в простейшем случае вам достаточно открыть скачанный файл *.vba или *.vmb в vim и выполнить команду:

:source%

Или в сокращенном виде:

После этого скрипт в формате .vba создаст все нужные файлы в соответствующих в поддиректориях plugin, doc и т.п. в директории ~/.vim (или ~\vimfiles). Удобно.

Установка

Установка плагина vimball стандартна, надо просто распаковать архив с директориями plugin, doc и autoload в директорию ~/.vim или ~\vimfiles. Если вы уже используете pathogen, то можно распаковать и в директорию bundle или его аналог, если вы ее переименовали.

Vimball + pathogen

Если вы уже используете pathogen, который был описан в первом разделе, то может возникнуть вопрос по поводу того, как при установке плагина из *.vba использовать удобное упорядочивание файлов, которое позволяет pathogen? Для этих целей vimball предоставляет специальную команду, которая позволяет выбирать, в какую директорию распаковывать плагин.

В этом случае при установке плагина (пусть он называется myplugin) вместо простой команды :so% нужно вводить чуть более сложную команду:

Под Linux:

:UseVimball ~/.vim/bundle/myplugin

Под Windows:

:UseVimball ~\vimfiles\bundle\myplugin

При этом надо не забыть предварительно создать директорию myplugin.

Создание пакета в формате vba

Плагин vimball служит также и для создания пакета в формате vba/vmb, предназначенного для распространения ваших плагинов.

Для создания пакета необходимо проделать следующие шаги:

  1. Установить плагин (или набор плагинов) в директорию ~/.vim или ~\vimfiles (создать пакет плагина, установленного в директорию bundle для работы с pathogen'ом мне не удалось).
  2. Создать текстовый файл, содержащий список файлов, которые необходимо включить в пакет (далее в примере я покажу, как он должен выглядеть).
  3. Открыть текстовый файл, созданный на предыдущем шаге, в vim.
  4. Выполнить команду :%MkVimball myplugin, где myplugin - это имя будущего пакета.

После этого в директории рядом с созданным текстовым файлом появится пакет myplugin.vmb.

Давайте в качестве упражнения создадим пакет vmb для плагина, который мы создавали в статье Программирование скриптов для Vim. Часть 8. Более подробно о плагинах. Скачать архив с плагином можно здесь, сейчас даже не важно, что этот плагин делает, важно, что он включает в себя два файла: doc/todo_next.txt и plugin/todo_next.vim.

Распаковываем архив в ~/.vim или ~\vimfiles и создаем где-нибудь текстовый файл со следующим содержимым:

doc/todo_next.txt
plugin/todo_next.vim

Открываем его в vim и выполняем следующую команду:

:%MkVimball todo_next

После этого в текущей директории будет создан файл todo_next.vmb.

Для проверки можете удалить исходные файлы плагина todo_next из директорий doc и plugin, и установить его заново из пакета todo_next.vmb.

Полезные команды vimball

В завершение рассмотрим некоторые команды, которые предоставляет плагин vimball.

Просмотр файлов пакета

Для того, чтобы посмотреть, какие файлы будут созданы после установки того или иного пакета vba / vmb, откройте его в vim и выполните следующую команду:

:VimballList

Вот, например, что выводит эта команда для файла todo_next.vmb, который мы только что создали:

Удаление плагинов

Если плагин устанавливался с помощью vimball, то с помощью него же его можно и удалить. В простейшем случае, если вы не использовали pathogen, то для удаления плагина достаточно вызвать команду

:RmVimball myplugin

где myplugin - это имя удаляемого плагина.

Если вы использовали pathogen и устанавливали плагин с помощью команды

:UseVimball ~/.vim/bundle/myplugin

или

:UseVimball ~\vimfiles\bundle\myplugin

то удалять его нужно с помощью команды

:RmVimball myplugin ~/.vim/bundle/myplugin

или

:RmVimball myplugin ~\vimfiles\bundle\myplugin

соответственно. Хотя, на мой взгляд, если используется pathogen, то проще удалить просто директорию плагина и мучиться с удалением через vimball не стоит. А вот если вы pathogen не используете, то эта возможность очень полезна.

Как же vimball знает, какие файлы он должен удалить? Вся информация об установленных с помощью vimball плагинах хранится в файле (файлах) .VimballRecord, который создается в директории ~/.vim, ~\vimfiles, или в поддиректории плагина внутри bundle, если вы используете pathogen.

Для примера я установил два плагина непосредственно в ~\vimfiles без использования pathogen. Вот как выглядит содержимое файла .VimballRecord:

todo_next.vmb: call delete('C:\Documents and Settings\Jenyay\vimfiles/doc/todo_next.txt')|call delete('C:\Documents and Settings\Jenyay\vimfiles/plugin/todo_next.vim') myprojects.vba: call delete('C:\Documents and Settings\Jenyay\vimfiles/plugin/myprojects.vim')|call delete('C:\Documents and Settings\Jenyay\vimfiles/syntax/myprojects.vim')|call delete('C:\Documents and Settings\Jenyay\vimfiles/syntax/myprojectsSvn.vim')

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

Tagbar. Просмотр структуры исходного кода

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

Для сравнения, вот как выглядит один и тот же файл в представлении этих двух плагинов.

taglist:

tagbar:

Кроме того, tagbar помечает область видимости методов (закрытый, защищенный или публичный).

Установка

Так как tagbar распространяется в формате vba, то для установки этого плагина требуется плагин vimball, о которым говорилось выше.

Устанавливается пакет tagbar.vba, как обычно, с помощью команды :so% или с помощью команды :UseVimball, если вы используете pathogen.

Кроме того, для работы плагина требуется программа ctags. Под Linux'ом ее достаточно просто установить, и начинать работать с плагином tagbar, под Windows необходимо еще настроить путь до ctags.exe. Для этого в файл настроек _vimrc надо добавить следующую строку:

let g:tagbar_ctags_bin='C:\Program Files\Ctags\ctags.exe'

Разумеется, путь до ctags.exe у вас может быть свой.

Использование

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

:TagbarToggle

Каждый раз запускать эту команду не удобно, лучше повисить ее на какую-нибудь горячую клавишу, например, Ctrl+T, для этого в .vimrc или _vimrc надо добавить следующие строки:

nmap <C-t> :TagbarToggle<cr>
imap <C-t> <esc>:TagbarToggle<cr>i<right>

Первая строка добавляет комбинацию Ctrl+T для нормального режима, а вторая - для режима вставки.

Кроме :TagbarToggle плагин предоставляет команды :TagbarOpen и :TagbarClose соответственно для открытия и закрытия окна tagbar.

По умолчанию окно tagbar открывается с правой стороны, но если вы хотите, чтобы оно открывалос слева, как на скриншоте, то для этого в файл .vimrc / _vimrc надо добавить строку

let g:tagbar_left = 1

Кроме того, можно так настроить tagbar так, чтобы при выборе метода, класса и т.п. плагин не только переносил курсор на соответствующее объявление, но и закрывал свое окно. Для этого в .vimrc / _vimrc надо добавить строку

let g:tagbar_autoclose = 1

Project. Организация исходников в проекты

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

Внешнеий вид окна проекта показан на следующем скриншоте:

Особенностью данного плагина является то, что файл проекта располагается не рядом со всеми исходниками, как это принято обычно в IDE, а все созданные проекты описываются в файле $HOME/.vimprojects, то есть под Linux'ом это будет ~/.vimprojects, а под Windows XP - C:\Documents and Settings\USERNAME\.vimprojects.

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

У данного плагина также есть возможность открывать проекты из заданного файла.

Установка

Установка плагина стандартна, без каких-либо особенностей:

  1. распаковываем файлы плагина в директорию ~/.vim, ~\vimfiles, или ~\vimfiles\bundle, если вы используете pathogen
  2. Перезапускаем vim
  3. Создаем теги для справки с помощью команды :helptags {путь до директории doc, куда была распакован файл документации} или просто :Helptags, если вы используете pathogen.

Работа с плагином project

Создавать проект можно вручную, в справке к плагину, вызываемой командой h: project дано описание формата файла проекта. Но, если у нас уже довольно много файлов исходников, то можно создать проект автоматически. Далее будут показаны шаги создания проекта по существующему дереву исходников.

Запускаем vim и выполняем команду

:Project

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

Переводим курсор в это окно и нажимаем комбинацию \C. Здесь имеется в виду, что клавиша <LocalLeader> соответствует клавише "\" (так установлено по умолчанию в vim), если вы ее меняли, то нажимаете ту клавишу, что соотвествует клавише <LocalLeader> у вас. То есть, строго говоря, комбинация выглядит как <LocalLeader>C. После этого плагин выведет несколько вопросов, на которые надо будет ответить.

Первое, что он спросит - это имя проекта. Все скриншоты я делал применительно к программе Soft/Outwiker?, поэтому и название проекта ввел соответствующее.

Затем надо задать путь до корневой директории проекта:

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

После этого вводим фильтр для файлов. Плагин project просканирует рекурсивно все поддиректории и добавит в файл проекта файлы, соответствующие маске (или маскам). Если нужно добавить несколько масок, то они разделяются пробелами.

Проект готов.

После этого переходим в окно проекта и сохраняем изменения в нем. Проект создан.

Если в процессе работы появились новые файлы, которые надо добавить в проект, или какие-то файлы надо удалить, то есть несколько путей для их добавления. Первый - добавить нужные файлы в файл .vimprojects вручную. Второй путь - в дереве проекта выбрать директорию, где появился новый файл и нажать \r, в этом случае плагин просканирует выбранную директорию и заново составит список файлов, соответствующих маске. Третий вариант - выбрать корневую директорию и нажать \R, эта команда аналогична \r, за исключением того, что все поддиректории будут просмотрены рекурсивно.

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

:Project имя_файла

В этом случае можно создавать отдельные файлы для каждого проекта.

Чтобы ознакомиться со всеми возможностями плагина введите команду :h project.

Winmanager. Дерево каталогов в vim

Плагин winmanager позволяет открывать в отдельном окне дерево каталогов, что в некотором смысле даже может заменить плагин project (хотя одно другому не мешает). Кроме того, winmanager использует плагин bufexplorer для показа списка открытых буферов.

Внешний вид работы плагина показан на следующем скриншоте

Установка

Плагин winmanager распространяется в формате vba, поэтому для его установки требуется плагин vimball. Сначала необходимо установить пакет winmanager.vba, как это было описано выше (с помощью команды :so% или :UseVimball...).

После установки пакета в директории plugin появятся два файла: start.kde и start.gnome. Под Linux (под Windows этот шаг выполнять не надо) надо создать симлинк с именем start в директории, перечисленной в переменной окружения $PATH, на один из этих двух файлов в зависимости от вашей графической оболочки. Этот шаг нужен для того, чтобы плагин мог открывать файлы во внешних программах.

Затем желательно установить плагин bufexplorer. Он устанавливается простой распаковкой архива в директорию ~/.vim или ~\vimfiles. Bufexplorer показывает список открытых буферов, их номера и некоторую другую информацию, которую winmanager выводит в отдельное окно. Если вы почему-то не хотите использовать плагин bufexplorer, то от него можно отказаться в настройках плагина.

Работа с плагином winmanager

Для показа/скрытия окна winmanager предназначена команда :WMToggle, разумеется, ее можно повесить на какую-нибудь комбинацию клавиш. Не будем отступать от того, что рекомендуется в справке, пусть эта команда вызывается с помощью комбинации Ctrl+W Ctrl+T. Для этого в файле .vimrc / _vimrc нужно добавить строку:

map <c-w><c-t> :WMToggle<cr>

Если вам покажется, что размер окна с деревом маловат, то его ширину можно настроить с помощью глобальной переменной g:winManagerWidth. Например, чтобы установить ширину окна winmanager равной 35 символов, надо в .vimrc / _vimrc добавить следующую команду:

let g:winManagerWidth=35

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

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

Текущую директорию можно добавить в "избранное" (favorites) с помощью клавиши f, но, к сожалению, избранные директории не сохраняются между перезапусками vim.

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

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

А вообще, плагин bufexplorer можно использовать и отдельно от winmanager. Например, открытие списка буферов осуществляется с помощью клавиш \be. Посмотрите справку :h bufexplorer, у этого плагина много полезных возможностей, о нем, возможно, стоит рассказать отдельно, но уже как-нибудь в другой раз.

Немного рекламы

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
4.5 stars

Рейтинг 4.2/5. Всего 11 голос(а, ов)



TheAthlete 04.09.2011 - 20:42

Winmanager. Дерево каталогов в vim

Здравствуйте! Могу посоветовать вместо плагина Winmanager, плагин NERDTree, очень удобный плагин

Jenyay 04.09.2011 - 21:01

Да, NERDTree тоже хороший плагин, я его упоминал в предыдущей статье, так и не решил, кто из них удобнее, но в последнее время пользуюсь Winmanager.

Shtucer 30.09.2011 - 21:20

>А вообще, плагин bufexplorer можно использовать и отдельно от winmanager.

А, вообще, с winmanager можно использовать и NERDTree и Project. Решать кто из них удобней не нужно, они разного поля ягоды. Winmanager - это... менеджер окон в vim, а уж кто там в окне маячит рассказать winmanager не трудно. Научить Project работать в Wunmanager у меня заняло минут 30. С учетом, что дикое количество плагинов знают про winmanager... Вот решать кто удобней, winmanager или exVim, это интересней и полезней.

Сергей 16.11.2011 - 14:02

Способ установки плагинов

Вы забыли упомянуть, что одним из наиболее распространённых способов установки плагинов при использовании pathogen является клонирование репозиториев плагинов в подкаталоги bundle, что позволяет легко их обновлять (возможно, в автоматическом или полу-автоматическом режиме).

Станислав 04.08.2012 - 17:50

Indent-guide

Подскажи, что ты используешь для визуального обозначения линий отступов?

Jenyay 06.08.2012 - 06:54

Я себе в файле настроек прописал следующие строки, чтобы показывать табуляции:

" Включить подсветку невидимых символов
setlocal list
" Настройка подсветки невидимых символов
setlocal listchars=tab:\|\ ,trail:·


Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 860