2014-11-05 36 views
0

運行我發現了另一個同樣的問題解決了計算器但解決方案並沒有爲我工作:
How to tell if vim is being run in command line vs. powershell

該解決方案使用stridx(&shell, 'posh') != -1告訴VIM運行在PowerShell中。
所以,我想:echostridx(&shell, 'posh')在vim在Windows 命令提示符PowerShell的shell終端gVim的的MacVim運行。
他們都回應-1。這意味着它不起作用。

請原諒我再次提出這個問題。

我安裝一個Vim插件Colorizer,然後我發現,當我編輯在命令提示符PowerShell的它會導致錯誤。所以我想在_vimrc中添加一個if條件來避免我在運行vim時的自動命令ColorHighlight命令提示符PowerShell

我試圖用has("feature")功能dos16dos32等..但找不到一個好的。Vimscript中:如何判斷Vim是在命令提示符和PowerShell

+0

':echo&shell'在不同的控制檯中,輸出是什麼? – Kent 2014-11-05 13:00:45

+0

@mts您無法在未經批准的情況下添加評論或編輯問題,因爲您碰巧註銷並創建了一個具有相同名稱的新用戶。 – ZyX 2014-11-05 15:04:20

+2

Colorizer插件的作者在這裏。請使用問題跟蹤器更清楚地描述你的問題 – 2014-11-05 18:36:19

回答

1

&shell是告訴Vim什麼shell應該對爆炸命令(:!read !:w !),system()&*prg選項使用的設置。它與Vim運行的shell完全無關,除了,默認值取自環境。

has('feature')用於確定Vim具有哪些功能,其結果通常在編譯時進行硬編碼。從中啓動Vim的Shell不是Vim功能,因此has()即使在運行時確定了一些「功能」(例如has('interpreter')給定了Vim使用+interpreter/dynhas('gui_running')編譯),也是沒有用的。

執行此操作的唯一方法是取決於系統:運行shell,獲取其進程ID(在* nix shell中爲$$,對於Windows爲dunno)(Vim無法獲取自己的進程ID)並檢查哪個進程是在該shell中給定進程parent的父代(shell的父代的父代是Vim父代),然後檢出進程的名稱。如果您有支持口譯員的Vim,您可以直接獲得Vim進程ID; Python + psutil應該可以在Windows上運行:

python << EOF 
def myscript_get_parent_process_name(): 
    import psutil 
    return psutil.Process().parent().name() 
EOF 

if stridx(pyeval('myscript_get_parent_process_name()'), 'posh') != -1 
    " Powershell code 
endif 
+0

謝謝,但我不知道如何使用您提供的代碼。我還沒有學習python。 – mts 2014-11-05 16:20:22

+0

@mts Python只有三行,其他都是VimL;以用法爲例。在任何情況下,您都需要安裝Python和psutil python模塊,因此最好找出如何在shell中執行相同的操作。 – ZyX 2014-11-05 17:55:46

+0

謝謝,它的工作原理。花幾個小時來安裝python + psutil並修復一些錯誤,但它有效。 – mts 2014-11-07 04:45:03

相關問題