我不明白在使用 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:
Run Code Online (Sandbox Code Playgroud)
SHELL=/bin/bash
Run Code Online (Sandbox Code Playgroud)
TERM=xterm-color
Run Code Online (Sandbox Code Playgroud)
use*_*673 31
Larks 的回答可能是最有可能的。您可能不希望将您的 root 帐户 vi 永久更改为 vim,因为您的资源很少 vi 几乎可以保证始终有效,我对 vim 不太确定。
您可能正在使用(颜色)
/usr/bin/vim
Run Code Online (Sandbox Code Playgroud)
在您的普通用户和
/bin/vi
Run Code Online (Sandbox Code Playgroud)
在 sudo 或 root 下。您可以使用以下方法进行检查:
which vi
Run Code Online (Sandbox Code Playgroud)
一次在您的普通用户下,另一个通过 sudo
sudo which vi
Run Code Online (Sandbox Code Playgroud)
做一个
man which
Run Code Online (Sandbox Code Playgroud)
如果您需要更多详细信息
lar*_*sks 18
在 RHEL 系统上,/bin/vi
通常是 的最小版本vim
,没有任何语法高亮支持。 /usr/bin/vim
是功能齐全的编辑器。在您的用户环境中,很可能vi
是vim
. 尝试这个:
sudo vim /some/file
Run Code Online (Sandbox Code Playgroud)
你现在有语法高亮吗?
Fis*_*tor 14
您vi
可能/bin/vi
来自vim-minimal
不支持语法突出显示的包。为您sudo vi
启动/bin/vi
。
Bash 只对命令行中的第一个单词进行别名扩展,因此在:
sudo vi
Run Code Online (Sandbox Code Playgroud)
vi
vim
即使您定义了该别名,也不会被替换。
解决方案是定义另一个别名(为用户调用sudo
):
别名 sudo='sudo '
注意第二个后面的空格sudo
。
使用这个sudo
,bash 将为vi
in做别名扩展sudo vi
。在alias
Bash 文档的部分中,它说:
如果别名值的最后一个字符是空白,则还检查别名之后的下一个命令字的别名扩展。
输入命令后,您可以按Ctrl+ Alt+ Einbash
查看扩展结果。
学分:
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
Run Code Online (Sandbox Code Playgroud)
改变这个也不能解决问题。
归档时间: |
|
查看次数: |
28165 次 |
最近记录: |