Vim

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Vim
Логотип программы Vim
Скриншот программы Vim
Vim в «консольном» режиме
Тип Текстовый редактор
Разработчики Брам Моленар и другие
Написана на C и Vim script [1]
Операционные системы Amiga, Linux, macOS, Windows, OpenVMS, OS/2, Unix
Языки интерфейса английский, испанский, итальянский, китайский, немецкий, персидский, польский, русский, французский, японский[2]
Первый выпуск 2 ноября 1991[3]
Последняя версия
Репозиторий github.com/vim/vim
Лицензия GPL-совместимая лицензия Vim, charityware
Сайт vim.org
Логотип Викисклада Медиафайлы на Викискладе

Vim (сокр. от Vi Improved, произносится «вим») — свободный текстовый редактор, созданный на основе более старого vi, разработанного Биллом Джойем. Автор Vim’а, Брам Моленар, создал его из порта редактора Stevie для Amiga[6] и в 1991 году выпустил общедоступную версию. Vim предназначен для использования как в интерфейсе командной строки, так и в качестве отдельного приложения в графическом пользовательском интерфейсе.[7]

С выпуска для Amiga кроссплатформенная разработка сделала Vim доступным для многих других систем. В 2018 году он был признан самым популярным редактором среди читателей Linux Journal[8]; в 2015 году опрос разработчиков на Stack Overflow показал, что он стал третьим по популярности текстовым редактором[9], а в 2019 году — пятой по популярности средой разработки.[10]

Существует и модификация для использования в графическом оконном интерфейсе — GVim. Многие пользовательские команды в GVim могут вызываться через соответствующие пункты меню.

Предшественник Vim’a, Stevie, был создан Тимом Томпсоном для Atari ST в 1987 году[11][12] и доработан Тони Эндрюсом[11][13] и G. R. (Fred) Уолтером.[14][15]

Взяв за основу Stevie, Брам Моленар начал работать над Vim для компьютера Amiga в 1988 году, а первый публичный релиз (Vim v1.14) состоялся в 1991 году.[16][17]

Во время первого выпуска название «Vim» было акронимом от «Vi IMitation», но в конце 1993 года оно было изменено на «Vi IMproved».[18]

История версий
Дата Версия Изменения
Июнь 1987 года N/A Тим Томпсон выпускает Stevie, ограниченный клон vi для Atari ST, публикуя исходный код на Usenet.[11][12]
Июнь 1988 года N/A Тони Эндрюс улучшает Stevie и переносит его на Unix и OS/2, выпуская версию 3.10 на Usenet.[11][13]
1988 год 1.0 Брам Моленар создает Vi IMitation, который никогда официально не выходил.
2 ноября 1991 года 1.14[19] Первая общедоступная версия для Amiga.[20]
1992 год 1.22[19] Порт для Unix, никогда не публиковался. Теперь Vim конкурирует с vi.
December 14, 1993 2.0[21] Первый выпуск под названием Vi IMproved.[18]
12 августа 1994 года 3.0[19] Поддержка разбиения окон
29 мая 1996 года 4.0[19] Графический пользовательский интерфейс
19 февраля 1998 года 5.0[19] Подсветка синтаксиса, простой язык сценариев (определяемые пользователем функции, команды и т. д.)
6 апреля 1998 года 5.1 Исправление ошибок и другие улучшения
27 апреля 1998 года 5.2 Поддержка длинных строк, встроенный файловый браузер, диалоги, всплывающие меню, select mode, файлы сессий, определяемые пользователем функции, команды, tcl-интерфейс и др.
31 августа 1998 года 5.3 Исправление ошибок и др.
25 июля 1999 года 5.4 Простое шифрование файлов, различные улучшения
19 сентября 1999 года 5.5 Исправление ошибок, различные улучшения
16 января 2000 года 5.6 Новые файлы синтаксиса, исправление ошибок и др.
24 июня 2000 года 5.7 То же
31 мая 2001 года 5.8 То же
26 сентября 2001 года 6.0[19][22] Сворачивание, плагины, многоязычность и др.
24 марта 2002 года 6.1 Исправление ошибок
1 июня 2003 года 6.2 Поддержка GTK2 и libgnome2, поддержка арабского, команда: try, мелкие особенности, исправление ошибок
7 июня 2004 года 6.3 Исправление ошибок, обновление переводов, улучшения меток
15 октября 2005 года 6.4 Исправление ошибок, обновления поддержки Perl, Python и Ruby
7 мая 2006 года 7.0[23] Проверка правописания, автодополнение, вкладки («tab-ы»), подсветка текущей строки и столбца, undo branches и другие изменения
12 мая 2007 года 7.1 Исправление ошибок, новые исполняемые файлы и файлы синтаксиса и др.
9 августа 2008 года 7.2[24] Поддержка чисел с плавающей запятой в сценариях, рефакторинг кода отрисовки экрана, исправление ошибок, новые файлы синтаксиса и др.
15 августа 2010 года 7.3 Исправление ошибок, новые исполняемые файлы и файлы синтаксиса, улучшение безопасности, «вечные» undo и redo, прекращение поддержки Mac OS 9 и GTK1, поддержка Lua и Python3 и др.
10 августа 2013 года 7.4[25] Новый, более быстрый движок для поддержки регулярных выражений
12 сентября 2016 года 8.0[26] Асинхронный ввод/вывод, лямбда-выражения, замыкания, поддержка GTK+ 3 и Microsoft DirectX и др.
18 мая 2018 года 8.1[27] Поддержка открытия терминала внутри окна Vim[28].
14 декабря 2019 года 8.2[29] Всплывающие окна, свойства текста.
28 июня 2022 года 9.0[30] Vim9 script
2 января 2024 года 9.1[31] Поддержка классов и объектов в Vim9 script, сглаженная прокрутка, виртуальный текст

