我一直试图成为一名优秀的系统管理员,在对 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
下面是我所说的一个例子。(其他亮点效果不太好,但我认为一张图片就足够了)
答案1
您的屏幕截图中的差异是由于 Vim 对正在编辑的两个文件使用了不同的名称。造成这种情况的原因很可能是编辑时创建的filetype
临时文件的名称。sudoedit
当比较两个 Vim 实例之间的语法高亮差异时,首先要查找的是filetype
Vim 自动设置的变量。您可以filetype
通过执行以下命令来检查当前变量是什么:
:set filetype?
在 Vim 中。您也可以简称为ft
。Vim 应该在状态行上显示结果,例如
filetype=sh
Vim 有一个庞大的启发式脚本,可根据文件名或有时根据文件内容自动设置。例如,filetype
如果文件名为,Vim 会自动将 设置为。/etc/profile
filetype
sh
当您使用sudoedit
编辑时/etc/profile
,会创建一个临时文件,如您的清单所示ps
。由于此文件的名称与 Vim 的任何脚本规则都不匹配,因此它会尝试filetype
根据内容设置 。根据屏幕截图,我猜 Vim 已将 设置filetype
为conf
,即通用配置文件。
可能的解决方案
手动的
有几种方法可以解决这个问题。首先,你可以在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'