函数来源.vimrc和.gvimrc

时间:2011-08-18 22:08:41

标签: vim

我通常使用GVim,但我的大部分配置都是通过.vimrc(比如keymappings)完成的,因为我想在vim gvim中使用它们。因此,当我编辑我的vimrc然后从gvim中获取它时,我必须在此之后获取我的.gvimrc以便恢复我的colorscheme(因为它只是gvim)。我尝试编写一个函数来执行此操作,并遇到以下注释中描述的问题:

function ReloadConfigs()
    :source ~/.vimrc
    if has("gui_running")
        :source ~/.gvimrc
    endif
endfunction
command! Recfg call ReloadConfigs()
" error: function already exists, add ! to replace it

function! ReloadConfigs()
    :source ~/.vimrc
    if has("gui_running")
        :source ~/.gvimrc
    endif
endfunction
command! Recfg call ReloadConfigs()
" error: cannot replace function, it is in use

有可能做这样的事吗?或者,由于我的.gvimrc只有几行,我应该将其内容放入if has("gui_running")块吗?

2 个答案:

答案 0 :(得分:14)

您已将功能放在.vimrc中的某个位置。这意味着,当它被执行时,:source .vimrc正在尝试重新定义它,这是一个问题。你可以尝试这样做:

if !exists("*ReloadConfigs")
  function ReloadConfigs()
      :source ~/.vimrc
      if has("gui_running")
          :source ~/.gvimrc
      endif
  endfunction
  command! Recfg call ReloadConfigs()
endif

如果已定义该功能,则应跳过重新定义,避免出现问题。

答案 1 :(得分:3)

我会说,无论你在.vimrc中有什么东西搞乱gvim设置都应该被if !has("gui_running")块包围。

autocmd似乎是处理您尝试做的最简单的方法:

autocmd BufWritePre .gvimrc,.vimrc source <amatch>

这样,您可以在保存配置文件时自动重新加载配置文件,而不必乱用函数。或者,您可以使用映射来触发:source $MYVIMRC:source $MYGVIMRC