VIM цвета не отображаются правильно при использовании sudoedit

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

Цветовая шкала загружается правильно (проверено с помощью: color). Я подтвердил, что он не тянет цветовую схему для 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

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

vim vs sudoedit

1
задан 16 January 2014 в 00:57

2 ответа

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

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

:set filetype?

в Vim. Вы также можете обратиться к настройке как 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 при редактировании файла независимо от его имени.

0
ответ дан 16 January 2014 в 00:57

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

alias vi='vim'
0
ответ дан 16 January 2014 в 00:57

Другие вопросы по тегам:

Похожие вопросы: