基于发行版名称的配色方案[linux]
多亏了基于发行版名称的配色方案[linux],linux,vim,Linux,Vim,多亏了git,我在多个Linux系统(目前是Kubuntu和OpenSuse)上使用了相同的vim设置。我想在不同的发行版中使用不同的配色方案 因此,我创建了一个pluginplugin/mycolor.vim,从/etc/os-release获取发行版名称,然后使用 if s:distro ==? "openSUSE" blabla else blabla2 endif /etc/os发行版 NAME="Ubuntu" VERSION="13.04, Raring Ringta
git
,我在多个Linux系统(目前是Kubuntu和OpenSuse)上使用了相同的vim设置。我想在不同的发行版中使用不同的配色方案
因此,我创建了一个pluginplugin/mycolor.vim
,从/etc/os-release
获取发行版名称,然后使用
if s:distro ==? "openSUSE"
blabla
else
blabla2
endif
/etc/os发行版
NAME="Ubuntu"
VERSION="13.04, Raring Ringtail"
[...]
或
获取我找到的发行版名称的最短方法(通过一些帮助)是
但是,对文件进行寻源的想法让人有点不安,尽管寻源似乎不会在系统调用之外传播
我发现的另一种更长更安全的方法是:
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
config变量。这会复制实际信息并需要一些手动设置,但会避免每次启动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
config变量。这将复制实际信息并需要一些手动设置,但可以避免每次Vim启动时的系统调用。如果您想为不同的计算机/系统设置不同的设置,我支持Ingo。创建自己的配置部分,并在您的common vimrc source特定配置。我以这种方式在三台计算机之间管理我的.zshrc
如果您只想从/etc/os release
获取字符串,可以尝试:
let dis = system("awk -F= '$1==\"ID\"{printf $2}' /etc/os-release")
这里它打印了arch
(我在archlinux上运行)。我选择了ID
而不是NAME
,因为NAME
可能有空格
如果您愿意,您可以尝试处理文件/etc/issue
,如果您的所有系统都有该文件。如果您想为不同的计算机/系统设置不同的设置,我支持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
,如果您的所有系统都有该文件。很好的建议!我非常喜欢替代方案,尽管我会在默认情况下将搜索文件放在~/.local/.vimrc
(在linux上)。独立于平台(如果我没有错的话)有巨大的优势.ps:你知道lsb_发行版是linux标准还是只在某些发行版中实现吗?仅供参考,在我的archlinux上,lsb_发行版没有安装。@FrancescoMontesanoGreat建议!我喜欢很多替代方案,尽管我会在默认情况下将搜索文件放在~/.local/.vimrc
中(在linux上).独立于平台有巨大的优势(如果我没有错的话).ps:你知道lsb_发行版
是linux标准还是只在某些发行版中实现吗?仅供参考,在我的archlinux上,lsb_发行版
没有安装。@Francescomontesanoth openSUSE和Kubuntu有/etc/issue
但它是一个带空格的长字符串。是的,你说得对:ID
让名称@FrancescoMontesano如果存在/etc/issue,我的意思是,您可以读取该文件的内容,并通过awk/cut获取第一列。这比解析/etc/os rel更容易