通过 debian 软件包在系统范围内提供 vim 语法高亮

Provide vim syntax highlighting system wide by debian package

我在 /etc 下使用自己的配置文件编写了一个自定义软件。该软件内置于 Debian 软件包中,并由自定义存储库提供。

为了在 vim 中提供一个很好的语法突出显示,我编写了所有必要的文件来很好地突出显示我自己的配置文件。如果我将它们放在 ~/.vim/syntax 下并向 ~/.vim/filetype.vim 添加一行,一切正常。

现在我的问题是:如何将我的 vim 扩展包打包到我的 Debian 包中,以便在安装过程中 vim 语法高亮显示在系统范围内安装,而不仅仅是安装用户(root) )?

there is a document called Packaging of Vim Addons.


imo 如果一个包将文件安装到它所依赖的另一个包公开的文件夹中是可以的。实际上它很常用,例如可以用插件扩展的软件包,如 vim.

在 Ubuntu 上,vim 期望插件包将其语法文件安装到 /usr/share/vim/addons/syntax/

已使用以下命令找出这一点:

dpkg -S vim | awk '/addons\/syntax/&&!/vim-runtime/'

注意:如果您没有安装插件包,上述命令可能不会显示任何内容。

在我的系统上输出是:

systemtap-common: /usr/share/vim/addons/syntax/stp.vim
python-jinja2: /usr/share/vim/addons/syntax/jinja.vim
apparmor-utils, systemtap-common, python-jinja2: /usr/share/vim/addons/syntax
apparmor-utils: /usr/share/vim/addons/syntax/apparmor.vim

大多数 Unice 上的另一种可能性是在 /etc/skel 下安装您的文件。这是找到默认用户文件的地方。这种方法的一个缺点是只有新用户才能获得这些默认值。对于现有用户,您必须为每个现有用户轻轻地复制它们(即仅当目标不存在时才复制)。

所以你会把你的文件放在:

/etc/skel/.vim/plugin/my-config.vim
/etc/skel/.vim/syntax/my-config.vim

警告: filetype.vim 文件需要改为插件。这是因为只能有一个 filetype.vim 文件,如果您想支持其他插件,则必须编辑它。这不太可行。

复制到现有用户需要 debian/<package>.postinst 脚本:

#!/bin/sh -e
#
# Finish up the installation

#DEBHELPER#

# Source debconf library.
. /usr/share/debconf/confmodule

if [ "" = "configure" ]
then
    # Install files in user folders
    #
    for u in /root /home/*
    do
        name="`basename ${u}`"

        mkdir -p "${u}/.vim/syntax"
        cfg="${u}/.vim/syntax/my-config.vim"
        if ! test -f "${cfg}"
        then
            cp "/etc/skel/.vim/syntax/my-config.vim" "${cfg}"
            chmod 700 "${cfg}"
            chown "${name}" "${cfg}"
        fi

        mkdir -p "${u}/.vim/plugin"
        plg="${u}/.vim/syntax/my-config.vim"
        if ! test -f "${plg}"
        then
            cp "/etc/skel/.vim/plugin/my-config.vim" "${plg}"
            chmod 700 "${plg}"
            chown "${name}" "${plg}"
        fi
    done
fi

此方法的一个优点是用户随后可以根据自己的喜好编辑文件。