2017-06-17 74 views
0

有時我使用Cygwin,有時候我使用Ubuntu。由於我的vimrc中有某些東西無法被Ubuntu識別,因此我創建了一個名爲$ENV_TYPE的shell變量,該變量在我的.profile中手動設置,以處理差異。ubuntu中的Vim無法識別我的環境變量

我有這樣的東西在我的vimrc:

if $ENV_TYPE == "cygwin" 
    <some_command_here> 
endif 

當我在Ubuntu的命令行上運行echo $ENV_TYPE,它識別變量。但是,在vim中,如果我運行相同的命令,它不會輸出任何內容(這會阻止某些自定義命令不被識別)。

注意:這在Cygwin中完全沒有問題。有想法該怎麼解決這個嗎?比使用手動設置的shell變量更好的方法也將非常感謝。

+0

你有沒有'出口ENV_TYPE':

if !exists('g:os') if has('win32') || has('win16') let g:os = 'Windows' else let g:os = substitute(system('uname'), '\n', '', '') endif endif 
你使用這樣

? – cdarke

+0

是的。它被設置在我的'.profile'中,使用以下命令export ENV_TYPE =「cygwin」(它根據我是否使用Cygwin或Ubuntu手動設置爲正確的值) –

+0

在這種情況下,你確定那'.profile'正在運行?在運行'vi'之前,嘗試運行'env | grep ENV_TYPE'。在你的'.vimrc'裏放置一個'echom'語句。順便說一下,您正在使用'.vimrc'而不僅僅是'vimrc'? – cdarke

回答

2

Cygwin已經爲您提供了很多Cygwin特定的環境變量,所以您並不需要自己定義它。使用命令之下從你的殼一一列舉:

$ env 

或這一個從Vim中一一列舉:

:!env 

,並選擇一個所獨有的Cygwin的像$OS$PROGRAMFILES

if $OS == 'Windows_NT' 
    " do cygwin stuff 
endif 

另一種選擇可能是使用uname的輸出:

if substitute(system('uname'), '\n', '', '') =~ 'CYGWIN' 
    " do cygwin stuff 
endif 

這裏是一個 「通用」 的片段:

if g:os =~ 'Windows' 
    " do Windows stuff 
endif 

if g:os =~ 'CYGWIN' 
    " do Cygwin stuff 
endif 

if g:os =~ 'MINGW' 
    " do Git Bash stuff 
endif 

if g:os =~ 'Darwin' 
    " do Mac OS X stuff 
endif 

if g:os =~ 'Linux' 
    " do Linux stuff 
endif 
+0

如何在我的'.profile'和'.bashrc'中添加/使用「通用片段」?他們也使用我的shell變量'ENV_TYPE' –

+0

你不會。這是Vim對Vim問題的回答。 – romainl