3

我想做一个执行以下操作的函数

if (vim is running in powershell)
    call system("only works in powershell")
else
    echo "Skipping powershell command"

有谁知道如何判断 vim 正在从哪个程序运行?

编辑:echo &term在两种情况下都输出“win32”。

4

2 回答 2

6

据我所知,你不需要检查 vim 是从什么运行的。您需要检查的值,因为如果选项告诉它&shell在 powershell 中运行命令,vim 将在 powershell中运行命令。&shell如果 shell 的名称是,posh则可以使用

if stridx(&shell, 'posh')!=-1
    call system('only works in powershell')
else
    echo 'Skipping powershell command'
endif

. 但我宁愿建议直接用类似的东西运行powershell

call system('posh -c '.shellescape('only works in powershell'))

(注意:我不确定'posh -c '字符串实际上应该是什么样子)或临时设置 &shell 选项:

let savedsh=[&shell, &shellcmdflag, &shellxquote, &shellxescape, &shellquote, &shellpipe, &shellredir]
set shell=posh shellcmdflag=-c shellxquote=\" shellquote=\" shellpipe=> shellredir=>
try
    call system('only works in powershell')
finally
    let [&shell, &shellcmdflag, &shellxquote, &shellxescape, &shellquote, &shellpipe, &shellredir]=savedsh
endtry

(再次,不确定选项的确切值):这些方式命令将始终在 powershell 中运行。

于 2012-08-11T18:18:18.760 回答
3

你可以检查一下$term。例如在我的cygwinand上git bash,我得到$termas cygwin

对于 Powershell,您可以在您的个人资料中设置以下内容并检查:

$env:TERM = "posh"

请注意,&shellcmd.exe 将同时用于 cmd 和 powershell。

于 2012-08-11T15:50:37.260 回答