同步 Vim 和 Terminal 的背景色

之前在 终端中的 Vim 显示方形的光标 中设置了 termguicolors 后,再选个 colorscheme,终端边缘 padding 部分颜色刺眼地不匹配。
边框显示了终端的背景色,和Vim主题背景色不匹配
就像这张图,边框显示了终端的背景色,和 Vim 主题背景色不匹配。

很早之前在使用 iTerm2 时就处理过一次,现在在 Windows Terminal 上又来了。以前用的都是 Vim default 主题,它似乎没有调整过背景色,这次选择了自带背景色的主题就触发了。

我知道的有至少两个原因

  1. 终端尺寸没有按块贴合,snap to block grid。有的终端模拟器允许像浏览器窗口一样,随意调整窗口尺寸。窗口尺寸非整数,变成 80.5 row x 119.8 col,那小数点部分只能展示为空白。
    好在 Windows Terminal 里有个 交互 > 将窗口大小调整为字符网格对齐 默认开启。
  2. 设置了背景不透明度,同时开启了窗口边框间距。不透明度更重要,间距因为有个滚动条,一定会存在。这是我本次的原因,为了好看的亚克力背景,不透明度调整到 75%。关闭不透明度就好了。

同步终端应用和系统的亮色暗色模式

另一个就是主题色,也就是 set background 要和终端匹配,这个目前都没有很好的办法。因为系统主题 应用主题 终端配色 == 应用配色这套等式,每个环境都可以自由选择。

我的做法是在 Powershell 启动时检测环境,注入到 Session 环境变量和用户级环境变量,应用程序读取这个变量做判断

Microsoft.PowerShell_profile.ps1
# 检测当前 Windows 系统是否处于浅色模式
$themeRegistryPath = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"
$env:AppUseLightTheme = ( Get-ItemProperty -Path $themeRegistryPath -ErrorAction SilentlyContinue ).AppsUseLightTheme ?? 0
[Environment]::SetEnvironmentVariable('AppUseLightTheme', $env:AppUseLightTheme, 'User')
.vimrc
set termguicolors
colorscheme catppuccin
if $AppUseLightTheme == '1'
    set background=light
endif

PVE 安装 Arch Linux Cloud Image

使用 Arch Linux | Proxmox VE Helper Scripts 是用 archlinux-x86_64.iso 安装的,直接把 ISO 内容复制到磁盘。不是我想要的效果,还是 Cloud 镜像 / LXC 容器更适合我。

想要在 VM 中安装 Cloud Image 就参照 Arch Linux on a VPS - ArchWiki,去国内镜像源 https://mirrors.cernet.edu.cn/archlinux/images/latest/Arch-Linux-x86_64-cloudimg.qcow2 下载最新的 qcow2 磁盘,然后在 PVE 上执行 qm disk import 110 Arch-Linux-x86_64-cloudimg.qcow2 local-lvm 加载到 ID=110 的虚拟机磁盘,启动 VM。

关键是从 PVE 控制台无法进入 VM,不知道确切的账号密码。
原来在 Cloud-init - ArchWiki 这里记录了,默认禁用 root 账户,新建一个 arch 用户,且只允许 SSH 访问,无密码。DHCP 的 IP 地址可以从虚拟机概览页查看,使用 arch 用户连入。

注意如果之前用 Helper Scripts 安装的 VM,再手动导入的 qcow2 磁盘,需要删除 cloudinit 磁盘再添加一遍,点击 CloudInit 页面上的重生成镜像才能生效。