我发现在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}}等一起使用..但找不到好的。
答案 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')