I don't understand how to allow syntax highlighting in files I'm editing via vi when using sudo. When I sudo vi <filename>
the terminal is only black & white of my terminal settings. In vi if I enter :syntax on
nothing changes.
When I vi <filename>
all the syntax is properly colored. Using RHEL 5.4, relevant env:
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
Larks answer is probably the most likely. You may not wish to change your root accounts vi to vim permanently as if your resources are low vi is almost guaranteed to always work, I'm not so sure about vim.
You are probably using (color)
under your normal user and
under sudo or root. You can check by using:
once under your normal user and the other via sudo
Do a
if you need more details
On a RHEL system,
/bin/vi
is typically a minimal version ofvim
, without any syntax highlighting support./usr/bin/vim
is the full-featured editor. It is very likely that in your user environment,vi
is an alias forvim
. Try this:Do you get syntax highlighting now?
Your
vi
is probably/bin/vi
from packagevim-minimal
which does not support syntax highlighting.sudo vi
launches/bin/vi
for you.Bash only does alias expansion on the first word in your command line, so in:
vi
is not substituted tovim
even if you have that alias defined.The solution is define another alias (for the user invoking
sudo
):Note the space after the second
sudo
.Using this
sudo
, bash will do alias expansion forvi
insudo vi
. In thealias
section of Bash doc it says:After you enter your command, You can press Ctrl+Alt+E in
bash
to see the expansion result.Credits:
https://bbs.archlinux.org/viewtopic.php?id=36796
http://www.shellperson.net/using-sudo-with-an-alias
Simply aliasing
vi
in/root/.bashrc
will not work.It may also be noted that
vi
is not aliased for root on some distros in /etc/profile.d/vim.sh:Changing this will not solve the problem either.
By default in 5.4 vi is default. I forget what version that started in. This will add the necessary alias for you:
i found that in my version of vim (install with
sudo apt-get install vim
on debian 7) thesyntax on
command is defined on a per-user basis in~/.vimrc
. however by default the install did not create a/root/.vimrc
file forsudo vi
to load. so i just copied~/.vimrc
into the/root/
dir and this did the trick:sudo cp ~/.vimrc /root/
1) Check if you're really using vim and not vi (which unfortunately is default often on fresh installed systems)
2) Check that your
/etc/vim/vimrc
has the linesyntax on
3) Not all kinds of files have syntax-highlighting info available by default....
For those still looking for help, try these commands.
sudovi = which sudo vi
usrvi = which vi
Otherwise...
mv $sudovi $sudovi.save
ln -s $usrvi $sudovi
(symbolic link)