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

时间:2014-01-08 09:59:59

标签: 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变量中的更好方法?

2 个答案:

答案 0 :(得分:3)

由于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启动时的系统调用。

答案 1 :(得分:1)

如果您想为不同的计算机/系统设置不同的设置,我会使用Ingo。创建自己的配置部分,并在您的公共vimrc源中创建特定的配置。我以这种方式在三台计算机中管理.zshrc

如果您只想从/etc/os-release获取字符串,可以尝试:

let dis = system("awk -F= '$1==\"ID\"{printf $2}' /etc/os-release")

这里打印arch(我在archlinux上运行)。我选择了ID而不是NAME,因为NAME可能有空格。

如果您愿意,可以尝试处理文件/etc/issue,如果您的所有系统都有该文件。