sudo vi <filename>时为什么没有语法高亮显示?


27

我不明白如何在使用sudo时通过vi编辑的文件中允许语法突出显示。当我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

3
vi不支持颜色,因此任何显示颜色的颜色都在运行vim或类似。
克里斯·S

Answers:


26

云雀的答案可能是最有可能的。您可能不希望将root帐户vi永久更改为vim,好像您的资源不足vi几乎可以保证总是可以工作,我不太确定vim。

您可能正在使用(颜色)

/usr/bin/vim 

在您的普通用户和

/bin/vi

在sudo或root下。您可以使用以下方法进行检查:

which vi

一次在普通用户下,另一次通过sudo

sudo which vi

做一个

man which 

如果您需要更多详细信息


我没有更改root帐户以使用vim,但只是知道那表明vi被别名为vim,因为我的用户告诉我使用sudo vim <file>而不是sudo vi <file>
Scott Lundgren

17

在RHEL系统上,/bin/vi通常是的最低版本vim,没有任何语法突出显示支持。 /usr/bin/vim是功能齐全的编辑器。在您的用户环境中,很有可能vi是的别名vim。尝试这个:

sudo vim /some/file

您现在看到语法高亮了吗?


是! 而且似乎sinping的答案是我需要获得我想要的行为的答案
Scott Lundgren

11

vi可能/bin/vi来自vim-minimal不支持语法突出显示的软件包。为您sudo vi启动/bin/vi

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

sudo vi

vivim即使您定义了该别名也不会替换。

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

别名sudo ='sudo'

注意第二个空格sudo

使用此功能sudo,bash将为viin 进行别名扩展sudo vi。在aliasBash文档部分中,它说:

如果别名值的最后一个字符为空白,则还将检查别名后面的下一个命令字是否进行别名扩展。

你输入你的命令后,您可以按Ctrl+ Alt+ Ebash看到了扩张的结果。

学分:

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

更改此设置也无法解决问题。


拥有sudo别名的绝妙技巧!
Corey Henderson

喜欢这个-简单而优雅!!!这是正确的答案。
FilmJ

3

默认在5.4 vi中是默认值。我忘记了开始的版本。这将为您添加必要的别名:

cat <<_EOF >>/root/.bashrc

alias "vi"="/usr/bin/vim"
_EOF

2

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


1

这是因为您的root用户没有vim配置文件。因此,只需将您的标准用户vim配置文件复制到根目录即可。

sudo cp -r ~/.vi* /root/ 这样的东西。

nb:检查是否没有对应~/vi*于vim的文件。


0

1)检查您是否真的在使用vim而不是vi(不幸的是,在新安装的系统上,这通常是默认设置)

2)检查您/etc/vim/vimrc是否有线路syntax on

3)并非所有类型的文件默认都具有语法突出显示信息。


没有/ etc / vim / vimrc,但是/ etc / vimrc在默认情况下确实突出显示了语法:if&t_Co> 2 || has hlsearch endif上的has(“ gui_running”)语法
Scott Lundgren

-1

对于仍在寻求帮助的人,请尝试以下命令。

  • sudovi = which sudo vi
  • usrvi = which vi
  • 如果这两个位置相同,则不要继续。

除此以外...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (符号链接)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.