gpt4 book ai didi

linux - 基于发行版名称的配色方案 [linux]

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:32 25 4
gpt4 key购买 nike

感谢 git,我在多个 Linux 系统(目前是 Kubuntu 和 OpenSuse)上使用相同的 vim 设置。我想在各种发行版中使用不同的配色方案。

所以我创建了一个插件 plugin/mycolor.vim,我从 /etc/os-release 中获取发行版名称,然后使用

if s:distro ==? "openSUSE" 
blabla
else
blabla2
endif

/etc/os-release 看起来像

NAME="Ubuntu"
VERSION="13.04, Raring Ringtail"
[...]

NAME=openSuse
VERSION="13.1 (Bottle)"

我找到的(在一些帮助下)获取发行版名称的最短方法是

let distro = system(". /etc/os-release; echo -n $NAME")

但是获取文件的想法有点不安,尽管看起来来源不会传播到系统调用之外。

我发现的另一种更长且可能更安全的方法是:

let s:distro = system("awk '/^NAME=/ {print $1}' /etc/os-release")
let s:distro = split(substitute(s:distro, "\n", "", ""), "=")[1]
let s:distro = substitute(s:distro,'"', "", "g")

第一行获取所有包含NAME= 的行,包括换行符。第二行去掉新行,返回=之后的部分。第三行删除 "(如果有的话)。

这是获取发行版名称或已存储在某个 vim 变量中的更好方法吗?

最佳答案

因为 Vim 是多平台的,所以它尽量避免平台特定的东西。因此,没有内置变量;一般情况下,您只能使用 has('unix') 检查 Unixoid 操作系统。

我会使用您的第一种方法来采购 /etc/os-release(调用 lsb_release -is 也可能有效);因为它只调用 shell,所以它可能比使用 AWK 进行解析更有效。您也可以在 Vimscript 中读取文件(通过 readfile())并在那里进行解析,但这只会为所使用的语法增加额外的依赖性。

因为为 system() 启动了一个新的 shell,这在 Vim 中没有副作用。此外,由于数据文件位于 /etc 下,只有具有管理权限的用户才能更改它,因此没有安全风险。

备选

如果您需要其他系统特定的 Vim 配置(例如,不同的窗口大小或字体),一个优雅的方法是将以下内容添加到您的 ~/.vimrc:

" Source system-specific .vimrc first.
if filereadable(expand('~/local/.vimrc'))
source ~/local/.vimrc
endif

在该本地配置文件中,您可以定义一个 g:distro 配置变量。这会复制实际信息并需要一些手动设置,但可以避免每次 Vim 启动时的系统调用。

关于linux - 基于发行版名称的配色方案 [linux],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20992319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com