Vi: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Использование регулярных выражений: : они все такие же, как и в остальных регулярных выражения: не нужно
отмена правки 138342299 участника 188.243.182.128 (обс.)
Метка: отмена
 
(не показаны 43 промежуточные версии 26 участников)
Строка 1: Строка 1:
{{lowercase}}
{{lowercase}}
{{Карточка программы
'''vi''' (visual) — серия [[текстовый редактор|текстовых редакторов]] [[операционная система|операционных систем]] семейства [[UNIX]].
| name = vi
| logo =
| screenshot = NetBSD 6.1 vi C Hello World.png
| caption = vi, редактирующий программу [[Hello, world!]] на языке [[Си (язык программирования)|Си]]. Тильды обозначают строки, отсутствующие в файле.
| developer = [[Джой, Билл|Билл Джой]]
| released = {{Start date and age|df=yes|1976}}
| latest release version =
| latest release date =
| latest preview version =
| latest preview date =
| operating system = [[Unix-подобная операционная система|Unix-подобные]]
| programming language =
| genre = [[Текстовый редактор]]
| license = [[Лицензия BSD]] или [[CDDL]]
| website =
}}{{Нет сносок|дата=2019-03-22}}


'''vi''' (от {{lang-en|visual}}, по-русски читается «ви-ай») — серия [[текстовый редактор|текстовых редакторов]] [[операционная система|операционных систем]] семейства [[UNIX]].
== История ==


== История ==
Первая версия была написана [[Джой, Билл|Биллом Джоем]] в [[1976 год]]у.
Первая версия была написана [[Джой, Билл|Биллом Джоем]] в [[1976 год]]у.


