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
    

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 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
                    спасибо, исправлено
                  • UFO just landed and posted this here
                      0
                      Старый топик, но раз уж я мимопроходил с HackerNews, то оставлю это здесь:
                      www.charlietanksley.net/philtex/sane-vim-plugin-management/
                      Vundle(почти как Bundle) — Pathogen автора не устроил.

                      Only users with full accounts can post comments. Log in, please.