Цикл vi/vim/view /etc/alternatives

Я хотел понять разницу между исполняемыми файлами vi а также vim, which привел меня к /usr/bin/и там я нашел следующие символические ссылки:

/usr/bin/vi -> /etc/alternatives/vi
/usr/bin/vim -> /etc/alternatives/vim

Собираюсь /etc/alternatives/Я видел, что эти имена ссылаются на /usr/bin/:

/etc/alternatives/vi -> /usr/bin/vim.gnome
/etc/alternatives/vim -> /usr/bin/vim.gnome

Подумав немного, почему это так, я пришел к выводу, что оба указывают на один и тот же исполняемый файл, следовательно, они абсолютно одинаковы.

Однако, что-то привлекло мое внимание в тот момент; эта ссылка:

/etc/alternatives/view -> /usr/bin/vim.gnome

сопровождается этой ссылкой:

/usr/bin/view -> /etc/alternatives/view

Теперь это странно, так как я знаю, что когда я бегу view это не то же самое, что когда я бегу vim; он открывает режим только для чтения файла, заданного в качестве аргумента. Есть ли vim.gnome бинарный знает, что связывалось с ним при выполнении, как-нибудь?

(кстати, такая же проблема с vimdiff)

У вас есть объяснение этому?

1 ответ

Решение

Это объясняется в man vim:

Vim ведет себя по-разному, в зависимости от имени команды (исполняемый файл может быть тем же файлом).

ВИМ:
"Нормальный" способ, все по умолчанию.

например:
Запуск в режиме Ex. Перейдите в обычный режим с помощью команды:: vi. Также может быть сделано с аргументом "-e".

Посмотреть:
Запустите в режиме только для чтения. Вы будете защищены от записи файлов. Можно также сделать с аргументом "-R".

gvim gview:
Версия с графическим интерфейсом. Запускает новое окно. Можно также сделать с аргументом "-g".

evim eview:
Версия с графическим интерфейсом в простом режиме. Запускает новое окно. Можно также сделать с аргументом "-y".

rvim rview rgvim rgview
Как и выше, но с ограничениями. Невозможно запустить команды оболочки или приостановить Vim. Можно также сделать с аргументом "-Z".

Другими словами, vim обнаружит имя, под которым оно было вызвано, и будет действовать соответственно. Еще один пример программы, которая ведет себя по-разному в зависимости от того, какое имя она запускалась как есть bash которая действует как минимальная оболочка POSIX, если называется sh (см. ПРИЗВАНИЕ в man bash).

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