В то время наиболее распространённым был редактор [[ed]]. Поскольку он был довольно сложным для «простого смертного», George Coulouris разработал редактор em (editor for mortals — редактор для смертных). Билл Джой модифицировал редактор em и назвал его en, а позднее  он получил название [[ex (Unix)|ex]], на котором и основан vi<ref>[http://www.theregister.co.uk/2003/09/11/bill_joys_greatest_gift/ Bill Joy’s greatest gift to man — the vi editor]</ref>.
В то время наиболее распространённым был редактор '''[[ed]]'''. Поскольку он был довольно сложным для «простого смертного», George Coulouris разработал редактор '''em''' ({{lang-en|editor for mortals}} — «редактор для смертных»). Билл Джой модифицировал редактор '''em''' и назвал его '''en''', а позже на его основе создал '''[[ex (Unix)|ex]]''', в котором появился визуальный режим, вызывавшийся командой '''vi'''. Так как пользователи больше времени проводили в визуальном режиме, '''ex 2.0''', ставший частью 2[[BSD]], сразу запускался уже в нём. Так появился '''vi''', бывший в то время всего лишь [[Жёсткая ссылка|жёсткой ссылкой]] на '''ex'''<ref>{{Cite web |url=https://www.theregister.co.uk/2003/09/11/bill_joys_greatest_gift/ |title=Bill Joy’s greatest gift to man — the vi editor |access-date=2017-09-29 |archive-date=2014-06-03 |archive-url=https://web.archive.org/web/20140603174753/https://www.theregister.co.uk/2003/09/11/bill_joys_greatest_gift/ |deadlink=no }}</ref>.


Редактор писался для терминала [[ADM-3A]], имевшего ограниченную клавиатуру: на ней не было выделенных [[клавиши управления курсором|клавиш-стрелок]], а из модификаторов доступны только {{клавиша|[[Shift (Клавиша)|Shift]]}} и частично {{Клавиша|[[Ctrl]]}}<ref group="прим">Точнее, Vi не опрашивает клавиатуру напрямую, а получает от терминала код ASCII для нажатой клавиши или их сочетания. Следовательно, клавиша Ctrl может использоваться не со всеми клавишами, а только с теми, при нажатии которых совместно с Ctrl вводятся [[управляющие символы|управляющие символы ASCII]].</ref>. Эти обстоятельства повлияли на выбор используемых в редакторе клавиш.
== Интерфейс ==


== Интерфейс ==
В отличие от многих привычных редакторов, vi имеет '''модальный''' интерфейс. Это означает, что одни и те же клавиши в разных режимах работы выполняют разные действия. В редакторе vi есть два основных режима: '''командный режим''' и '''режим вставки'''. По умолчанию, работа начинается в командном режиме.
В отличие от многих привычных редакторов, vi имеет '''модальный''' интерфейс. Это означает, что одни и те же клавиши в разных режимах работы выполняют разные действия. В редакторе vi есть два основных режима: '''командный режим''' и '''режим вставки'''. По умолчанию работа начинается в командном режиме.


В ''режиме вставки'' [[клавиатура]] используется для набора текста. Для выхода в командный режим используется клавиша {{key|Esc}} или комбинация {{key|Ctrl|c}}.
В ''режиме вставки'' [[клавиатура]] используется для набора текста. Для выхода в командный режим используется клавиша {{key|Esc}} или комбинация {{key|Ctrl|c}}.


В ''командном режиме'' алфавитные клавиши соответствуют командам перемещения и изменения текста. Так, команды <code>h</code>, <code>j</code>, <code>k<code>, <code>l</code> перемещают курсор на одну позицию влево, вниз, вверх, вправо соответственно, команда <code>x</code> удаляет один символ и т. д. Это позволяет работать без необходимости использования дополнительной клавиатуры и [[Сочетания клавиш|клавиш-модификаторов]], таких, как {{key|Ctrl}}, {{key|Alt}} и т. д. Более сложные операции редактирования получаются комбинацией простых, например, <code>2dw</code> удаляет два слова. Для полнотекстовых операций имеется возможность задавать команды [[ex (Unix)|ex]] в подобии командной строки, например, <code><nowiki>:1,.s/wiki/[[wiki]]/g</nowiki></code> заключит все вхождения последовательности символов ''wiki'' от начала текста до текущей позиции в двойные квадратные скобки.
В ''командном режиме'' алфавитные клавиши соответствуют командам перемещения и изменения текста. Так, команды <code>h</code>, <code>j</code>, <code>k</code>, <code>l</code> перемещают курсор на одну позицию влево, вниз, вверх, вправо соответственно, команда <code>x</code> удаляет один символ и т. д. Это позволяет работать без необходимости использования дополнительной клавиатуры и [[Сочетания клавиш|клавиш-модификаторов]], таких, как {{key|Ctrl}}, {{key|Alt}} и т. д. Более сложные операции редактирования получаются комбинацией простых, например, <code>2dw</code> удаляет два слова. Для полнотекстовых операций имеется возможность задавать команды [[ex (Unix)|ex]] в подобии командной строки, например, <code><nowiki>:1,.s/wiki/[[wiki]]/g</nowiki></code> заключит все вхождения последовательности символов ''wiki'' от начала текста до текущей позиции в двойные квадратные скобки.


=== Часто используемые команды ===
=== Часто используемые команды ===
* <code>/str</code> — Поиск строки str вперед. str может быть регулярным выражением

* <code>/str</code> — Поиск строки str вперед. str может быть регулярным выражением
* <code>?str</code> — Поиск строки str назад
* <code>?str</code> Поиск строки str назад
* <code>n</code> Повторить поиск в том же направлении
* <code>n</code> — Повторить поиск в том же направлении
* <code>N</code> — Повторить поиск в обратном направлении
* <code>:[range]s/old/new/[g]</code> — Заменить old на new в указанном диапазоне строк range. new и old могут быть регулярными выражениями, а range задается аналогично диапазону строк в редакторе ed. Например, для диапазона строк с 32 по 64 range будет <code>32,64</code>, первая строка соответствует <code>1</code>, последняя задается через символ <code>$</code>. Суффикс g означает заменить все вхождения old в строке, а не только первое.
* <code>N</code> — Повторить поиск в обратном направлении
* <code>:[range]s/old/new/[g]</code> — Заменить old на new в указанном диапазоне строк range. new и old могут быть регулярными выражениями, а range задается аналогично диапазону строк в редакторе ed. Например, для диапазона строк с 32 по 64 range будет <code>32,64</code>, первая строка соответствует <code>1</code>, последняя задается через символ <code>$</code>. Суффикс g означает заменить все вхождения old в строке, а не только первое.
* <code>:e!</code> — перезагрузить текущий файл
* <code>:e!</code> — перезагрузить текущий файл
* <code>:33</code> — перепрыгнуть на 33ю строку текстового файла
* <code>:33</code> — переместиться на 33-ю строку текстового файла
* <code>i</code> — перейти в режим редактирования
* <code>i</code> — перейти в режим редактирования
* <code>a</code> — перейти в режим редактирования после текущего символа
* <code>a</code> — перейти в режим редактирования после текущего символа
* <code>u</code> — отменить последнее действие
* <code>u</code> — отменить последнее действие
* <code>.</code> — повторить последнее действие
* <code>.</code> — повторить последнее действие
* <code>x</code> — удалить символ под курсором
* <code>x</code> — вырезать символ под курсором
* <code>yy</code> — копировать строку
* <code>yy</code> — копировать строку
* <code>dd</code> — вырезать строку
* <code>dd</code> — вырезать строку
* <code>p</code> — вставить
* <code>p</code> — вставить
* <code>J</code> — склеить две строки
* <code>J</code> — склеить две строки
* <code>:w</code> — сохранить файл на диске
* <code>:w</code> — сохранить файл на диске
* <code>:wq</code> — выход с сохранением файла (shift + ZZ)
* <code>:wq</code> — выход с сохранением файла
* <code>:q</code> — выход
* <code>ZZ</code> — выход с сохранением файла
* <code>:q!</code> — выход без сохранения файла
* <code>:q</code> — выход
* <code>:q!</code> — выход без сохранения файла
* <code>:r</code> вставить в документ другой файл
* <code>ZQ</code> выход без сохранения файла
* <code>:r</code> — вставить в документ другой файл


Чтобы получить подробную помощь по редактору vi, выполните команду <code>man vi</code> в Unix shell (q — выход из справки).
Чтобы получить подробную помощь по редактору vi, выполните команду <code>man vi</code> в Unix shell (q — выход из справки).


== Другие редакторы ==
== Другие редакторы ==
{{незавершенный раздел}}
Спор между сторонниками vi и [[emacs]] является классическим примером «религиозных войн».


== Клоны ''vi'' ==
Спор между сторонниками vi и [[emacs]] является классическим примером «[[Религиозные войны (сленг)|религиозных войн]]».
Существуют клоны редактора vi с расширенной функциональностью:

На данный момент имеются реализации vi для различных операционных систем.
Существуют клоны редактора vi с расширенной функциональностью.

=== Клоны ''vi'' ===


* [[Vim]]
* [[Vim]]
* [[Elvis (текстовый редактор)|elvis]]
* [[elvis]]
* [[:en:vile (editor)|vile]] {{ref-en}}
* [[:en:vile (editor)|vile]]{{ref-en}}
* [[:en:nvi|nvi]]{{ref-en}} — реимплементация vi под свободной [[лицензия BSD|лицензией BSD]]
* [[viper]]
* viper — плагин для [[Emacs]], эмулирующий команды vi
* [[:en:nvi|nvi]] {{ref-en}} - полная копия по функциональности, содержит только свободный код.


== См. также ==
== См. также ==
{{Портал|Свободное программное обеспечение}}
* [[Emacs]]
* [[Emacs]]
* [[Nano]]
* [[Nano]]

== Ссылки ==

* [http://www.gentoo.org/doc/en/vi-guide.xml?style=printable Знакомство с vi — метод шпаргалки] {{ref-en}} [http://www.gentoo.org/doc/ru/vi-guide.xml?style=printable#doc_chap9_sect1 перевод на русский] Даниэль Роббинс, президент/исполнительный директор, [[Gentoo Technologies|Gentoo Technologies, Inc]].
* [http://lib.ru/unixhelp/vi.txt Очень кратко о редакторе «VI»]
* [http://www.intuit.ru/studies/courses/22/22/lecture/361?page=3 Лекция: Текстовые редакторы Vi и Vim - Г.В. Курячий]


== Примечания ==
== Примечания ==
{{примечания|group=прим}}
{{примечания}}
{{примечания}}

== Ссылки ==
* [http://www.gentoo.org/doc/en/vi-guide.xml?style=printable Знакомство с vi — метод шпаргалки]{{ref-en}} [https://web.archive.org/web/20090129181240/http://www.gentoo.org/doc/ru/vi-guide.xml?style=printable#doc_chap9_sect1 перевод на русский] Даниэль Роббинс, президент/исполнительный директор, [[Gentoo Technologies|Gentoo Technologies, Inc]].
* [lib.ru/unixhelp/vi.txt Очень кратко о редакторе «VI»]
* [http://www.intuit.ru/studies/courses/22/22/lecture/361?page=3 Лекция: Текстовые редакторы Vi и Vim — Г. В. Курячий]


{{Текстовые редакторы}}
{{Текстовые редакторы}}
{{Команды Unix}}


[[Категория:Текстовые редакторы]]
[[Категория:Текстовые редакторы]]
[[Категория:Программное обеспечение для UNIX]]
[[Категория:Программное обеспечение для Unix]]
[[Категория:Vi]]

{{спам-ссылки|1=
* lib.ru/unixhelp/vi.txt
}}

Текущая версия от 21:19, 25 июня 2024

vi
Скриншот программы vi
vi, редактирующий программу Hello, world! на языке Си. Тильды обозначают строки, отсутствующие в файле.
Тип Текстовый редактор
Автор Билл Джой
Разработчик Билл Джой
Написана на Си[1]
Операционная система Unix-подобные
Первый выпуск 1976; 49 лет назад (1976)
Последняя версия
Репозиторий ex-vi.cvs.sourceforge.net/…
Лицензия Лицензия BSD или CDDL
Сайт ex-vi.sourceforge.net (англ.)
Логотип Викисклада Медиафайлы на Викискладе

vi (от англ. visual, по-русски читается «ви-ай») — серия текстовых редакторов операционных систем семейства UNIX.

Первая версия была написана Биллом Джоем в 1976 году.

В то время наиболее распространённым был редактор ed. Поскольку он был довольно сложным для «простого смертного», George Coulouris разработал редактор em (англ. editor for mortals — «редактор для смертных»). Билл Джой модифицировал редактор em и назвал его en, а позже на его основе создал ex, в котором появился визуальный режим, вызывавшийся командой vi. Так как пользователи больше времени проводили в визуальном режиме, ex 2.0, ставший частью 2BSD, сразу запускался уже в нём. Так появился vi, бывший в то время всего лишь жёсткой ссылкой на ex[3].

Редактор писался для терминала ADM-3A, имевшего ограниченную клавиатуру: на ней не было выделенных клавиш-стрелок, а из модификаторов доступны только Shift и частично Ctrl[прим 1]. Эти обстоятельства повлияли на выбор используемых в редакторе клавиш.

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

В режиме вставки клавиатура используется для набора текста. Для выхода в командный режим используется клавиша Esc или комбинация Ctrl+c.

В командном режиме алфавитные клавиши соответствуют командам перемещения и изменения текста. Так, команды h, j, k, l перемещают курсор на одну позицию влево, вниз, вверх, вправо соответственно, команда x удаляет один символ и т. д. Это позволяет работать без необходимости использования дополнительной клавиатуры и клавиш-модификаторов, таких, как Ctrl, Alt и т. д. Более сложные операции редактирования получаются комбинацией простых, например, 2dw удаляет два слова. Для полнотекстовых операций имеется возможность задавать команды ex в подобии командной строки, например, :1,.s/wiki/[[wiki]]/g заключит все вхождения последовательности символов wiki от начала текста до текущей позиции в двойные квадратные скобки.

Часто используемые команды

[править | править код]
  • /str — Поиск строки str вперед. str может быть регулярным выражением
  • ?str — Поиск строки str назад
  • n — Повторить поиск в том же направлении
  • N — Повторить поиск в обратном направлении
  • :[range]s/old/new/[g] — Заменить old на new в указанном диапазоне строк range. new и old могут быть регулярными выражениями, а range задается аналогично диапазону строк в редакторе ed. Например, для диапазона строк с 32 по 64 range будет 32,64, первая строка соответствует 1, последняя задается через символ $. Суффикс g означает заменить все вхождения old в строке, а не только первое.
  • :e! — перезагрузить текущий файл
  • :33 — переместиться на 33-ю строку текстового файла
  • i — перейти в режим редактирования
  • a — перейти в режим редактирования после текущего символа
  • u — отменить последнее действие
  • . — повторить последнее действие
  • x — вырезать символ под курсором
  • yy — копировать строку
  • dd — вырезать строку
  • p — вставить
  • J — склеить две строки
  • :w — сохранить файл на диске
  • :wq — выход с сохранением файла
  • ZZ — выход с сохранением файла
  • :q — выход
  • :q! — выход без сохранения файла
  • ZQ — выход без сохранения файла
  • :r — вставить в документ другой файл

Чтобы получить подробную помощь по редактору vi, выполните команду man vi в Unix shell (q — выход из справки).

Другие редакторы

[править | править код]

Спор между сторонниками vi и emacs является классическим примером «религиозных войн».

Существуют клоны редактора vi с расширенной функциональностью:

  • Vim
  • elvis
  • vile (англ.)
  • nvi (англ.) — реимплементация vi под свободной лицензией BSD
  • viper — плагин для Emacs, эмулирующий команды vi

Примечания

[править | править код]
  1. Точнее, Vi не опрашивает клавиатуру напрямую, а получает от терминала код ASCII для нажатой клавиши или их сочетания. Следовательно, клавиша Ctrl может использоваться не со всеми клавишами, а только с теми, при нажатии которых совместно с Ctrl вводятся управляющие символы ASCII.
  1. The vi Open Source Project on Open Hub: Languages Page — 2006.
  2. The Traditional Vi
  3. Bill Joy’s greatest gift to man — the vi editor. Дата обращения: 29 сентября 2017. Архивировано 3 июня 2014 года.