Vim распространяется по GPL-совместимой лицензии, известной как Charityware (англ. charity — благотворительность). Часть средств, пожертвованных на разработку Vim, тратится на поддержку сирот Уганды посредством организации ICCF Holland.

gVim 7.3

Одна из главных особенностей Vim и основное отличие от «классических» текстовых редакторов — применение двух основных, вручную переключаемых, режимов ввода: командного (после запуска редактор находится в нём) и текстового (англ. insert mode, режим непосредственного редактирования текста, аналогичный большинству «обычных» редакторов). Существуют и другие режимы.

Vim не интуитивен (кроме «текстового» режима), так что эффективная работа с редактором требует предварительного обучения.

Как и у vi, интерфейс Vim основан не на меню или значках, а на командах, заданных в текстовом пользовательском интерфейсе. Графический режим, gVim, добавляет меню и панели инструментов для часто используемых команд, но полная функциональность по-прежнему используется через интерфейс командной строки. Vi (и, соответственно, Vim), как правило, позволяет наборщику держать пальцы на среднем («домашнем») ряду, что может быть преимуществом для слепого метода печати.[32]

В Vim есть встроенный учебник для начинающих под названием vimtutor, который обычно устанавливается вместе с Vim, но представляет собой отдельный исполняемый файл и может запускаться с помощью команды оболочки.[33] Руководство пользователя Vim, подробно описывающее функции Vim, можно прочитать прямо в Vim или найти в Интернете.[34][35]

Также Vim имеет подробную справочную систему и систему навигации и перехода между её разделами. Чтобы открыть любой её раздел, достаточно воспользоваться командой :help в командном режиме.

У Vim есть специальные элементы памяти — регистры (не путать с аппаратными средствами или регистрами процессора) — в которые можно сохранить обработанный текст при его вырезании, удалении, копировании или вставке. Есть 36 регистров общего назначения, связанных с буквами и цифрами ([a-z0-9]), и ряд специальных регистров, которые либо содержат специальные значения (текущее имя файла, последняя команда и т. д.), либо служат для специальной цели.[7]:85

Режимы работы

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

