2013-05-18 76 views
2

當我從MSYS運行gvim時,初始化過程中出現錯誤。即,gvim找不到'C:\Documents and Settings\username\vimfiles中的初始化文件。從MSYS運行gvim ---如何避免/更改MSYS環境變量?

[具體而言,gvim在初始化期間報告錯誤E117: Unknown function: pathogen#infect,所以它從未找到autoload\pathogen.vim。做:scriptnames也確認沒有任何來自vimfiles\的設置文件運行。]

我想我已經調試了它爲什麼出錯。當您啓動MSYS時,MSYS外殼會繼承Windows環境變量,但會將其中一些更改爲自定義值。 C:\Documents and Settings\username是Windows中的$HOME的值,但MSYS將其設置爲C:/msys/user name之類的值。當然,Vim使用$HOME來找到正確的初始化文件。

我也注意到set shell?已經改成類似shell=C:/msys/bin/sh而不是shell=C:\WINDOWS\system32\cmd.exe,但我希望這對於解決初始化問題並不重要。

我需要使用正常的Windows環境變量運行gvim。至少我需要能夠以手動覆蓋幾個重要的像$HOME的東西我指定(即,我不關心我的窗戶$HOME變化,所以它的精細使用靜態值)。

我試圖在我的vimrc中手動重置$HOME,但是到時候爲時已晚。

是否有一些技巧在初始化期間早些時候指定$HOME或者作爲額外的命令行參數?

另外,是否有一些與msys運行命令有所不同?我對shell C:/msys/bin/sh的工作原理幾乎一無所知,但我可以想象一些額外的參數會改變您鍵入的命令的可見環境(例如gvim.exe)。

---編輯---
轉貼奏效的解決方案(它實現了後來的想法):

相反的運行gvim.exe,運行命令HOME="C:\Documents and Settings\username" gvim.exe

+0

您是否嘗試在'msys'用作配置文件時更改'$ HOME'的值?像'export $ HOME =「C:\ Documents and Settings \ username」'。 – romainl

+0

是的,如果'HOME'預先設置正確,gvim將從msys工作。 (雖然沒有'$',語法是export HOME =「C:\ Documents and Settings \ username」)。但正如我所說的,我需要一種方法,使'gvim.exe'能夠在不改變shell的全局'HOME'的情況下看到'HOME'的正確值。有沒有辦法只爲一個命令「輸出」? – Ein

+1

我對Windows命令行的瞭解*非常接近於'0',但是在'* sh'中我可以執行'$ HOME ='/ path/to/dir'vim filename'。不過,要小心這種方法,因爲'$ HOME'被設置爲與默認值不同的位置,除非將它們放在新的'$ HOME'中,否則Vim將不會看到你的'_vimrc'或'vimfiles'。另外,由於新的'$ HOME',使用'msys'提供的命令可能更難甚至不可能。我會說「複製你的文件或使用符號鏈接」。 – romainl

回答

2

bash和其他的UNIX shell,你可以這樣做:

$ HOME='/path/to/dir' gvim 

臨時設置$HOME爲不同的值。

我承認我並不熟悉Windows命令行,但可能值得一試。

0

我相信你可以定義$ HOME就像其他任何環境變量一樣。
嘗試將此添加到您的.vimrc的開頭。

let $HOME="C:\Documents and Settings\username" 
+0

我試過了,但是當vimrc是第一個要執行的文件時,要改變vim使用的其他初始化文件的'$ HOME'的值爲時已晚。 – Ein

+0

@Ein哦,好的。你可以試試'vim --cmd'let $ HOME =「C:\ Documents and Settings \ username」''? – timss

+0

這不起作用。它會設置'$ HOME',但不是在初始化之前。 (反斜槓也需要在雙引號內加倍。) – Ein

0

我在運行Cygwin(與MSYS類似)時遇到類似問題。

最簡單的解決方案是簡單地將HOME環境變量設置爲空字符串。否則,Cygwin HOME值將被附加到GVim中的Windows USERPROFILE,並且無法正確啓動。不明確設置HOME的完整路徑意味着我可以在不同的系統上使用相同的啓動文件,其中USERNAME可能不相同。

同樣,SHELL環境變量不應該從Cygwin Bash繼承。這會在運行shell或通過!運行外部程序時導致錯誤。再次,我將它設置爲一個空變量,因爲Vim足夠聰明,能夠弄清楚它應該是什麼。

在我.bashrc,我設置爲運行Windows gvim以下別名與設置爲空字符串HOMESHELL變量開始gVim的 - 只爲該命令。

gvim="/cygdrive/c/Program Files (x86)/Vim/vim74/gvim" 
if [ -x "$gvim" ]; then 
    alias gvim="HOME= SHELL= \"$gvim\"" 
fi 
unset gvim