我正在使用Vim和pathogen作为插件管理器,我已经将很多插件克隆到我的.vim文件夹中。现在我希望我的自定义vim可以在多个系统上轻松访问,所以我在我的.vim目录中创建了一个git repo。我用'git add'添加了所有内容。并将其推送到bitbucket存储库。现在每当我想将这个repo克隆到另一台计算机时,它只会创建插件所在的文件夹,而不是文件。我猜它们是自动添加为子模块的,但我似乎无法通过简单的命令(例如'git submodule update')将它们从各自的源中拉出来,它只是说“在.gitmodules中找不到子模块映射用于路径'bundle / plugin' 。 我需要做些什么来防止这种情况? 提前谢谢。
答案 0 :(得分:2)
你的.vim
是你自己的,所以你可以告诉它你的提交地点。由于您已经拥有克隆,因此最简单的方法就是直接进行配置。默认值保存在.gitmodules
文件中,
git config -f .gitmodules submodule.fugitive.path fugitive
git config -f .gitmodules submodule.fugitive.url https://github.com/tpope/vim-fugitive.git
等等。熟悉shell功能,方便小型生产:
make-github-submodule () {
git config -f .gitmodules submodule.$1.path $1
git config -f .gitmodules submodule.$1.url https://github.com/$2.git
}
make-github-submodule fugitive tpope/vim-fugitive
make-github-submodule vundle VundleVim/Vundle.vim
等等,看起来很方便。
答案 1 :(得分:1)
是的,您可以使用子模块将.vim
的内容存储为Git存储库,但我可以建议采用其他方法。
使用一个简单的脚本来管理所有这一切可能会更容易,该脚本将您的插件克隆到pathogen
期望的正确位置。
我也介于多台计算机之间,这种方法对我很有帮助。
这是我使用的(Perl脚本):
#!/usr/bin/perl -w
use strict;
my $dotVimDir;
my $home=$ENV{HOME};
my @repos=qw(
https://github.com/tpope/vim-fugitive|tpope-fugitive
https://github.com/tpope/vim-flagship|tpope-flagship
# etc...
);
sub runCommand($) {
my ($command)=@_;
open CMD,"$command |";
my @output=<CMD>;
close CMD;
return @output;
}
MAIN: {
my $platform=$^O;
if($platform eq 'linux') {
$dotVimDir="$home/.vim";
} elsif($platform eq 'MSWin32') {
$dotVimDir="$home/vimfiles";
} else {
print "unknown platform\n";
exit 1;
}
runCommand("cp -R ./vimplugins/autoload $dotVimDir");
runCommand("cp -R ./vimplugins/ftplugin $dotVimDir");
my ($repo,$folderName);
foreach(@repos) {
($repo,$folderName)=split("\Q|",$_,2);
my $fullPath="$dotVimDir/bundle/$folderName";
if (-d "$fullPath") {
runCommand("git -C $fullPath stash -u");
runCommand("git -C $fullPath pull origin master");
} else {
runCommand("git clone $repo $fullPath");
}
}
exit;
}
您可以将此脚本保存在单独的仓库中(可能称为myconfig
)。我还在此仓库中保留了其他备用文件(例如各种autoload
或ftplugin
s),此脚本也会复制这些文件。
Here is a ruby script也可以实现这一目标。