我不明白如何允许通过以下方式编辑文件中的语法突出显示六使用 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/vi
vim-minimal
sudo vi
/bin/vi
Bash 仅对命令行中的第一个单词进行别名扩展,因此:
sudo vi
vi
vim
即使您已定义该别名,也无法将其替换为。
解决方案定义另一个别名(供用户调用sudo
):
别名 sudo='sudo '
注意第二个后面的空格sudo
。
使用这个sudo
,bash 将对vi
in进行别名扩展sudo vi
。在alias
Bash 文档的部分中,它说:
如果别名值的最后一个字符是空格,那么还会检查别名后面的下一个命令字是否进行别名扩展。
输入命令后,您可以按++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/