为什么我使用 sudo vi 时没有语法高亮?

为什么我使用 sudo vi 时没有语法高亮?

我不明白如何允许通过以下方式编辑文件中的语法突出显示使用 sudo 时。当我使用 sudo 时,sudo vi <filename>终端仅显示我的终端设置的黑白两色。如果我在 vi 中输入,则:syntax on没有任何变化。

当我vi <filename>所有语法都正确着色时。使用 RHEL 5.4,相关环境:

LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;
33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;
32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;
32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;
31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;
31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;
35:*.png=01;35:*.tif=01;35:

SHELL=/bin/bash

TERM=xterm-color

答案1

Larks 的回答可能是最有可能的。您可能不希望永久将 root 帐户 vi 更改为 vim,因为如果您的资源不足,vi 几乎可以保证始终有效,但我对 vim 不太确定。

您可能正在使用(颜色)

/usr/bin/vim 

在您的普通用户下

/bin/vi

使用 sudo 或 root 权限。您可以使用以下命令进行检查:

which vi

一次使用普通用户,另一次通过 sudo

sudo which vi

做一个

man which 

如果你需要更多详细信息

答案2

在 RHEL 系统上,/bin/vi通常是 的最小版本vim,不包含任何语法高亮支持。 /usr/bin/vim是功能齐全的编辑器。在您的用户环境中, 很可能是vi的别名vim。尝试以下操作:

sudo vim /some/file

你现在可以获得语法高亮了吗?

答案3

您的软件包vi可能不支持语法高亮。为您启动。/bin/vivim-minimalsudo vi/bin/vi

Bash 仅对命令行中的第一个单词进行别名扩展,因此:

sudo vi

vivim即使您已定义该别名,也无法将其替换为。

解决方案定义另一个别名(供用户调用sudo):

别名 sudo='sudo '

注意第二个后面的空格sudo

使用这个sudo,bash 将对viin进行别名扩展sudo vi。在aliasBash 文档的部分中,它说:

如果别名值的最后一个字符是空格,那么还会检查别名后面的下一个命令字是否进行别名扩展。

输入命令后,您可以按++Ctrl来查看扩展结果。AltEbash

致谢:

https://bbs.archlinux.org/viewtopic.php?id=36796

http://www.shellperson.net/using-sudo-with-an-alias


简单的混叠vi/root/.bashrc行不通的。

还可能注意到,vi在某些发行版中,/etc/profile.d/vim.sh 中没有 root 的别名:

if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
  [ -x /usr/bin/id ] || return
  ID=`/usr/bin/id -u`
  [ -n "$ID" -a "$ID" -le 200 ] && return
  # for bash and zsh, only if no alias is already set
  alias vi >/dev/null 2>&1 || alias vi=vim
fi

改变这一点也不能解决问题。

答案4

我发现在我的 vim 版本(sudo apt-get install vim在 debian 7 上安装)中,该syntax on命令是根据每个用户定义的~/.vimrc。但是默认情况下,安装不会创建要加载的/root/.vimrc文件。所以我只是复制到目录中,然后这个就成功了:sudo vi~/.vimrc/root/sudo cp ~/.vimrc /root/

相关内容