2011-04-22 72 views
19

我有一個插件,它設置一個全局變量並在插件每次加載時檢查它,以避免多次加載本身。我想允許重新加載插件(允許重新加載插件)而不更改插件本身。該插件只是檢查它是否存在變量(即exists('g:var_name')) - 是否有辦法取消設置所述變量,以便exists()檢查返回false?如何在Vim中取消設置變量?

p.s.我不想更改插件本身,因爲我使用指向插件回購的pathogen with git submodules

回答

1

您應該可以登錄:unlet g:var_name了。

這樣做的問題是,如果插件中定義的函數沒有用function!定義,那麼當插件第二次獲取時,您將會收到很多錯誤。該插件也可能正在執行初始設置,可能會因爲運行兩次而被弄髒。

一般來說,如果插件作者添加了一個加載的陷阱,可能是出於某種原因。

+0

是的,我正在踩着這個危險的水域。具體來說,我使用[Mark](http://www.vim.org/scripts/script.php?script_id=1238)插件,每當我使用[sessionman.vim]加載會話時(http:/ /www.vim.org/scripts/script.php?script_id=2010)。 – 2011-04-22 13:40:47

+1

由於他的測試是如何構造的,你可以'let g:force_reload_mark = 1'來取代'unlet g:loaded_mark'。看起來插件是用重新編寫的,因爲任何顏色更改都會殺死他的插件。他在腳本頁面的自述文件中聲明瞭這一點。 – 2011-04-22 13:47:55

+0

這裏有兩個補充:1.如果你定義匿名函數('函數dict.fname'),那麼不要使用'function!',你應該只清空'dict'(就像'let dict = {}')。 2.如果您定義了正常功能,那麼爲了避免資源插件出現錯誤,您可以使用'delfunction'命令。 'LoadCommand reload ...'從vimpluginloader和'從frawor調用frawor#Reload(...)'使用這兩個動作(需要您使用這些框架來重新加載您的插件)。 – ZyX 2011-04-22 20:46:21