vimscript:如何判断vim是否在命令提示符和powershell中运行

时间:2014-11-05 12:33:18

标签: shell powershell vim

我发现在stackoverflow中解决了另一个相同的问题,但该解决方案对我不起作用:
How to tell if vim is being run in command line vs. powershell

解决方案使用stridx(&shell, 'posh') != -1告诉vim在powershell中运行 所以我在Windows 命令提示符 PowerShell Shell终端中运行了:echo vim stridx(&shell, 'posh') -1 > GVim MacVim 所有这些都与ColorHighlight相呼应。这意味着它不起作用。

所以请原谅我再问这个问题。

我安装了一个vim插件Colorizer,然后当我在命令提示符 PowerShell 中进行编辑时,我发现它会导致错误。因此,当我在命令提示符 PowerShell 中运行vim时,我想在_vimrc中添加if条件以避免自动命令has("feature")。登记/> 我尝试将dos16与功能dos32 {{1}}等一起使用..但找不到好的。

1 个答案:

答案 0 :(得分:1)

&shell是一个设置,告诉Vim它应该用于bang命令(:!read !:w !),system(),{{ 1}}选项。它与运行Vim的外壳完全无关,除了外,它的默认值来自环境。

&*prg用于确定Vim具有哪些功能,其结果通常在编译时进行硬编码。启动Vim的Shell不是Vim特性,所以has('feature')没有用,即使有一些在运行时确定的“特性”(例如has()给定Vim编译为{{1} }或has('interpreter'))。

执行此操作的唯一方法是依赖于系统:运行shell,获取其进程ID(* nix shell中的+interpreter/dyn,关于Windows的dunno)(Vim无法获取自己的进程ID)并检查哪个进程是该shell中给定进程父进程的父进程(shell的父进程的父进程是Vim parent),然后检查进程的名称。如果你有Vim和口译员支持,你可以直接获得Vim进程ID; Python + psutil甚至可以在Windows上运行:

has('gui_running')