Чому я не маю виділення синтаксису, коли я sudo vi <ім'я файлу>?


27

Я не розумію, як дозволити виділення синтаксису у файлах, які я редагую через vi при використанні sudo. Коли я sudo vi <filename>термінал, у моїх налаштуваннях терміналу є тільки чорно-білий колір. In 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чи подібне.
Chris S

Відповіді:


26

Відповідь жайворонків, мабуть, найбільш вірогідна. Ви можете не бажати постійно змінювати свої кореневі акаунти на vim, так як якщо у вас низькі ресурси vi майже гарантовано завжди працює, я не так впевнений у vim.

Ви, ймовірно, використовуєте (колір)

/usr/bin/vim 

під вашого звичайного користувача та

/bin/vi

під судо або корінь. Ви можете перевірити, скориставшись:

which vi

один раз під звичайного користувача, а іншого через sudo

sudo which vi

Зробіть a

man which 

якщо вам потрібно більше деталей


Я не змінив кореневий обліковий запис на використання vim, але просто знаючи те, що показало, що vi схильний до vim, оскільки мій користувач каже мені використовувати sudo vim <file> замість sudo vi <file>
Скотт Лундгрен

17

У системі RHEL, /bin/viяк правило, це мінімальна версія vim, без підтримки синтаксису. /usr/bin/vimє повнофункціональним редактором. Цілком ймовірно, що у вашому користувальницькому середовищі viє псевдонімом для vim. Спробуйте це:

sudo vim /some/file

Чи отримуєте ви зараз виділення синтаксису?


Так! і, здається, відповідь на схованку був мені таким, який мені знадобився, щоб отримати поведінку, яку я хотів,
Скотт Лундгрен

11

Ви 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корінь не псевдонім на деяких дистрибутивах у /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

Зміна цього також не вирішить проблему.


Дивовижний трюк мати псевдоніми з судо!
Корі Хендерсон

Любіть це - просто і елегантно !!! Це правильна відповідь.
ФільмJ

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команда визначається на основі кожного користувача в Windows ~/.vimrc. однак за замовчуванням установка не створила /root/.vimrcфайл для sudo viзавантаження. тож я просто скопіював ~/.vimrcу /root/dir, і це зробило трюк: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 || має ("gui_running") синтаксис у встановленому hlsearch endif
Скотт Лундгрен

-1

Для тих, хто ще шукає допомоги, спробуйте ці команди.

  • sudovi = which sudo vi
  • usrvi = which vi
  • Якщо ці дві локації однакові, не продовжуйте.

Інакше ...

  • mv $sudovi $sudovi.save
  • ln -s $usrvi $sudovi (символічне посилання)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.