如何为vim安装插件?


147

我想尝试下面链接的Vim插件。它为.haml和(可能).sass文件添加语法突出显示。

http://github.com/tpope/vim-haml

我做了这个

$ cd ~/.vim
$ git clone git://github.com/tpope/vim-haml.git

.haml在Vim中打开了一个文件,但是没有突出显示。我必须执行另一个步骤。


7
G'day,语法是否打开?(问清楚)
Rob Wells 2009年

2
我是Vim的新手。如何打开语法?
Ethan

5
@ethan在正常模式下,:syntax on
Karl


新的Vim QA完善的问题:area51.stackexchange.com/proposals/76728/...
eckes

Answers:


52

这两个命令将创建一个~/.vim/vim-haml/目录,其中包含ftplugin,语法等目录。这些目录必须立即位于~/.vim适当的目录中,或者~/.vim/vim-haml需要添加到vim搜索插件的路径列表中。

编辑:

我最近决定调整我的vim配置,并在此过程中编写了以下rakefile文件。它仅可在Mac / Linux上运行,但与cp版本相比的优势在于它是完全安全的(符号链接不会覆盖现有文件,仅卸载即可删除符号链接)并且易于更新。

# Easily install vim plugins from a source control checkout (e.g. Github)
#
# alias vim-install=rake -f ~/.vim/rakefile-vim-install
# vim-install
# vim-install uninstall

require 'ftools'
require 'fileutils'

task :default => :install
desc "Install a vim plugin the lazy way"
task :install do
  vim_dir      = File.expand_path("~/.vim")
  plugin_dir   = Dir.pwd

  if not (FileTest.exists? File.join(plugin_dir,".git") or
          FileTest.exists? File.join(plugin_dir,".svn") or
          FileTest.exists? File.join(plugin_dir,".hg"))
      puts "#{plugin_dir} isn't a source controlled directory. Aborting."
      exit 1
  end

  Dir['**/'].each do |d|
    FileUtils.mkdir_p File.join(vim_dir, d)
  end

  Dir["**/*.{txt,snippet,snippets,vim,js,wsf}"].each do |f|
    ln File.join(plugin_dir, f), File.join(vim_dir,f)
  end

  boldred = "\033[1;31m"
  clear = "\033[0m"
  puts "\nDone. Remember to #{boldred}:helptags ~/.vim/doc#{clear}"
end

task :uninstall do
  vim_dir      = File.expand_path("~/.vim")
  plugin_dir   = Dir.pwd
  Dir["**/*.{txt,snippet,snippets,vim}"].each do |f|
    safe_rm File.join(vim_dir, f)
  end
end

def nicename(path)
    boldgreen = "\033[1;32m"
    clear = "\033[0m"
    return "#{boldgreen}#{File.join(path.split('/')[-2..-1])}#{clear}\t"
end

def ln(src, dst)
    begin
        FileUtils.ln_s src, dst
        puts "    Symlink #{nicename src}\t => #{nicename dst}"
    rescue Errno::EEXIST
        puts "  #{nicename dst} exists! Skipping."
    end
end

def cp(src, dst)
  puts "    Copying #{nicename src}\t=> #{nicename dst}"
  FileUtils.cp src, dst
end

def safe_rm(target)
    if FileTest.exists? target and FileTest.symlink? target
        puts "    #{nicename target} removed."
        File.delete target
    else
        puts "  #{nicename target} is not a symlink. Skipping"
    end
end

132

确保实际.vim文件在~/.vim/plugin/


17
感谢您的简单回答!
Drew LeSueur

是的,我想这可以解决大多数用户的问题。
Dielson Sales 2014年

还是在〜/ .vim / plugin /下的任何子目录中?
RajaRaviVarma 2014年

明确一点:当您说时~/.vim,您的意思是说vim安装在什么地方,对吗?存储的位置$VIM(即,如果您位于的话:echom $VIM
基金莫妮卡的诉讼

我系统上的@QPaysTaxes :echom $VIM显示/usr/share/vim。但是此答案使用前缀~ 来建议在用户的主目录中安装插件。
Paul Rougieux

45

为了扩展Karl的回答,Vim查找其运行时文件的一组特定目录。您可以通过看到该目录集:set runtimepath?。为了告诉Vim也要查看内部,~/.vim/vim-haml您需要添加

set runtimepath+=$HOME/.vim/vim-haml

给你~/.vimrc。您可能还希望其中的以下内容~/.vimrc启用vim-haml提供的所有功能。

filetype plugin indent on
syntax on

您可以参考Vim中的'runtimepath':filetype帮助主题以获取更多信息。


1
是“ syntax on”或“:syntax on”吗?同样使用“ filetype” /“:filtype”。
Ethan

4
以交互方式键入它们时,需要输入“:”以进入cmdline模式。在脚本中,因为脚本处于cmdline模式,所以不需要它们。因此,在脚本中省略':'是标准做法,因为这样做只会增加不必要的混乱。
jamessan

19

我认为您应该看看Pathogen插件。安装此插件后,您可以将所有插件放在〜/ .vim / bundle /中的单独文件夹中,Pathogen将负责加载它们。

或者,或者,您可能更喜欢Vundle,它提供了类似的功能(具有来自github中插件的自动更新的额外好处)。


2

更新(截至2019年):

cd ~/.vim
git clone git://github.com/tpope/vim-haml.git pack/bundle/start/haml

说明(来自:h packad :h packages):

  1. 找到的所有目录都添加到中runtimepath。它们必须以〜/ .vim / pack / whatever / 开头 [您只能更改任何内容]。
  2. plugins目录中找到的插件runtimepath均已获得。

因此,这会在启动时加载插件(因此名称为start)。

:packadd如果将它们放在〜/ .vim / pack / bundle / opt中,也可以获取可选插件(已加载)。


1
详细的解释将有很长的路要走,但这是我的首选方法,请
多加推荐
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.