Я не понимаю, как разрешить подсветку синтаксиса в файлах, которые я редактирую через vi при использовании sudo. Когда я sudo vi <filename>
терминал только черно-белый из моих настроек терминала. В vi, если я войду :syntax on
ничего не меняется.
Когда я vi <filename>
весь синтаксис правильно окрашен. Используя RHEL 5.4, соответствующий 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
Ответ жаворонков, вероятно, наиболее вероятен. Возможно, вы не захотите постоянно менять свои корневые учетные записи vi на vim, так как если у вас мало ресурсов, vi почти всегда будет работать, я не уверен в vim.
Вы, вероятно, используете (цвет)
/usr/bin/vim
под вашим обычным пользователем и
/bin/vi
под sudo или root. Вы можете проверить, используя:
which vi
один раз под вашим обычным пользователем, а другой - через sudo
sudo which vi
Сделать
man which
если вам нужно больше деталей
В системе RHEL, /bin/vi
обычно минимальная версия vim
, без поддержки подсветки синтаксиса. /usr/bin/vim
это полнофункциональный редактор. Очень вероятно, что в вашей пользовательской среде vi
это псевдоним для vim
. Попробуй это:
sudo vim /some/file
У вас теперь есть подсветка синтаксиса?
Ваш vi
возможно /bin/vi
из пакета vim-minimal
который не поддерживает подсветку синтаксиса. sudo vi
запускает /bin/vi
для тебя.
Bash расширяет псевдоним только для первого слова в командной строке, поэтому в:
sudo vi
vi
не заменяется на vim
даже если у вас есть этот псевдоним.
Решение определяет другой псевдоним (для пользователя, вызывающего sudo
):
псевдоним sudo = 'sudo'
Обратите внимание на пробел после второго sudo
.
Используя это sudo
, bash расширит псевдоним для vi
в sudo vi
. в alias
В разделе Bash doc говорится:
Если последний символ значения псевдонима - пробел, то следующее командное слово, следующее за псевдонимом, также проверяется на раскрытие псевдонима.
После ввода команды вы можете нажать Ctrl+Alt+E в bash
чтобы увидеть результат расширения.
Кредиты:
https://bbs.archlinux.org/viewtopic.php?id=36796
http://www.shellperson.net/using-sudo-with-an-alias
Просто псевдоним vi
в /root/.bashrc
не будет работать.
Также можно отметить, что vi
не имеет псевдонима для root в некоторых дистрибутивах в /etc/profile.d/vim.sh:
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
Изменение этого значения тоже не решит проблемы.
По умолчанию в 5.4 используется vi. Я забыл, в какой версии она была запущена. Это добавит вам необходимый псевдоним:
cat <<_EOF >>/root/.bashrc
alias "vi"="/usr/bin/vim"
_EOF
я обнаружил, что в моей версии vim (установить с sudo apt-get install vim
на debian 7) syntax on
команда определяется для каждого пользователя в ~/.vimrc
. однако по умолчанию установка не создавала /root/.vimrc
файл для sudo vi
загружать. так что я просто скопировал ~/.vimrc
в /root/
dir, и это помогло: sudo cp ~/.vimrc /root/
1) Проверьте, действительно ли вы используете vim, а не vi (что, к сожалению, часто используется по умолчанию в недавно установленных системах)
2) Убедитесь, что ваш /etc/vim/vimrc
есть линия syntax on
3) Не для всех типов файлов информация о выделении синтаксиса доступна по умолчанию ....
Для тех, кто все еще ищет помощь, попробуйте эти команды.
sudovi = which sudo vi
usrvi = which vi
В противном случае...
mv $sudovi $sudovi.save
ln -s $usrvi $sudovi
(символическая ссылка)