Pull to refresh

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

Reading time3 min
Views14K

Проблема


Вим унаследовал структуру директорий от 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
Tags:
Hubs:
Total votes 26: ↑21 and ↓5+16
Comments23

Articles