使用 sudoedit 时,vim 配色方案显示不正确

使用 sudoedit 时,vim 配色方案显示不正确

我一直试图成为一名优秀的系统管理员,在对 root 拥有的文件(例如 /etc/profile)进行更改时使用 sudoedit,而不是 sudo vim 或 sudo -i;vim,但是使用 sudoedit 时我的 vim 配色方案似乎无法正确显示。

colorsceme 加载正确(通过 :color 检查)。我已确认它没有提取 root 的配色方案,因为从 root 执行 sudoedit 时也会出现问题,颜色不同,即使它显示的是相同的方案。

使用:

  • 12.04 LTS
  • vim:2:7.3.429-2ubuntu2.1
  • sudo:1.8.3p1-1ubuntu3.4

编辑:

VIM 正在运行:

ubuntu@ip-10-0-0-104:~$ ps -f -u ubuntu
UID        PID  PPID  C STIME TTY          TIME CMD
ubuntu    4433  4345  0 19:18 ?        00:00:00 sshd: ubuntu@notty
ubuntu    6109  6021  0 20:47 ?        00:00:00 sshd: ubuntu@pts/0
ubuntu    6110  6109  0 20:47 pts/0    00:00:00 -bash
ubuntu    6233  6232  0 20:48 pts/0    00:00:00 /usr/bin/vim /var/tmp/profile.XXQiLoee
ubuntu    6322  6234  0 20:49 ?        00:00:00 sshd: ubuntu@pts/1
ubuntu    6323  6322  0 20:49 pts/1    00:00:00 -bash
ubuntu    6461  6323  0 20:50 pts/1    00:00:00 ps -f -u ubuntu

下面是我所说的一个例子。(其他亮点效果不太好,但我认为一张图片就足够了)

vim 与 sudoedit 对比

答案1

您的屏幕截图中的差异是由于 Vim 对正在编辑的两个文件使用了不同的名称。造成这种情况的原因很可能是编辑时创建的filetype临时文件的名称。sudoedit

当比较两个 Vim 实例之间的语法高亮差异时,首先要查找的是filetypeVim 自动设置的变量。您可以filetype通过执行以下命令来检查当前变量是什么:

:set filetype?

在 Vim 中。您也可以简称为ft。Vim 应该在状态行上显示结果,例如

  filetype=sh

Vim 有一个庞大的启发式脚本,可根据文件名或有时根据文件内容自动设置。例如,filetype如果文件名为,Vim 会自动将 设置为。/etc/profilefiletypesh

当您使用sudoedit编辑时/etc/profile,会创建一个临时文件,如您的清单所示ps。由于此文件的名称与 Vim 的任何脚本规则都不匹配,因此它会尝试filetype根据内容设置 。根据屏幕截图,我猜 Vim 已将 设置filetypeconf,即通用配置文件。

可能的解决方案

手动的

有几种方法可以解决这个问题。首先,你可以在filetype每次编辑文件时手动设置。要强制sh使用语法,请执行

:set filetype=sh

应立即重新加载并应用语法高亮规则。

语法提示

另一种方法是,在您经常编辑的文件内容中添加提示,提示Vimfiletype应设置特定内容。例如,如果文件的第一行是#!/bin/sh,则无论文件的名称是什么,Vim 都会使用适当的语法。请注意,这看起来/etc/profile像一个可执行的 shell 脚本,尽管它不是,所以您可能想或不想在您的系统上执行此类操作。

Vim 模式行

第三种方法是强制 Vimfiletype使用所谓的“modelines”来设置变量。请参阅:help modeline了解更多信息。这涉及向文件添加注释,其中包含 Vim 可以解析命令的字符串。回到您的示例/etc/profile,添加如下注释

# vim: set filetype=sh

filetype将指示 Vim在编辑文件时正确设置,无论文件名称如何。

答案2

如果您总是在不同的用户 ID 之间看到不同的颜色行为,请始终先输入“哪个 vi”,然后查看您首先要处理的是什么。然后接下来查看您的 .vimrc,假设它是 vim。如果不是,请确保您的 .bashrc 中有这个

alias vi='vim'

相关内容