2014-11-05 92 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

相关问题