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

    Проблема


    Вим унаследовал структуру директорий от 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
    
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

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

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

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