Vi против vim, или, есть ли причина, по которой я бы хотел использовать vi?


84

Я немного знаком с текстовыми редакторами * NIX (в настоящее время мигрирующими из nanoв vim) и, немного посмотрев на Unix & Linux SE, заметил, что viв значительном количестве вопросов вместо «vim» используется. Я знаю, что «vim» означает «Vi IMproved», и, учитывая это, я удивляюсь, почему кто-то предпочел бы использовать vi вместо vim. Есть ли у vi существенное преимущество перед vim?

Изменить: я думаю, что мой вопрос неправильно истолкован. Я знаю, что vim, по большей части, значительно мощнее и функциональнее, чем vi. Я хочу знать, есть ли возможные случаи, когда vi имеет преимущество перед vim, например, меньшее использование памяти, распространенность в * nix системах и т. Д.


25
Хорошая вещь в том, viчто вы можете ожидать, что это будет на каждой POSIX-совместимой системе.
Иордания

1
На самом деле, стандартная установка Ubuntu включает в себя, viа не vim... Ubuntu - один из самых удобных дистрибутивов между прочим ;-)
amyassin

10
@amyassin Это неверно, Ubuntu, как и большинство дистрибутивов Linux, включает vim. viэто просто символическая ссылка, которая в конечном итоге указывает vimна установку по умолчанию.
Jlliagre

2
Мой совет: используйте Vim, но учитесь, viиспользуя спецификации POSIX дляvi . Таким образом, у вас есть портативные знания, а также знание расширений Vim.
Wildcard

1
@DDK Вы пропустили «в конце концов» в моем заявлении. "ls -l / etc / alternatives / vi" -> "lrwxrwxrwx 1 корневой корень 17 января. 1 2016 / etc / alternatives / vi -> /usr/bin/vim.tiny"
jlliagre

Ответы:


61

viявляется (также) стандартным редактором POSIX . Существует множество реализаций, и vim, вероятно, они наиболее популярны, по крайней мере, в Linux.

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

Конечно, эти расширения обычно предназначены для облегчения процесса редактирования и предоставляют полезные функции и возможности. Однако, как только вы привыкнете к некоторым из них (не косметическим, таким как окраска синтаксиса, а тем, которые изменяют поведение редактора), вы легко можете забыть, что они специфичны; и использование другой реализации, в том числе основанной на исходном коде BSD, может быть очень неприятным. Обратное тоже верно.

Это очень похоже на проблему, которая возникает со сценариями, использующими не POSIX-башизмы, с которыми сталкиваются более ортодоксальные реализации оболочки, такие как dashили ksh.


29

Ни один vi не имеет существенного преимущества перед vim, а наоборот. Vim имеет больше преимуществ, чем Vi. Вы можете быть заинтересованы в: Почему, о, ПОЧЕМУ, эти #? @! чокнутые используют ви?

Отредактируйте также читать: стоит ли изучать VIM?


4
Ага. Я не использую IDE, потому что редакторы, которые они заставляют вас использовать, - это не Vim.
Кит

1
@Keith Я использую Xcode и Eclipse, и я все еще могу редактировать только с помощью vi.
ot--

@Keith SlickEdit имеет отличную эмуляцию Vim, и IDEA приближается к ней. Также в Visual Studio есть ViEmu.
демонкорю

1
IntellIJ также имеет хороший плагин vim, переопределяющий поведение стандартного редактора.
JulienD

24

