VISUAL vs. EDITOR - какая разница?

182

Я обычно устанавливаю обе переменные VISUALи EDITORпеременные среды на одно и то же, но в чем разница? Почему бы я установить их по-другому? При разработке приложений, почему я должен смотреть на VISUALраньше EDITORили наоборот?

xenoterracide
источник

Ответы:

145

EDITORРедактор должен быть в состоянии работать без использования «продвинутой» терминал функциональности (например , старого edили exрежим vi). Он использовался на телетайпных терминалах.

VISUALРедактор может быть полным экранным редактором , как viили emacs.

Например, если вы вызываете редактор через bash (используя C-x C-e), bash попытается сначала VISUALредактировать, а затем, если VISUALне получится (так как терминал не поддерживает полноэкранный редактор), он попытается EDITOR.

В настоящее время вы можете оставить EDITORнеустановленным или установить его vi -e.

andcoz
источник
10
Большинство приложений обрабатывают $VISUALкак фрагмент оболочки, к которому они добавляют имя файла (в кавычках), но некоторые рассматривают его как имя исполняемого файла, в котором они могут искать или не искать $PATH. Поэтому лучше установить VISUALEDITOR) полный путь к исполняемому файлу (который может быть сценарием-оберткой, если вы хотите, например, параметры).
Жиль
4
В наше время edи тому подобное не очень популярны, поэтому я считаю, что это нормально, просто игнорировать VISUALи использовать EDITOR.
Павел Шимерда
13
Спасибо за отзыв о C-x C-eBash. Очень удобно.
mndrix
5
@ PavelŠimerda, просто настройки EDITORнедостаточно, например, для gitUbuntu 12.04. Без VISUALустановки gitигнорирует EDITORи просто использует nano(думаю, скомпилированный по умолчанию).
maxschlepzig
5
@ PavelŠimerda Это не имеет смысла, но это соглашение. РЕДАКТОР имел обыкновение быть для основанных на инструкции редакторов как ed. Когда появились редакторы с графическим интерфейсом - и под GUI я имею в виду GUI CLI (vim, emacs и т. Д. - думаю, ncurses), а не GUI среды рабочего стола - процесс редактирования резко изменился, поэтому возникла необходимость в другой переменной. В этом контексте GUI-редакторы CLI и графического интерфейса рабочего стола более или менее одинаковы, поэтому вы можете установить VISUAL либо; однако РЕДАКТОР предназначен для принципиально другого рабочего процесса. Конечно, это все историческое. Никто не использует Эд в эти дни.
Zenexer
32

Принятый ответ, вероятно, является хорошим, коротким обращением, но это будет попыткой углубиться, когда различие между VISUAL и EDITOR все еще может иметь значение (основываясь на ответе Адама Каца ).

Спецификация POSIX по-прежнему различает редакторы в визуальном режиме и линейные редакторы. Это действительно имело значение в те времена, когда было трудно позиционировать курсор на последовательных соединениях (особенно из-за скорости последовательного соединения). Статья Википедии для VI дает некоторый полезный фон на различии между VI (визуальный редактор режим) и бывший (строка редактора). Если вы углубитесь в исследование, вы найдете раздел «RATIONALE» спецификации «ex» , который дает причину для различия, которое все еще присутствует в спецификации:

Признано, что части vi было бы трудно, если не невозможно, удовлетворительно реализовать на терминале блочного режима или терминале без какой-либо формы адресации курсора, таким образом, не является обязательным требованием, чтобы такие функции работали на всех терминалах. , Однако предполагается, что реализация vi должна обеспечивать полный набор возможностей на всех терминалах, способных их поддерживать.

Я не нуждался в этом с тех пор, как отказался от своего модема на 300 бод, но я могу себе представить, что люди, которые используют медленные последовательные линии для подключения к встроенным системам (и / или по очень рискованным соединениям), все еще могут оценить возможность использования предпочтительного режима линии редактор отличается от "визуального" редактора, такого как vi. Коды терминалов в стиле VT100 в узких, с потерями, узких соединениях могут быть «раздутыми» в ограниченных приложениях.

Для остальных из нас кажется, что «правильный» ответ «установить их обоих в качестве предпочтительного редактора». Возможно, было бы неплохо использовать это различие для локального / графического редактора (например, Sublime или gvim) против редактора окон терминала (например, vi или emacs), но, скорее всего, существует масса унаследованных причин, почему это, вероятно, не будет работать так, как хотелось бы ,

Robla
источник
2

Некоторые инструменты принимают только EDITOR, например встроенная оболочка fc :

-e ENAME  select which editor to use.  Default is FCEDIT, then EDITOR, then vi
Стивен Пенни
источник
1

Я пришел к выводу, что $VISUALэто графический и $EDITORкомандная строка. Если определено, что - то искание $VISUAL должно затем попытаться $EDITORдальше.

( Требуется цитата: я хотел бы получить надлежащую документацию, возможно, справочную страницу или спецификацию POSIX?)

На данный момент у меня есть такие вещи в моем ~/.bashrcи ~/.zshrc:

EDITOR="$(command -v vim)"

# we have gvim, not in an SSH term, and the X11 display number is under 10
if command -v gvim >/dev/null 2>&1 \
&& [ "$SSH_TTY$DISPLAY" = "${DISPLAY#*:[1-9][0-9]}" ]; then
  export VISUAL="$(command -v gvim) -f"
  SUDO_EDITOR="$VISUAL"
else
  SUDO_EDITOR="$EDITOR"
fi

gvimбез -fне будет работать с программами, которые ожидают от вас изменений. Это определенно включает в себя sudoeditor( sudo -e).

Это может сломаться, если у вас есть пробелы на пути к vim. Если это проблема, либо установите ее правильно, либо рассмотрите символические ссылки, такие как/usr/local/bin/gvim

Адам Кац
источник
Возможность использования $VISUALзависит от того, есть ли у вас терминал, способный позиционировать курсор, а не от того, доступна ли у вас оконная система.
Радон Росборо
Ах, отлично! Можете ли вы предоставить точную ссылку для этого? Я думаю, что мой код все еще в безопасности, так как я тоже проверяю $DISPLAY, но это полезно знать.
Адам Кац
Не берите в голову, кажется, что такая ссылка существует в ответе Роблы , который даже упоминает мой ответ.
Адам Кац
0

Поскольку, похоже, не существует какой-либо среды, в которой vi или аналогичный код потерпел бы неудачу, я настроил VISUAL на то, что требует X DISPLAY, а EDITOR - ex.

В основном, это просто вызывает у меня проблемы, когда какая-то программа не использует VISUAL.

Майк Уильям Мейер
источник