Я использую обоих, хотя, если бы я должен был выбрать один, я знаю, какой я выбрал бы. Однако, я попытаюсь сделать объективное сравнение по нескольким проблемам.
Доступный везде? Если Вы - профессиональный системный администратор, который работает с системами Unix или продвинутым пользователем на встроенных устройствах (маршрутизаторы, смартфоны с Busybox, …), необходимо знать vi (не Vim), потому что это доступно во всех системах Unix и большинстве подобных Unix систем, ли рабочий стол, сервер или встроенный. Для обычного пользователя этот аргумент не важен: Emacs легко доступен для каждого рабочего стола/сервера ОС, и так как он поддерживает удаленное редактирование, достаточно иметь его на Вашей настольной машине так или иначе.
Чрезмерно увеличенный в размерах? Emacs однажды поддержал шутливо “Восемь мегабайтов И Постоянно Свопинг”. Прямо сейчас, на моей машине, Google Chrome нужно почти столько RAM на вкладку, сколько Emacs делает для 100 открытых файлов, и я даже не упомяну Firefox. В 21-м веке чрезмерное увеличение размера Emacs является просто мифом.
Чрезмерное увеличение размера функции не является проблемой также. Если Вы не используете его, Вы не должны знать, что это там. Функции Emacs держатся в стороне от пути, когда Вы не используете их, и документация очень хорошо организована.
Время запуска: Vi (m) сторонники жалуется на время запуска Emacs. Да, Emacs не спешит запускать, но это не грандиозное предприятие: Вы запускаете Emacs однажды на сессию, затем соединяетесь с рабочим процессом с emacsclient
. Таким образом, медленный запуск Emacs является главным образом мифом.
Существует одно исключение, которое является, когда Вы входите в систему удаленной машины и хотите отредактировать файл там. Запуск удаленного Emacs (обычно) медленнее, чем запуск удаленного Vim. В некоторых ситуациях можно сохранить Emacs, работающий в Экране. Можно также отредактировать удаленные файлы из Emacs, но он действительно повреждает поток, если Вы находитесь на ssh сессии в терминале. (Так как XEmacs 21 или GNU Emacs 23, можно открыть окно Emacs от выполнения X экземпляров в терминале.)
Взятие реванш, я наблюдал, что Vim, берущий заметно дольше, загружается, чем Emacs (vim -u /dev/null
по сравнению с. emacs -q
). По общему признанию это было на странной платформе (Cygwin).
Начальная кривая обучения: Это варьируется от человека человеку. График Michael Mrozek заставил меня хихикать. Серьезно, я соглашаюсь, что кривая обучения Vim запускается крутой, более крутой, чем какой-либо другой редактор, хотя это может быть уменьшено при помощи gvim.
Так как я рассеял несколько мифов Emacs, позвольте мне рассеять vi миф: модальный редактор не является твердым или болезненным для использования. Требуется немного привычки, но через некоторое время это чувствует себя очень естественным. Если бы я должен был перепроектировать vi (m), то я определенно сохранил бы режимы.
Асимптотическая кривая обучения: И Vim и Emacs имеют много функций, и Вы будете продолжать обнаруживать новые после лет использования.
Производительность: Это - чрезвычайно твердая тема. Сторонники vi (m) утверждают, что можно сделать в значительной степени все, не покидая домашнюю строку, и это делает Вас более эффективными при необходимости в нем больше всего. Сторонники Emacs парируют, что Emacs имеет много команд, которые не часто используются, не гарантируйте привязку клавиш, но чертовски удобны, когда Вам нужны они (обязательная xkcd ссылка).
Мое личное мнение - то, что Emacs в конечном счете побеждает, если у Вас нет нетрудоспособности ввода (и даже затем можно настроить Emacs для требования только сочетаний клавиш и не комбинаций как Ctrl+letter). Домашние ключи строки хороши, но они часто не так большая часть победы, потому что необходимо переключить режимы. Я не думаю, что существует что-либо, что Vim может сделать значительно более эффективно, чем Emacs, тогда как обратное верно.
Настраиваемость: Оба редактора программируемы, и существует обширное тело доступных пакетов для обоих. Однако Vim является редактором с макроязыком; Emacs является редактором, записанным в Lisp с некоторыми специальными примитивами. Emacs побеждает эффектно, когда Вы пытаетесь сделать что-то, о чем просто не думали авторы. Этого не происходит каждый день, но это действительно накапливается за эти годы.
Больше, чем редактор: Vim является редактором. Emacs не является просто редактором: это - также IDE, файловый менеджер, эмулятор терминала, веб-браузер, почтовый клиент, клиент новостей... Является ли это хорошей вещью, или плохой вещью является вопрос для дебатов. Но можно использовать Emacs в качестве простого редактора (см., “что функция чрезмерно увеличивается в размерах” выше).
Как IDE: И Vim и Emacs имеют поддержку большого количества языков программирования и других текстовых форматов. Вне основ, таких как синтаксическая окраска и автоматическое добавление отступа, оба усовершенствовали функции IDE, такие как код и поиски перекрестной ссылки документации, помогли вставкам и рефакторингу, управлению интегрированной версией и способности инициировать компиляцию и переход к первой ошибке.
Один домен, где Emacs прост лучше, чем Vim, является взаимодействием с асинхронными подпроцессами. Именно тогда Вы запускаете долгую компиляцию и хотите сделать что-то еще в том же экземпляре редактора, в то время как компилятор крутится. Или когда Вы хотите взаимодействовать с циклом Read-eval-print — Emacs действительно сияет в этом, Vim только имеет неуклюжие взломы для предложения. Тем не менее, новое ветвление энергии, Неоэнергия, оказалось, зафиксировала это и реализовала другие различные исправления ошибок, не реализованные в энергии запаса.
Использовать lsof | grep /media/whatever
узнать, что использует монтирование.
Кроме того, рассмотрите umount -l
(ленивый umount), чтобы препятствовать тому, чтобы новые процессы использовали диск, в то время как Вы моетесь.
Большую часть времени лучшая команда для использования является lsof (“список открытые файлы”).
lsof +f -- /media/usb0
где /media/usb0
точка монтирования Карты памяти или другой файловой системы для размонтирования. +f --
говорит lsof рассматривать последующий аргумент как точку монтирования; это обычно, но не всегда, справляется самостоятельно, так, чтобы lsof /media/usb0
также работы. Это находит открытые файлы (даже несвязанные), файлы с отображенной памятью, текущие каталоги и некоторое более неясное использование. Необходимо будет выполнить команду как корень для получения информации о процессах других пользователей (и я думаю, что существуют нельды где lsof
должен быть выполнен как корень).
Существует использование, которое не найдет lsof; они являются редкими на съемных носителях. Они включают:
/foo
если /foo/bar
точка монтирования./foo
если /foo/bar
смонтированное блочное устройство или смонтированный циклом регулярный файл, или если это - источник Linux, связывают, монтируются.Другая команда, которая может служить в повышении, является термофиксатором, который только перечисляет PIDs процессов с открытыми файлами на устройстве:
fuser -m /media/usb0
Можно использовать lsof
как Peter, сказанный, или если Вы уверены, Вы просто хотите уничтожить все те вещи и размонтировать его, можно, вероятно, сделать что-то как:
fuser -Mk /mnt/path
umount /mnt/path
-M
для безопасности.
– Tom Hale
18.08.2017, 11:41
Если Вы будете использовать GNOME, то размонтировавшийся через Наутилус отобразит сообщение, указывающее, какой процесс все еще использует диск и файл, который это использует.
Это распространенная ошибка: вы переходите к другому пользователю (root или любому другому пользователю), переходите в каталог подключенного устройства, а затем выйдите из системы как этот пользователь. Когда вы забываете, что оставили в этом каталоге, вы можете пытаться найти, пока не ослепнете. lsof
действительно показывает оболочке, какой текущий каталог использует это устройство. Возможно, вы захотите снова выполнить su от имени этого пользователя, чтобы сменить каталог.
Для (не менее )OpenBSD:
$ fstat /mnt/mountpoint
Например, (использование doas
для выполнения fstat
от имени пользователя root, поскольку в противном случае мы видели бы только наши собственные процессы):
$ doas fstat /usr/ports
USER CMD PID FD MOUNT INUM MODE R/W SZ|DV NAME
_pbuild make 15172 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
_pbuild make 40034 wd /usr/ports 3923598 drwxrwxr-x r 1536 /usr/ports/
В этом случае я не смогу размонтировать /usr/ports
, пока пользователь _pbuild
не завершит выполнение этих двух make
процессов.
fuser -mv /path/to/mountpoint
могла бы быть более читаемая альтернатива для обнаружения процессов с помощью mointpoint. – Riccardo Murri 14.10.2010, 20:59lsof | grep
работы лучше для меня.fuser -mv
кажется, просто выводит 80 + несвязанных процессов. Я использую, монтируют связанные каталоги. – Ricky Boyce 26.08.2017, 13:27umount -l
опасно.mount -o bind
режим000
пустой каталог на вершине вместо этого, и моется черезlsof +f -- /dev/device
. – Tom Hale 03.09.2017, 12:19