31 марта 2011 в 01:02

Pathogen. Организуем плагины

VIM*

Проблема


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

Решение


Pathogen позволяет устанавливать плагины в отдельные директории совершенно прозрачно для вима, причем плагины размещенные «по-старому» продолжат работать (например коллекция цветовых схем).

Пример директорий на рабочей машине:
$ ls ~/.vim/bundle/
eclim          nerdtree             vim-align     vim-haml      vim-ruby           vim-vividchalk
gist           PreciseJump          VimCalc       vim-markdown  vim-ruby-debugger  wombat256mod
IndexedSearch  snipmate.vim         vim-cucumber  vim-rails     vim-shoulda
jquery         SuperTab-continued.  vim-fugitive  vim-repeat    vim-surround
matchit.zip    textile.vim          vim-git       Vim-R-plugin  vim-tcomment


Установка

Достаточно скачать последнюю версию pathogen.vim, положить его в ~/.vim/autoload и добавить следующие строчки в ваш .vimrc:

filetype off

call pathogen#helptags()
call pathogen#runtime_append_all_bundles()

filetype plugin indent on


Всё, теперь все плагины размещенные в своих директориях в ~/.vim/bundle будут автоматически загружаться.

Обновление

Кроме того, плагины стало просто обновлять, для чего Tammer Saleh написал небольшой скрипт (осторожно, перед обновлением он удаляет все старые плагины), его нужно положить в директорию ~/.vim:
#!/usr/bin/env ruby

git_bundles = [ 
  "git://github.com/astashov/vim-ruby-debugger.git",
  "git://github.com/msanders/snipmate.vim.git",
  "git://github.com/scrooloose/nerdtree.git",
  "git://github.com/timcharper/textile.vim.git",
  "git://github.com/tpope/vim-cucumber.git",
  "git://github.com/tpope/vim-fugitive.git",
  "git://github.com/tpope/vim-git.git",
  "git://github.com/tpope/vim-haml.git",
  "git://github.com/tpope/vim-markdown.git",
  "git://github.com/tpope/vim-rails.git",
  "git://github.com/tpope/vim-repeat.git",
  "git://github.com/tpope/vim-surround.git",
  "git://github.com/tpope/vim-vividchalk.git",
  "git://github.com/tsaleh/vim-align.git",
  "git://github.com/tsaleh/vim-shoulda.git",
  "git://github.com/tsaleh/vim-supertab.git",
  "git://github.com/tsaleh/vim-tcomment.git",
  "git://github.com/vim-ruby/vim-ruby.git",
]

vim_org_scripts = [
  ["IndexedSearch", "7062",  "plugin"],
  ["gist",          "12732", "plugin"],
  ["jquery",        "12107", "syntax"],
]

require 'fileutils'
require 'open-uri'

bundles_dir = File.join(File.dirname(__FILE__), "bundle")

FileUtils.cd(bundles_dir)

puts "Trashing everything (lookout!)"
Dir["*"].each {|d| FileUtils.rm_rf d }

git_bundles.each do |url|
  dir = url.split('/').last.sub(/\.git$/, '')
  puts "  Unpacking #{url} into #{dir}"
  `git clone #{url} #{dir}`
  FileUtils.rm_rf(File.join(dir, ".git"))
end

vim_org_scripts.each do |name, script_id, script_type|
  puts "  Downloading #{name}"
  local_file = File.join(name, script_type, "#{name}.vim")
  FileUtils.mkdir_p(File.dirname(local_file))
  File.open(local_file, "w") do |file|
    file << open("http://www.vim.org/scripts/download_script.php?src_id=#{script_id}").read
  end
end
Андрей @sylvio
карма
35,9
рейтинг 0,0
Похожие публикации
Самое читаемое Разработка

Комментарии (23)

  • +3
    А еще можно положится на какого-нибудь меинтейнера (конечно если устраивает набор плагинов). Например для рельсов лучше набора чем у Yehuda Katz я не видел — github.com/carlhuda/janus. Процесс установки и апдейта очень прост. Клоним — запускаем rake (как для установки, так и для апдейта). Не пакетный менеджер, но тоже удобно. Плюс есть возможность не просто использовать его набор плагинов и конгфиг, но и подключать свои и оверрайдить конфиг не залазя в его директорию.
  • +6
    Внаглую порекламирую свой скриптик :) пригодится тем, у кого нет руби, но зато есть питон :) и предыдущую версию каталога на всякий случай сохраняет, и с большего числа типов источников таскать умеет :)

    github.com/dimasg/vim
  • +7
    Возможно Вам понравится vundle
    • +1
      Спасибо, выглядит как самый правильный способ управления пакетами — прямо из вима, без дополнительных скриптов.
    • +1
      Спасибо Вам за vundle! Пользуюсь им с ноября, и не представляю как раньше без него жил.
      • 0
        Спасибо! )
    • 0
      Слоу пост6 когда я пытаюсь установить плагин с vim-script у меня выходит вот, что:

      Press ENTER or type command to continueCloning into /Users/andoriyu/.vim/bundle/F9…

      Username:
      Password:
      fatal: Authentication failed

      Что там надо писать? Какой логин/пароль?
      • 0
        Скорей всего это значит что урл репозитория неверный…
        Можно узнать названия плагинов которые пытаетесь установить?
        А еще лучше — конфиг в студию! )
        • 0
          " vim-scripts repos
          Bundle 'L9'
          Bundle 'FuzzyFinder'
          Bundle 'rails.vim'

          Из примера взял.
          • 0
            Хм, оч странно…

            Какие версии Вим, Гит, Vundle?
            • 0
              git version 1.7.4.4
              VIM — Vi IMproved 7.3 (2010 Aug 15, compiled Apr 4 2011 21:21:52)
              Vundle вчера из репа на гитхабе поставил.
              • 0
                а можно еще Vundle SHA1? )
                • 0
                  Если вы об этом: commit 138d1a5e77f21ec94dfcf1a30d31f2400b7ad590
  • +2
    Плагины можно организовать с помощью git submodule.
    Тогда обновление будет выглядеть как:
    git submodule update
    • 0
      не совсем так. если свой репозиторий то делать надо так:

      git submodule foreach git pull
      • 0
        Наверно можно и так, но у меня все работает с:
        git submodule init — один раз при развертывании или при добавлении нового плагина.
        git submodole update — для обновления всех плагинов.
  • +1
    Очень хороший набор github.com/akitaonrails/vimfiles
    Пользуюсь болше года для rails, php.
    Установка, как ужe подсказали тут, через git submodule.
  • +2
    Еще для корректной работы pathogen в _vimrc перед строчками

    ...
    call pathogen#helptags()
    call pathogen#runtime_append_all_bundles()
    ...

    стоит прописать
    filetype off
    .

    А после вызова обратно включить:
    filetype plugin on
    filetype plugin indent on
    ...
    • 0
      спасибо, исправлено
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Старый топик, но раз уж я мимопроходил с HackerNews, то оставлю это здесь:
    www.charlietanksley.net/philtex/sane-vim-plugin-management/
    Vundle(почти как Bundle) — Pathogen автора не устроил.

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