VISUAL vs. EDITOR - в чому різниця?


182

Я зазвичай встановлюю VISUALі EDITORзмінні середовища, і середовище, те саме, але в чому різниця? Чому я б встановив їх по-іншому? Чому розробляю програми, чому я повинен переглядати це VISUALраніше EDITORчи навпаки?

Відповіді:


145

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

VISUALРедактор може бути повним екранним редактором , як viабо emacs.

Наприклад, якщо ви викликаєте редактор через bash (використовуючи C-x C-e), bash спробує перший VISUALредактор, а потім, якщо VISUALне вдасться (оскільки термінал не підтримує повноекранний редактор), він спробує EDITOR.

Сьогодні ви можете залишити його не EDITORвстановленим або встановити vi -e.


9
Більшість програм розглядають $VISUALяк фрагмент оболонки, до якого вони додають (цитується оболонку) ім'я файлу, але деякі трактують його як ім'я виконавчого файлу, в якому вони можуть або не можуть шукати $PATH. Тому найкраще встановити VISUALEDITOR) повний шлях до виконуваного файлу (який може бути сценарієм обгортки, якщо ви хочете, наприклад, параметри).
Жиль

4
У сучасний час edподібні не дуже популярні, тому я вважаю, що це нормально просто ігнорувати VISUALта використовувати EDITOR.
Павло Шімерда

13
Дякую за пораду про C-x C-eбаш. Дуже зручно.
mndrix

5
@ PavelŠimerda, просто налаштування EDITORнедостатньо, наприклад, для gitUbuntu 12.04. Не VISUALвстановлюючи gitігнорує EDITORта просто використовує nano(я вважаю, компільований за замовчуванням).
maxschlepzig

5
@ PavelŠimerda Це не має сенсу, але це конвенція. EDITOR використовувався для редакторів на основі інструкцій, як ed. Коли з'явилися редактори з графічними інтерфейсами - під графічним графічним інтерфейсом я маю на увазі графічний інтерфейс CLI (vim, emacs та ін. У цьому контексті редактори графічних інтерфейсів CLI та середовище настільних ПК більш-менш однакові, тому ви можете встановити VISUAL на будь-який; однак EDITOR призначений для принципово іншого робочого процесу. Звичайно, це все історичне. У цей час ніхто не використовує ед.
Zenexer

32

Прийнята відповідь, ймовірно, є хорошим, коротким зверненням, але це буде спроба заглибитись далі, коли різниця між ВІЗУАЛЬНИМ та РЕДАКТОРОМ може все-таки мати значення (спираючись на відповідь Адама Каца ).

Специфікація POSIX все ще розрізняє редактори візуального режиму та редактори рядків. Це мало значення ще в ті часи, коли позиціонування курсору над послідовними з'єднаннями було важким (особливо через швидкість послідовного з'єднання). Стаття у Вікіпедії для vi дає корисну інформацію щодо розрізнення vi (редактор візуального режиму) та ex (редактор рядків). Якщо ви копаєтесь досить глибоко вниз по дослідженню, ви знайдете розділ "RATIONALE" в специфікації "ex" , який дає підставу для розрізнення, що все ще знаходиться в специфікації:

Визнано, що частини vi буде важко, якщо не неможливо, задовільно реалізувати на терміналі блочного режиму або терміналі без будь-якої форми адресації курсору, таким чином, це не обов'язкова вимога, щоб такі функції працювали на всіх терміналах . Однак, наміром vi повинен забезпечити повний набір можливостей на всіх терміналах, здатних їх підтримувати.

Мені це не потрібно було, оскільки я відмовився від мого модему на 300 бод, але я можу уявити, що люди, які використовують повільні послідовні лінії для підключення до вбудованих систем (та / або над дійсно вразливими з'єднаннями), все ще можуть оцінити можливість мати бажаний режим лінії редактор відрізняється від "візуального" редактора, як vi. Термінальні коди у стилі VT100 через збиткове, мляве та вузьке з'єднання можуть бути "розмитими" в обмежених програмах.

Для решти нас, здається, "правильним" відповідь, здається, "встановити їх обох як ваш бажаний редактор". Можливо, було б вибирати це відмінність для локального / графічного редактора (наприклад, Sublime або gvim) проти редактора вікон терміналу (наприклад, vi або emacs), але, ймовірно, є ціла гора застарілих причин, чому це, ймовірно, не працюватиме так, як сподівалося .


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, але це добре знати.
Адам Кац

Незважаючи на це, схоже, такі посилання існують у відповіді robla , яка навіть згадує мою відповідь.
Адам Кац

0

Оскільки, здається, не існує жодного середовища, де vi або подібне не вдасться, я взяв на себе налаштування VISUAL на те, що потребує X DISPLAY, а EDITOR на колишнє.

Здебільшого, це, здається, викликає у мене проблеми, коли якась програма не використовує VISUAL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.