检查在 Linux 的 Windows 子系统中是否在 Vim 中使用 Windows 控制台?

Roy*_*son 4 vim windows-subsystem-for-linux

我在 Linux 的 Windows 子系统中使用 Vim。Windows 命令提示符有一个错误,导致背景颜色渲染不正确

解决方法是set t_ut=. 我认为只有在 Windows 控制台内使用 Vim 时才应用它才有意义,而不是在所有情况下都应用此修复。

不幸的是,我不确定如何检测 Windows 控制台是否正在使用,因为我位于 Linux 的 Windows 子系统中。

bk2*_*204 8

通常,人们通过检测终端类型来解决此类问题,但似乎 Microsoft Terminal 会报告xterm-256color它确实不支持这一点。

可以使用如下函数来检测是否正在运行 WSL:

function! IsWSL()
  if has("unix")
    let lines = readfile("/proc/version")
    if lines[0] =~ "Microsoft"
      return 1
    endif
  endif
  return 0
endfunction
Run Code Online (Sandbox Code Playgroud)

这与 Microsoft 建议检测 WSL 的方式一致。


Roy*_*son 7

我使用以下代码来实现 Roadowl 的评论。

let uname = substitute(system('uname'),'\n','','')
if uname == 'Linux'
    if system('$PATH')=~ '/mnt/c/WINDOWS'
        " We are in Windows Subsystem
    endif
endif
Run Code Online (Sandbox Code Playgroud)

更新:我结合了 roadowl 和 bk2204 的答案:

let uname = substitute(system('uname'),'\n','','')
if uname == 'Linux'
    let lines = readfile("/proc/version")
    if lines[0] =~ "Microsoft"
        return 1
    endif
endif
Run Code Online (Sandbox Code Playgroud)