Потратив большую часть своей жизни (не считая детства) на комфортное редактирование с Vim, я потратил около месяца, используя только vi. При этом я понял, что зависел от Vim во всех моих потребностях в модификации текста. Перед моей поездкой с vi, когда мне приходилось подставлять какой-либо текст или выполнять аналогичные операции с большой группой файлов, я просто открывал файлы в Vim и запускал :bufdoкоманду, и всякий раз, когда мне приходилось делать отступ или форматировать некоторые файлы, Я бы открыл их в Vim и использовал Vim =и gwкоманды. Я был Vim-зависимым. После того, как я понял, что vi не имеет этих команд, я был вынужден выполнить массовые преобразования текста sedи узнал много нового о других программах, таких как awkиindent, Хотя в конце концов я вернулся к использованию Vim, знания, полученные с помощью менее функционального редактора, были значительными и оказались чрезвычайно полезными. Помимо изучения инструментов вне текстового редактора, я также лучше познакомился с vi. Всякий раз, когда я работаю над новой системой или сервером, на котором нет Vim, я чувствую себя намного комфортнее, используя vi, чем до месячной экскурсии.

Кроме того, в прошлом месяце я установил Linux на дешевый планшет WM8650 и обнаружил заметную разницу в производительности между Vim и vi, поэтому я склонен использовать vi на планшете.


3
Я считаю, что это распространенная проблема в ИТ - инструменты, которые помогают нам, также могут затенять то, что нам лучше изучать.
знаю

На самом деле, обращение в месте редактирования файлов на многих файлах может не переносимо быть сделано с Awk или Sed либо . ( -iПереключатель на обоих является расширением GNU.) Но вы можете использовать их переносимо с чем-то вродеfor f in *; do printf '%s\n' '%!sed -e '\''some sed command'\' x | ex "$f"; done
Wildcard

12

Мне было бы трудно жить без VIM, но я терпеть не могу VI . Однако изучение первого, по крайней мере, даст вам представление о том, как бороться с последним, когда это все, что доступно.

Интерфейс vim по умолчанию довольно близок к vi. Если я работаю в системе с vim, первое, что я делаю, это добавляю эти вещи в ~/.vimrc:

syntax enable
set nocp
set wildmenu

Есть куча других вещей, которые я предпочитаю - сейчас и нумерацию и т. Д. - но не берите в голову. «Синтаксис включен» просто включает базовую подсветку синтаксиса (несколько громче: filetype plugin onтоже фундаментально); «nocp» отключает совместимость с vi, и именно это начинает отличать vim от ye olde vi (например, он активирует, showmodeчто делает весь опыт более человечным, так как теперь у вас есть некоторая подсказка о том, командуете ли вы или ~ INSERT ~ Режим). "wildmenu" просто дает вам горизонтальное меню завершения при выполнении некоторых действий, что также облегчает жизнь.

Средства редактирования текста в vim не имеют себе равных - кроме emacs, я никогда не видел и не слышал о подобном программном обеспечении. Их нелегко выучить, но как только вы их узнаете, они намного быстрее, чем меню мыши, и намного более динамичны, чем простые ключевые макроэкономические альтернативы в интерфейсах на основе меню мыши. Для программирования я иногда использую vim вместе с IDE, такой как Eclipse, но большую часть работы я делаю в vim.

Если вы выберете этот путь, лол, посмотрите на плагины автозаполнения и taglist. И остерегайтесь темной стороны.


Я set mouse=aтоже всегда добавляю .
ot--

Что касается вашего программного комментария, вы можете найти eclim интересным ...
ire_and_curses

@ire_and_curses: еще не пробовал. Eclipse и vim отслеживают исходные файлы и позволяют обновлять их извне, а переключение с одного рабочего стола на другое переключает с одного рабочего стола на другой. Похоже, вполне идея, хотя.
Златовласка

Хотя я не думаю, что этот ответ должен быть выбранным ответом (поскольку он предвзятый), именно тип перспективы полезен для понимания различий. Спасибо, что заняли позицию.
Geneorama

8

Преимущество заключается в том, что vi обычно предустановлен в корпоративной UNIX, такой как AIX или Solaris. Кроме того, vim не доступен на установочном носителе.


1

