我想将我的 Vim 和 Emacs 配置保留在版本控制之下,但我不希望我的整个主文件夹在那里(或者更确切地说,我希望,但应该有 3 个单独的存储库)。使用 Emacs 很容易;如果~/.emacs
不存在,则~/.emacs.d/init.el
用作初始化文件。所以我可以在~/.emacs.d/
. 使用Vim,它似乎.vimrc
只能存在于主文件夹中而不是(相当于)中。这是进行版本控制的最佳方式吗?~/vimfiles
~/.emacs.d
.vimrc
5 回答
只需将一个虚拟的 .vimrc 放入 ~ 中,只需一行:
source ~/path/to/real/vimrc
奇迹般有效
也许将您的.vimrc
to~/.vim/
和符号链接到 home 就可以了?
其他更模块化的方法是将您的启动脚本移动到~/.vim/plugins/
,也许在那里创建一个子目录,以及单个或多个初始化脚本:Vim 将:runtime! plugin/**/*.vim
在启动时执行。
正如@Progo 在他们的回答中所建议的那样,~/.vimrc
可以将设置移动到文件中的“插件”脚本中,例如~/.vim/plugin/00rc.vim
.
走这条路时要记住几件事:
用户和插件都希望~/.vimrc
在插件之前已加载设置,如:help startup
. ~/.vim
通常在 'runtimepath' 中是第一个,但如果用户在 中还有其他插件~/.vim/plugin
,则.vimrc
替换必须按字典顺序排列,以确保首先加载它,也许~/.vim/plugin/00rc.vim
.
当 vim 启动过程从第 3 步“执行 Ex 命令”(.vimrc
本应读取的位置;再次参见:help startup
)移动到第 4 步“加载插件脚本”时,它会运行:runtime! plugin/**/*.vim
. 该命令通过“runtimepath”查找与源匹配的文件,然后开始获取它们。这意味着如果某些东西~/.vim/plugin/00rc.vim
修改了“运行时路径”,那么影响运行哪些插件就太晚了。这最常发生在病原体中,在这种情况下,可以通过在末尾添加以下行来解决它~/.vim/plugin/00rc.vim
:
" Since this "vimrc" is really run as a plugin, vim has already compiled the
" list of paths/plugins that it wil execute at startup.
" As a result, the pathogen plugins must be run manually.
runtime! bundle/*/plugin/**/*.vim
runtime! bundle/*/after/plugin/**/*.vim
最后,(再次如 中所述:help startup
),如果~/.vimrc
文件不存在,vim 将搜索其他文件,~/.exrc
因此如果它们的内容不想要,则可能需要删除它们。
在流程中添加了一个步骤,但我的 vim 设置中只有一个 bash 脚本deploy.sh。
#!/bin/bash
if [ -f ~/.vimrc ] && [ ! -L ~/.vimrc ]
then
echo "Backing up existing ~/.vimrc to ~/.vimrc.bak"
mv ~/.vimrc ~/.vimrc.bak
fi
if [ -L ~/.vimrc ]
then
echo "Already have ~/.vimrc symlink, we're good"
else
echo "Creating symlink ~/.vimrc, which points to ~/.vim/vimrc"
ln -s ~/.vim/vimrc ~/.vimrc
fi
git submodule init
git submodule update
您可以在版本控制中保留一个备份,并在需要时将其部署(即移动)到您的主目录。您可以编写一个简单的脚本来管理所有这些处理,因此至少透明地来回移动它看起来不会是很多烦人的工作。