Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于发行版名称的配色方案[linux]_Linux_Vim - Fatal编程技术网

基于发行版名称的配色方案[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设置。我想在不同的发行版中使用不同的配色方案

因此,我创建了一个plugin
plugin/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更容易