Я заметил , что я только выбрать Viболее , VIMкогда я скопировать и вставить текстовый документ или файл конфигурации , который я использовал catкоманду. Это потому, что когда я пытаюсь ctrl-cи затем ctrl-vв VIMоткрытый документ, это заставляет все строки иметь комментарий перед ними. Поэтому , когда я использую , Viчтобы ctrl-vили pasteв Viоткрытый документ, он вставляет именно то , что я скопировал с. Кроме этого, я использую VIMвесь день.

Наслаждайтесь!


5
Попробуйте:set paste
Патрик

3
set pastetoggle = <F2> в .vimrc ( vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste )
Дэйв

1

Как уже упоминалось в предыдущих ответах, vi поставляется практически со всеми системами UNIX.

Я просто хотел добавить пример. Arch Linux - это один из наиболее популярных и легких дистрибутивов, в котором ни Installer, ни базовый дистрибутив не поставляются с vim по умолчанию, однако оба поставляются с vi.

Это не является преимуществом для vi как такового , потому что вы можете просто установить vim вручную, и вам мало что нужно сделать при установке, требующей текстового редактора, и ничего, где vim не превосходит vi по назначению. Но понимание разницы и того, что vi более распространен и легок, чем vim, дает ему некоторые нишевые преимущества.

Кроме того, просто чтобы быть исчерпывающим, никто еще не упомянул явно, что vi является прямым предшественником vim. Vim был разработан специально для того, чтобы быть всем, чем был vi, и даже больше.

Таким образом, vim превосходит vi, потому что он был задуман .


1

Единственная причина использовать vi поверх vim - это когда у вас нет другого выбора.

Существует множество причин, по которым vim означает «улучшенный vi»!

Заимствуя из соответствующего поста, я ответил: -

  1. Несколько окон - горизонтальное, вертикальное и вкладки.
  2. Визуальная подсветка.
  3. Онлайн-справка с помощью команды: help.
  4. Запишите макросы в регистр, который вы затем сможете выполнить.
  5. Отмена (и повтор) несколько раз, а не безумная отмена старого vi.
  6. История командной строки, история поиска.
  7. Весь язык, встроенный вместе с множеством доступных функций, например, getcwd ()
  8. Значительно расширенное сопоставление с образцом.
  9. Завершение слов через ctrl-P & ctrl-N.
  10. Встроенный файловый навигатор (немного неуклюжий, но может быть полезным).
  11. Клавиша ESC фактически завершает команды, от которых вы пытались избежать, а не (безумно) запускать их, как это делает vi.
  12. Возможность запуска команд на все буферы, аргументы или окна через bufdo, argdo & windo.

Вы, возможно, могли бы привести «много, много» причин, которые вы упомянули в ответе unix.stackexchange.com/a/425597/85039 здесь. Это сделало бы этот ответ немного лучше; иначе это больше похоже на комментарий, чем на фактический ответ
Сергей Колодяжный,

Дело принято. Ответ обновлен, заимствуя из соответствующего ответа, который я сделал вчера.
Пол Т

1

Это выдержка из Вим Коанс :

Мастер Wq и мастер Unix

Старый мастер Unix пришел на мастер Wq. «Я обеспокоен, Wq. Ты учишь путь Вим. ви свят, а Вим нет; его код растягивается, его особенности заполняют память; его двоичные файлы обширны, его поведение несовместимо. Это не путь Unix. Боюсь, что вы вводите в заблуждение своих учеников. Что можно сделать?"

Мастер Wq кивнул. «Вы правы, - сказал он. «Вим сломан. Давайте исправим это. Начнем?"

Старый мастер Unix согласился и открыл оболочку. Он напечатал:

$ vi vim.c

Он начал кодировать. Master Wq некоторое время наблюдал, а затем спросил его: «Какую реализацию vi вы используете? Nvi? Vim? Элвис?»

«Я не знаю», - сказал мастер Unix. «Это не имеет значения.»

Мастер Wq кивнул. Мастер Unix на мгновение ошеломлен и закрыл свой документ неспасенным.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.