在保存时使用符号链接自动加载vimrc的Vim设置

3

我有一个符号链接,将我的.vimrc文件指向我的代码库中的文件。

Vim可以成功加载它,但我无法让其在更改后自动重新加载。

我已经按照通常的方式进行了设置:

if has("autocmd")
    autocmd! BufWritePost .vimrc source $MYVIMRC
endif

如果vimrc文件没有使用符号链接,则此方法可行。
4个回答

2

我有一个类似的设置,其中~/.vimrc只是指向git存储库的符号链接。以下自动命令适用于我:

autocmd! bufwritepost .vimrc source %

嗯,这基本上就是我的情况。也许这与我存储库中的vimrc文件被称为“ vimrc”而不是“ .vimrc”(前面有个点)有关? - Lerp
1
确实。bufwritepost 可能正在查看真实文件名。 - innaM
哦,是的::help autocmd-patterns - innaM
我通过在 BufWritePost 后更改模式为 *vimrc 来解决了这个问题,因此它可以匹配点格式和非点格式。我不太担心它是否会影响其他内容。 - C. Warren Dale

1
我不喜欢符号链接,而且Vim也不太喜欢它们。
我使用的布局可能与你的类似:
~/.vimrc
~/.vim/vimrc

有一个很大的区别:~/.vimrc 是一个真实文件,而不是符号链接,并且它只包含一行:
runtime vimrc

执行我的真实~/.vim/vimrc的命令。因为它是一个Vim命令,不使用文件路径,所以该行可以在每个系统上相同。

由于$MYVIMRC指向一个真实文件,:so $MYVIMRC总是有效的。


你不喜欢符号链接吗? Vim 也不喜欢符号链接?我无能为力,但最后一句话是荒谬的陈述。 - innaM
你是对的,Vim 喜欢符号链接,但只有当它们是绝对路径时。 - romainl

1
我是一位有用的助手,可以翻译文本。
我通过将所有配置保存在dotfiles文件夹中来解决了这个问题。然后,当我更改配置时,我会运行一个小而简单的ruby脚本。https://github.com/lis2/dotfiles
#!/usr/bin/env ruby
require "fileutils"

config_hash = { "tmux.conf" => ".tmux.conf", "vimrc" => ".vimrc", "vim" => ".vim", "gitconfig" => ".gitconfig", "gitignore" => ".gitignore"}
config_hash.each do |k,v|
  FileUtils.rm_rf(File.dirname(__FILE__) + "/../#{v}")
  FileUtils.ln_s(File.dirname(__FILE__) + "/#{k}", File.dirname(__FILE__) + "/../#{v}")
end

我建议您构建相同的配置。在所有计算机(私人/工作)上,只需克隆我的存储库,运行symlink.rb,我的简单环境就可以用于工作。
干杯!

0

我将 .vimrc 和 .gvimrc 都建立了符号链接到一个 git 仓库,就像你所描述的那样。我正在运行 MacVim macOS。

我找到了一个很好的答案来回答 progressively-slower-reloading-time-of-vimrc 这个问题。

我稍微修改了一下,使其在任何一个文件更改时都可以重新加载 vimrc 和 gvimrc。我已经使用它几个月了,没有出现任何问题。

这就是代码,你只需要将它放在 .vimrc 中即可,不需要添加任何内容到 .gvimrc 中。

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Autoreload vimrc
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
augroup configsGroup
    autocmd!
    " Make changes effective after saving .vimrc. Beware that autocommands are
    " duplicated if .vimrc gets sourced again, unless they are wrapped in an
    " augroup and the autocommands are cleared first using 'autocmd!'
    autocmd! bufwritepost *\<vimrc\> call OnSavingConfigs()
    autocmd! bufwritepost *\<gvimrc\> call OnSavingConfigs()
augroup END

" Avoid infinite loops
if !exists("*OnSavingConfigs")
    function! OnSavingConfigs()
        " Clear previous mappings, they don't go away automatically when
        " sourcing vimrc.
        mapclear
        source $MYGVIMRC
        source $MYVIMRC
        redraw
        echo "Reloaded " . $MYVIMRC . " and " . $MYGVIMRC . "."
    endfunction
endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接