Как и vi, vim поддерживает несколько режимов редактирования. В зависимости от режима вводимые символы интерпретируются либо как последовательности команд, либо вставляются как текст. Всего есть 12 режимов редактирования, 6 из которых — основные.[36]

  • Нормальный режим (normal mode) — используется для команд редактора. Обычно это режим по умолчанию; нажатие ESC возвращает редактор в этот режим.
  • Режим вставки (insert mode) — используется для ввода текста аналогично большинству редакторов. В этом режиме открытый текст в буферах можно модифицировать текстом, введенным с клавиатуры.[37][32]
  • Визуальный режим (visual mode) — используется для выделения областей текста. Выбранную область можно перемещать, редактировать и т. д.
    • Визуальный линейный (visual linewise) — подтип визуального режима, в котором выбирается одна или несколько целых строк.
    • Визуальный поблочный (visual blockwise) — другой подтип, который выделяет прямоугольный блок текста в одной или нескольких строках.
  • Режим выбора (select mode) — аналогичный визуальному, но команды не интерпретируются, вместо этого выделенный текст напрямую заменяется вводом с клавиатуры. Аналогичен режиму выделения, используемому в редакторах на платформах Microsoft Windows.
  • Режим командной строки (command-line mode или cmdline mode) — обеспечивает однострочный ввод в нижней части окна Vim. Комманды, начинающиеся с :, и некоторые другие клавиши (например поиск по шаблону и команда фильтра) активируют этот режим. По завершении команды Vim возвращается в предыдущий режим.[37][32]
  • Ex mode mode — принимает последовательность команд.

Нормальный режим

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

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

Среди команд нормального режима есть «односимвольные» команды. Так, например, нажатие $ приведёт к перемещению курсора в конец строки; нажатие клавиши 0 (ноль) — в начало; D (в верхнем регистре) — к удалению (delete) части текущей строки от текущего положения курсора до конца; С (в верхнем регистре) — к замене (change) части текущей строки от текущего положения курсора и до конца и т. д.

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

После нажатия y (yank), d, c и других подобных «управляющих» клавиш Vim будет ожидать дальнейшего ввода команд, задающих объект, над которым будет произведено действие (копирование, удаление или замена соответственно). Так, daw удалит текущее слово под курсором (delete ambient word), а d$ — все символы начиная с текущего положения курсора и заканчивая концом строки.

Подобные очень простые команды используются не только в «ручном режиме» (когда при необходимости набираются всякий раз с клавиатуры), но и при задании сложных последовательностей действий.

Нормальный режим — это центральный режим, из которого осуществляется переход во все остальные. Из любого режима в командный режим можно перейти, дважды нажав клавишу Esc (в большинстве случаев достаточно одного нажатия).

Режим вставки

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

Режим вставки (англ. insert mode), в котором производится ввод текста.

Для перехода из командного режима в режим вставки можно нажать i (для начала вставки текста на месте курсора) или I (для начала вставки с начала строки) или a (для начала вставки текста после курсора) . Также существует ряд других клавиш и их сочетаний для перехода в режим непосредственного редактирования текста (например, через одну из команд замены текстового объекта).

