【问题标题】:Vim auto-source vimrc on save with symlink使用符号链接保存时 Vim 自动源 vimrc
【发布时间】:2013-05-07 01:31:21
【问题描述】:

我有一个符号链接,它将我的 .vimrc 指向我的仓库中的那个。

Vim 可以正常加载,但我无法在它被更改后自动获取源代码。

我有典型的:

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

如果 vimrc 没有符号链接,这会起作用。

【问题讨论】:

    标签: vim


    【解决方案1】:

    我将 .vimrc 和 .gvimrc 符号链接到您所描述的 git repo。我正在运行 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
    

    【讨论】:

      【解决方案2】:

      我解决了这个问题,我的所有配置都保存在 dotfiles 文件夹中 https://github.com/lis2/dotfiles

      然后我有一个小而简单的 ruby​​ 脚本,当我更改配置时运行它

      #!/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
      

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

      干杯!

      【讨论】:

        【解决方案3】:

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

        autocmd! bufwritepost .vimrc source %
        

        【讨论】:

        • 嗯,这基本上就是我的。也许这可能与我的 repo 中的 vimrc 文件被称为 vimrc 而不是 .vimrc (前导 .)有关?
        • 确实如此。 bufwritepost 可能正在查看真实文件的名称。
        • 哦,是的::help autocmd-patterns
        • 我通过将 BufWritePost 之后的模式更改为 *vimrc 来解决这个问题,因此它匹配了带点和不带点的格式。我不太担心它会抓住别人。
        【解决方案4】:

        我一般不喜欢符号链接,Vim 也不喜欢它们。

        我使用的布局可能与您的相似:

        ~/.vimrc
        ~/.vim/vimrc
        

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

        runtime vimrc
        

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

        因为$MYVIMRC 指向一个真实文件,所以:so $MYVIMRC 始终有效。

        【讨论】:

        • 你不喜欢符号链接?而且vim也不喜欢符号链接?我忍不住,但最后一个是荒谬的说法。
        • 你说得对,Vim 喜欢符号链接,但前提是它们是绝对的。
        猜你喜欢
        • 2012-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        • 2013-12-04
        • 1970-01-01
        • 2012-09-09
        • 1970-01-01
        相关资源
        最近更新 更多