感谢 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/