В этом режиме Vim работает так же, как и большинство «обычных» текстовых редакторов. По умолчанию набранные символы не воспринимаются как команды, а вставляются в существующий текст. Однако даже в этом режиме можно задать особые действия редактора, выполняемые при нажатии определённых клавиш или их сочетаний. Как пример, можно задать, чтобы при наборе открывающейся скобки ( сразу же добавлялась парная ей закрывающая скобка и курсор устанавливался между ними.

Для вставки, удаления, изменения и автодополнения текста также могут использоваться клавиатурные сочетания (Ctrl+R и др.)

При наборе слова-аббревиатуры это слово автоматически заменяется на заранее заданный текст.

Режим командной строки

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

Этот режим вызывается нажатием : из нормального режима. За двоеточием следует сложная команда (например, поиска или замены), которая после ввода передаётся на исполнение нажатием ↵ Enter. После выполнения команды редактор возвращается в нормальный режим. К этому режиму также относятся команды поиска дальше по тексту /, поиск назад по тексту (?) и команда-фильтр ! для передачи данных внешнему фильтру.

Визуальный режим

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

Изменение блока текста в визуальном режиме

Визуальный режим отсутствовал в Vi и впервые появился в Vim. Он чем-то схож с командным. С помощью специальных управляющих команд, в сочетании со стрелками и командами навигации, можно посимвольно, построчно или в виде блока выделять фрагменты текста и затем применить к ним команды нормального режима (например, удаление выделенного текста или его замена). Редактирование в этом режиме проще, чем в нормальном, потому что чётко видно, к какому блоку текста будет применяться вызванная команда редактирования.

Расширения Vim

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

Общее число расширений, доступных на официальном сайте, составляет более 3000[39].

К популярным расширениям Vim, в частности, относятся:

  • MiniBufferExplorer;
  • taglist — для просмотра структуры программных файлов (список функций и пр.);
  • bufexplorer (начиная с версии Vim 7.4 в основном не актуален);
  • closetag — для более удобного закрывания тегов при редактировании html и xml файлов;
  • supertab — для автодополнения слов нажатием Tab ↹ (при этом отступы строк работают как обычно);
  • project — для организации файлов в проекты для более удобной навигации по ним;
  • indexer — для генерации тегов с помощью ctags для всех файлов, входящих в проект (проект может быть организован как плагином project, так и без него). Теги нужны для быстрого перемещения от вызова функции к её объявлению, для получения списка членов структуры или класса, и т. д.

Благодаря гибкости возможностей, предоставляемых посредством расширений, Vim также можно использовать в качестве персонального вики.

Обзор: избранные улучшения vi

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

В сравнении с классическим vi, Vim отличается следующими улучшениями:

  • Работа со многими файлами одновременно. Разбиение окон редактирования может производиться многократно как по горизонтали, так и по вертикали.
  • Поддержка Unicode.
  • Поддержка визуального режима, который позволяет, например, выполнять операции над блоками текста.
  • Неограниченная глубина отмены (undo) и возврата (redo) действий.
  • Режим сравнения двух файлов, перенос отдельных изменений из одного файла в другой.
  • Широкая файловая поддержка (файл со справкой и более 200 файлов с описанием синтаксиса).
  • Подсветка синтаксиса, автоматическое определение величины отступа для каждой строки в зависимости от языка программирования (изначально поддерживает более 200 языков программирования и форматов конфигурационных файлов).
  • Интеграция с операционной системой, дающая возможности, близкие к интегрированным средам разработки, такие как поиск ошибки по сообщению компилятора, автодополнение идентификаторов и др.
  • Поддержка языка сценариев; возможность написания модулей расширения — плагинов.
  • Автоматическое продолжение команд, слов, строк целиком и имён файлов.
  • Автоматический вызов внешних команд (например, автоматическая распаковка файла перед редактированием).
  • Распознавание и преобразование файлов различных форматов.
  • Удобный механизм истории команд, поисковых слов и т. д.
  • Запись и исполнение макросов.
  • Возможность сохранения настроек и сеанса.
  • Возможна интеграция с языками программирования Perl, Tcl, Python и Ruby.
  • Поддержка языков с письмом справа налево (арабских и других).
  • Сворачивание (folding) текста для лучшего обзора.
GVim
  • Возможно использование графического интерфейса в специальных версиях (GTK, Motif, …).
  • Хорошо конфигурируется и настраивается под нужды пользователя.
  • Для программистов: поддержка цикла разработки «редактирование — компиляция — исправление» программ. Автоматическое выполнение сборки/компиляции, обнаружение и распознавание ошибок, переход к строкам ошибок в тексте программы.
  • Для поклонников vi: практически стопроцентная совместимость с vi.

Терминология

[править | править код]
  • Буфер — временное хранилище текста, каждый редактируемый файл связан с единственным буфером.
  • Окно — часть экрана для просмотра/редактирования одного буфера. Каждый буфер может быть размножен на неограниченное количество окон.
  • Вкладки («табы», «tabs») — механизм группировки и переключения между группами окон.
  • Именованный регистр — именованное хранилище текста для множественных вставок.
  • Регистр по умолчанию — неименованное хранилище текста.
  • Аббревиатуры — сокращения, при наборе в виде отдельных слов (но не в составе других слов) автоматически разворачивающиеся (путём замены) в заданный текст.

Автоматизация операций

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

Способность Vim различать текстовые объекты (слова, предложения, параграфы, строки, отдельные символы и т. д.) позволяет задавать последовательность действий для автоматизации определённых операций.

Так, после команды

nmap <F7> byei<<ESC>ea></<C-R>0><ESC>

нажатие F7 преобразует (в командном режиме) любое слово под курсором (вне зависимости от его длины и символов, из которых он состоит) в xml-тег. К примеру если текущее слово под курсором — div, то оно будет преобразовано в <div></div>, если transform — то в <transform></transform> и т. д.

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

Все действия, которые осуществимы в Vim «вручную» (то есть непосредственно человеком с клавиатуры) могут быть автоматизированы (включая переключение между различными режимами).

Портируемость

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

Одно из достоинств редактора Vim — доступность для множества операционных систем. Это особенно актуально для системных администраторов, которым приходится редактировать файлы на разных платформах.

Vim работает на следующих операционных системах:

Для ОС Android, использующей сенсорный экран как основное устройство ввода, Дэвид Тао написал адаптированную версию vim — vim touch, в настоящее время распространяемую на условиях лицензии Apache[40][41][42][43]. Также существует вариант DroidVim.

С 2001 по 2004 годы Vim являлся победителем устраиваемого Linux Journal конкурса Readers' Choice Awards в категории «Любимый текстовый редактор». Он также получал награды Linuxworld Editors' Choice Award в 1999-м и Slashdot Beanie Award в 2000-м.

Примечания

[править | править код]
  1. Vim | freshmeat.net. Дата обращения: 21 мая 2009. Архивировано 6 июня 2009 года.
  2. Vim in non-English languages. Дата обращения: 4 февраля 2008. Архивировано 23 августа 2011 года.
  3. http://arstechnica.com/information-technology/2011/11/two-decades-of-productivity-vims-20th-anniversary/
  4. Vim 9.1 is available — 2024.
  5. Release v9.1.0 — 2024.
  6. Zapletal, Lukáš (2005-04-18), "Interview: Bram Moolenaar", LinuxEXPRES: 21—22, Архивировано 22 июня 2018, Дата обращения: 5 февраля 2015, Is VIM derivate of other VI clone or you started from scratch? I started with Stevie. This was a Vi clone for the Atari ST computer, ported to the Amiga. It had quite a lot of problems and could not do everything that Vi could, but since the source code was available I could fix that myself. (English translation) {{citation}}: Внешняя ссылка в |quote= (справка)
  7. 1 2 McDonnell, Mark. Pro vim. — [Berkeley], 2014. — ISBN 978-1-4842-0250-0.
  8. Best Editor | Linux Journal. www.linuxjournal.com. Дата обращения: 20 апреля 2023. Архивировано 20 апреля 2023 года.
  9. Stack Overflow Developer Survey 2015 § IV. Text Editor. Stack Overflow. Дата обращения: 25 июля 2016. Архивировано 4 мая 2019 года.
  10. Stack Overflow Developer Survey 2019 Results. Stack Overflow § VII. Development Environments. Дата обращения: 20 июля 2019. Архивировано 7 марта 2020 года.
  11. 1 2 3 4 Thompson, Tim Stevie (26 марта 2000). Дата обращения: 27 декабря 2010. Архивировано 4 января 2016 года.
  12. 1 2 Tim Thompson (1987-06-28). "A mini-vi for the ST". Newsgroupcomp.sys.atari.st. Usenet: 129@glimmer.UUCP. Архивировано 9 ноября 2012. Дата обращения: 27 декабря 2010.
  13. 1 2 Tony Andrews (1988-06-06). "v15i037: Stevie, an "aspiring" VI clone for Unix, OS/2, Amiga". Newsgroupcomp.sources.unix. Usenet: 893@fig.bbn.com. Архивировано 9 ноября 2012. Дата обращения: 27 декабря 2010.
  14. intro.txt (англ.). Vim Help. Vim (20 января 2015). Дата обращения: 9 июля 2016. Архивировано 9 июля 2016 года.
  15. vim(1). die.net. Vim (11 апреля 2006). — «Vim is based on Stevie, worked on by: Tim Thompson, Tony Andrews and G.R. (Fred) Walter. Although hardly any of the original code remains.» Дата обращения: 9 июля 2016. Архивировано 9 июля 2016 года.
  16. The continuing story of Vim. Дата обращения: 19 сентября 2011. Архивировано 18 апреля 2012 года.
  17. The history of Vim – Jovica Ilic (5 июня 2014). Дата обращения: 25 января 2020. Архивировано 25 января 2020 года.
  18. 1 2 VILE (Vi Like Emacs) – Frequently Asked Questions (FAQ). Дата обращения: 7 сентября 2019. Архивировано 31 августа 2019 года.
  19. 1 2 3 4 5 6 Moolenaar, Bram Vim, an open-source text editor (15 января 2002). Дата обращения: 24 октября 2005. Архивировано 23 августа 2011 года.
  20. Textfiles.com. Дата обращения: 2 октября 2009. Архивировано 16 июля 2011 года.
  21. Filewatcher. Дата обращения: 26 февраля 2011. Архивировано из оригинала 11 июля 2011 года.
  22. Official Vim Manual, Version 6 summary (12 марта 2004). Дата обращения: 6 августа 2008. Архивировано 11 июня 2008 года.
  23. Vim Reference Manual, Version 7 (17 июля 2016). Дата обращения: 13 января 2019. Архивировано 13 января 2019 года.
  24. Google Groups. groups.google.com. Дата обращения: 11 августа 2008. Архивировано 6 ноября 2012 года.
  25. Google Discussiegroepen Архивировано 22 января 2011 года.. Groups.google.com. Retrieved on 2013-12-09.
  26. Bram Moolenaar. Vim 8.0 released! Дата обращения: 12 сентября 2016. Архивировано 22 января 2011 года.
  27. Bram Moolenaar. Vim 8.1 is released! Дата обращения: 18 мая 2018. Архивировано 17 мая 2018 года.
  28. OpenNews: Релиз текстового редактора Vim 8.1. www.opennet.ru. Дата обращения: 25 мая 2018. Архивировано 25 мая 2018 года.
  29. Bram Moolenaar. Vim 8.2 is released! Дата обращения: 13 декабря 2019. Архивировано 12 декабря 2019 года.
  30. Bram Moolenaar. Vim 9.0 is released! Дата обращения: 30 июня 2022. Архивировано 2 июля 2022 года.
  31. Christian Brabandt. Vim 9.1 is released! Дата обращения: 4 января 2024. Архивировано 2 января 2024 года.
  32. 1 2 3 Lamb, Linda. Learning the Vi Editor / Linda Lamb, Arnold Robbins. — O'Reilly Media, Inc., 1998. — P. 305. — ISBN 9781565924260.
  33. Moolenaar, Bram Vim documentation: usr_01 (3 ноября 2010). Дата обращения: 28 августа 2019. Архивировано 29 июля 2020 года.
  34. Vim help files Архивировано 13 января 2019 года. at vimhelp.org
  35. Oualline, Steve. Vi IMproved (VIM). — New Riders Publishers, April 2001. — ISBN 0-7357-1001-5. Архивная копия от 8 апреля 2022 на Wayback Machine
  36. Moolenaar, Bram Vim documentation: intro. vimdoc.sourceforge.net (8 декабря 2010). Дата обращения: 28 августа 2019. Архивировано 27 августа 2019 года.
  37. 1 2 CS107 The Vim Editor. web.stanford.edu. Дата обращения: 27 января 2023. Архивировано 27 января 2023 года.
  38. Семь привычек эффективного редактирования текстов. Дата обращения: 7 апреля 2010. Архивировано 2 октября 2011 года.
  39. Vim Scripts (англ.). Дата обращения: 4 января 2012. Архивировано 3 февраля 2012 года.
  40. Alex Young. Review: VimTouch for Android. usevim.com (19 сентября 2012). Дата обращения: 15 июня 2016. Архивировано из оригинала 13 июня 2016 года.
  41. Превращаем планшет в полноценное рабочее место. «Хакер» (26 ноября 2013). Дата обращения: 15 июня 2016. Архивировано 9 августа 2016 года.
  42. Виталий Сороко. PHP на Android // LinuxFormat. — 2016. — Май (№ 05 (209)). — С. 22.
  43. Проект Vim Touch на сайте GitHub