Вопрос vim colorschemes не отображаются правильно при использовании sudoedit


Я пытаюсь быть хорошим маленьким системным администратором и использовать sudoedit вместо sudo vim или sudo -i; vim при внесении изменений в файлы, находящиеся в корне (ex / etc / profile), но мой vim colorscheme не кажется для отображения справа при использовании sudoedit.

Цветовая схема загружается правильно (проверяется через: цвет). Я подтвердил, что он не подтягивает цветовую схему для root, поскольку проблема возникает при выполнении sudoedit от root, а цвета разные, даже если она показывает ту же схему.

С помощью:

  • 12.04 LTS
  • vim: 2: 7.3.429-2ubuntu2.1
  • sudo: 1.8.3p1-1ubuntu3.4

Редактирование:

VIM запускается:

ubuntu@ip-10-0-0-104:~$ ps -f -u ubuntu
UID        PID  PPID  C STIME TTY          TIME CMD
ubuntu    4433  4345  0 19:18 ?        00:00:00 sshd: ubuntu@notty
ubuntu    6109  6021  0 20:47 ?        00:00:00 sshd: ubuntu@pts/0
ubuntu    6110  6109  0 20:47 pts/0    00:00:00 -bash
ubuntu    6233  6232  0 20:48 pts/0    00:00:00 /usr/bin/vim /var/tmp/profile.XXQiLoee
ubuntu    6322  6234  0 20:49 ?        00:00:00 sshd: ubuntu@pts/1
ubuntu    6323  6322  0 20:49 pts/1    00:00:00 -bash
ubuntu    6461  6323  0 20:50 pts/1    00:00:00 ps -f -u ubuntu

Вот пример того, о чем я говорю. (другие hilghlights тоже не работают, но я решил, что одного снимка будет достаточно)

vim vs sudoedit


1
2018-01-15 16:45


происхождения


Это работает, когда вы просто вызываете vim (sudo -i с последующим vim)? Вам нужно сначала настроить vim как root. Цветовые схемы для vim должны быть в / root - Panther
Да, это то, что я имел в виду, я проверил запуск sudoedit от root. Я установил цветовую схему для root, и когда я запускаю vim как root, цвета выглядят правильными. Когда я запускаю sudoedit как root, загружается цветовая схема, но цвета неправильны. - VTC
Работает ли он, когда вы звоните sudo vim ? - Panther
Да. Цвета для каждой схемы правильны, если не использовать sudoedit или sudo -e. - VTC
Здесь есть несколько решений: serverfault.com/questions/203988/... , Я предполагаю, что sudoedit и sudi -e являются callinv vi, а не vim. - Panther


ответы:


Разница в ваших скриншотах объясняется тем, что Vim использует другую filetype для двух редактируемых файлов. Причиной этого является, скорее всего, имя временного файла, который sudoedit создает при редактировании.

Сравнивая различия подсветки синтаксиса между двумя экземплярами Vim, первое, на что нужно обратить внимание, - это filetype переменная, которую Vim автоматически устанавливает. Вы можете проверить, что filetype исполняется

:set filetype?

в Вим. Вы также можете обратиться к ft для краткости. Vim должен показать результат в строке состояния, например

  filetype=sh

Vim имеет большой сценарий эвристики для настройки filetype автоматически на основе имени файла или иногда на содержимом файла. Если имя файла /etc/profile, например, Vim устанавливает filetype в sh автоматически.

Когда вы используете sudoedit редактировать /etc/profile, создается временный файл, как показано в ps листинга. Поскольку имя этого файла не соответствует ни одному из правил сценария Vim, оно пытается установить filetype основанный на содержании. Основываясь на скриншоте, я бы предположил, что Vim установил filetype в conf, что означает общий файл конфигурации.

Возможные решения

Руководство

Есть несколько способов справиться с этим. Во-первых, вы можете установить filetype вручную каждый раз, когда вы редактируете файл. Чтобы заставить sh синтаксис, который будет использоваться, выполнить

:set filetype=sh

Правила подсветки синтаксиса должны быть перезагружены и применены немедленно.

Подсказки синтаксиса

Другой способ - добавить подсказку к Vim в содержании файлов, которые вы часто редактируете, filetype должен быть установлен. Например, если первая строка файла #!/bin/sh, Vim будет использовать соответствующий синтаксис, независимо от имени файла. Обратите внимание, что это делает /etc/profile выглядят как исполняемый сценарий оболочки, даже если это не так, поэтому вы можете или не хотите делать что-то подобное в вашей системе.

Vim Modelines

Третий способ - заставить Vim установить filetype переменную, используя то, что Vim называет «modelines». Видеть :help modeline Чтобы получить больше информации. Это связано с добавлением комментария к вашему файлу, который содержит строку, которую Vim может анализировать для команд. Вернемся к вашему примеру с /etc/profile, добавив комментарий, подобный

# vim: set filetype=sh

проинструктирует Vim установить filetype правильно, когда файл редактируется независимо от его имени.


2
2018-05-14 18:08





Если вы когда-либо встречаете разные цветовые поведения между разными идентификаторами пользователей, всегда сначала введите «vi» и посмотрите, с чем вы столкнулись в первую очередь. И затем посмотрите на свой .vimrc, предположив, что это vim. Если нет, убедитесь, что у вас это в вашем .bashrc

alias vi='vim'

0
2018-02-11 06:16