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

标签 linux vim

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

相关文章:

c++ - 在 Ubuntu 上安装 C++ 库

linux - 如何在后台运行 eval spawn ssh 和 expect?

c - 如何在 Client.c 中使用文件作为参数

regex - 为什么 Vim 替换命令 `:s/\([a-zA-Z]\)\([a-zA-Z]\)/\1\2/g` 没有删除 `a b c d` 行上的所有空格

vim - 使用vimdiff替换整个文件?

git - Vim:Fugitive:Glog - 如何获取当前文件的提交而不是修订

linux - SVN中结帐和导出的区别

linux - 管道输入到挂起的进程

vim - 显示增量搜索期间的匹配数

regex - 关于删除每行尾随空格的 Vim 正则表达式