2011-08-18 36 views
5

我一般使用GVim,但我的配置大部分是通過.vimrc(如keymappings)完成,因爲我想他們在vim gvim。所以,當我編輯我的vimrc並從gvim中獲取它時,我必須在此之後獲取我的.gvimrc以獲取我的colorscheme(因爲它只是gvim)。我試着寫一個函數來做到這一點,跑進在下面的意見說明的問題:函數來源.vimrc和.gvimrc

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")塊嗎?

回答

14

你已經把你的函數放在.vimrc的某個地方。這意味着,它在執行時,:source .vimrc正試圖重新定義它,這是一個問題。你可以嘗試這樣做:

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

如果函數已經定義,這應該跳過重新定義它,避免了這個問題。

3

我會說,無論你在你的.vimrc中搞亂了gvim設置,你都應該被if !has("gui_running")塊所包圍。

自動命令似乎是處理你正在試圖做的最簡單的方法:

autocmd BufWritePre .gvimrc,.vimrc source <amatch> 

在保存時不與功能,不必浪費時間這樣,你讓你的配置文件自動加載。或者,您可以使用映射來觸發:source $MYVIMRC:source $MYGVIMRC

+0

我的.vimrc中沒有任何東西可以「彌補」gvim。我只是在vim和gvim中使用不同的colorschemes。 gvim colorscheme在.gvimrc中指定。我也有字體,行/列,guioptions和showtabline設置。 看起來'autocmd'行只會提供寫入的文件。因此,如果我在gvim中編輯.vimrc並編寫它,我仍然需要獲取gvimrc。 – Daniel

+0

爲什麼你需要找到gvimrc? (注意我的第一句話。) –

+0

我記下你的第一句話。 Vim和gvim使用不同的顏色格式,就像我在原文中所說的那樣。 – Daniel