【问题标题】:Is it possible to apply vim configurations without restarting?是否可以在不重新启动的情况下应用 vim 配置?
【发布时间】:2020-07-05 02:35:22
【问题描述】:

我想从 Vim 编辑 .vimrc 文件并在不重新启动 Vim 的情况下应用它们。

【问题讨论】:

    标签: vim


    【解决方案1】:

    是的,只需在编辑 .vimrc 时使用 :so % 命令。

    如果你想让 vim 自动重新加载你的配置,你必须添加以下命令:

    augroup myvimrchooks
        au!
        autocmd bufwritepost .vimrc source $MYVIMRC
    augroup END
    

    自动命令的分组是为了避免“指数”重新加载,如果你保存了几次你的配置。

    【讨论】:

    • 请注意,这不适用于gvimrc,或者如果您的文件名为_vimrcvimrc,或者如果您在另一个目录中编辑名为.vimrc 的文件。请参阅我的回答以解决这些问题。
    • 对我来说它失败并出现Function Inc already exist, add ! to replace it之类的错误。
    • augroup 在这种情况下有什么作用?这不能简单地重写为autocmd! bufwritepost .vimrc source ~/.vimrc吗?即使出于某种原因需要该组,如果将第 3 行重写为以 autocmd! 开头,难道不能省略第 2 行吗?
    【解决方案2】:

    如果您在 Mac/Windows/Linux 和 gvimrc 上运行,这是一个更跨平台兼容的版本:

    augroup myvimrc
        au!
        au BufWritePost .vimrc,_vimrc,vimrc,.gvimrc,_gvimrc,gvimrc so $MYVIMRC | if has('gui_running') | so $MYGVIMRC | endif
    augroup END
    

    autocmd 监视所有潜在的 *vimrc 文件,当其中一个文件发生更改时,如果 GUI 正在运行,它会重新加载 vimrc 文件,然后是 gvimrc

    【讨论】:

    • GUI Vim 启动时设置。见:help gvimrc
    • 太棒了,谢谢。如果你这样做,避免我刚刚犯下的大脑放屁......我打开gvim,将它添加到我的vimrc,然后尝试确认它有效。不... 20 分钟后,我意识到在添加 AUTOCMD 后我忘记了一次获取文件。一旦我这样做了,当然,一切正常。我想这对我来说有点太元了,我有一种心理“堆栈溢出”。
    • 我用过这个,但还要检查$GVIMRC 是否存在,因为有时它不存在。 if has('gui_running') && filereadable($MYGVIMRC)
    • 起初对我来说唯一奇怪的是它只是重新加载 vimrc 文件,保留已经设置的内容。例如,如果您最初在 vimrc 中有“设置编号”,然后您注释该行并保存文档,您仍然有左侧的数字。但它实际上是有道理的......如果你想禁用某些东西,你应该手动执行。
    • 有什么理由不使用au BufWritePost $MYVIMRCau BufWritePost $MYVIMRC,$MYGVIMRC
    【解决方案3】:

    获取你的 vimrc 文件 :source ~/.vimrc

    【讨论】:

    • 在 windows 上,只是 :so ~/_vimrc
    【解决方案4】:
    " Quickly edit/reload this configuration file
    nnoremap gev :e $MYVIMRC<CR>
    nnoremap gsv :so $MYVIMRC<CR>
    

    要在保存时自动重新加载,请将以下内容添加到您的$MYVIMRC

    if has ('autocmd') " Remain compatible with earlier versions
     augroup vimrc     " Source vim configuration upon save
        autocmd! BufWritePost $MYVIMRC source % | echom "Reloaded " . $MYVIMRC | redraw
        autocmd! BufWritePost $MYGVIMRC if has('gui_running') | so % | echom "Reloaded " . $MYGVIMRC | endif | redraw
      augroup END
    endif " has autocmd
    

    然后最后一次输入:

    :so %
    

    下次保存vimrc时,它会自动重新加载。

    特点:

    • 告诉用户发生了什么(也登录到:messages
    • 处理配置文件的各种名称
    • 确保它只匹配实际的配置文件(忽略其他目录中的副本,或fugitive:// diff)
    • 如果使用vim-tiny,不会产生错误

    当然,只有在 vim 中编辑 vimrc 时才会自动重新加载。

    【讨论】:

    • 这似乎只在文件都在我正在编辑$MYVIMRCvim 的同一实例中打开时才有效。例如,如果它们在不同的终端中,那么我仍然必须手动获取$MYVIMRC。有没有办法解决这个问题?
    • 我不知道 - 这可以通过捕捉当前 vim 写出文件的时间来工作。可能可以监视文件本身的 mtime,但不确定如何在没有异步轮询的情况下做到这一点。
    【解决方案5】:

    自动命令! bufwritepost _vimrc 源码 %

    这将在您保存时自动重新加载 _vimrc 文件中的所有配置

    【讨论】:

      猜你喜欢
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2011-04-20
      相关资源
      最近更新 更多