Vim
Шаблон:Rq Шаблон:КарточкаШаблон:Сортировка: по изображениям{{#if:||Шаблон:Категория по дате}}Ошибка скрипта: Модуля «check for unknown parameters» не существует.Шаблон:ИТ:Общие проверки Vim (сокр. от Vi Improved, произносится Шаблон:IPAc-en<ref name="pronounc">Vim documentation: intro Шаблон:Webarchive: "Vim is pronounced as one word, like Jim, not vi-ai-em. It's written with a capital, since it's a name, again like Jim."</ref> («вим»)) — свободный текстовый редактор, созданный на основе более старого vi, разработанного Биллом Джойем. Автор Vim’а, Брам Моленар, создал его из порта редактора Stevie для Amiga<ref>Шаблон:Citation</ref><ref>Шаблон:Citation</ref> и в 1991 году выпустил общедоступную версию. Vim предназначен для использования как в интерфейсе командной строки, так и в качестве отдельного приложения в графическом пользовательском интерфейсе<ref name=":2">Шаблон:Cite book</ref>.
С выпуска для Amiga кроссплатформенная разработка сделала Vim доступным для многих других систем. В 2018 году он был признан самым популярным редактором среди читателей Linux Journal<ref>Шаблон:Cite web</ref>; в 2015 году опрос разработчиков на Stack Overflow показал, что он стал третьим по популярности текстовым редактором<ref>Шаблон:Cite web</ref>, а в 2019 году — пятой по популярности средой разработки<ref>Шаблон:Cite web</ref>.
Существует и модификация для использования в графическом оконном интерфейсе — GVim. Многие пользовательские команды в GVim могут вызываться через соответствующие пункты меню.
История
Предшественник Vim’a, Stevie, был создан Тимом Томпсоном для Atari ST в 1987 году<ref name="stevie">Шаблон:Cite web</ref><ref name="stevie-usenet">Шаблон:Cite newsgroup</ref> и доработан Тони Эндрюсом<ref name=stevie/><ref name="v15i026">Шаблон:Cite newsgroup</ref> и G. R. (Fred) Уолтером<ref>Шаблон:Cite web</ref><ref>Шаблон:Cite web</ref>.
Взяв за основу Stevie, Брам Моленар начал работать над Vim для компьютера Amiga в 1988 году, а первый публичный релиз (Vim v1.14) состоялся в 1991 году<ref>Шаблон:Cite web</ref><ref>Шаблон:Cite web</ref>.
Во время первого выпуска название «Vim» было акронимом от «Vi IMitation», но в конце 1993 года оно было изменено на «Vi IMproved»<ref name="vile-FAQ">Шаблон:Cite web</ref>.
| История версий | ||
|---|---|---|
| Дата | Версия | Изменения |
| Июнь 1987 года | N/A | Тим Томпсон выпускает Stevie, ограниченный клон vi для Atari ST, публикуя исходный код на Usenet.<ref name=stevie /><ref name="stevie-usenet" /> |
| Июнь 1988 года | N/A | Тони Эндрюс улучшает Stevie и переносит его на Unix и OS/2, выпуская версию 3.10 на Usenet.<ref name=stevie/><ref name="v15i026"/> |
| 1988 год | 1.0 | Брам Моленар создаёт Vi IMitation, который никогда официально не выходил. |
| 2 ноября 1991 года | 1.14<ref name="history">Шаблон:Cite web</ref> | Первая общедоступная версия для Amiga<ref>Шаблон:Cite web</ref>. |
| 1992 год | 1.22<ref name="history"/> | Порт для Unix, никогда не публиковался. Теперь Vim конкурирует с vi. |
| December 14, 1993 | 2.0<ref name="filewatcher">Шаблон:Cite web</ref> | Первый выпуск под названием Vi IMproved.<ref name="vile-FAQ"/> |
| 12 августа 1994 года | 3.0<ref name="history"/> | Поддержка разбиения окон |
| 29 мая 1996 года | 4.0<ref name="history"/> | Графический пользовательский интерфейс |
| 19 февраля 1998 года | 5.0<ref name="history"/> | Подсветка синтаксиса, простой язык сценариев (определяемые пользователем функции, команды и т. д.) |
| 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<ref name="history"/><ref>Шаблон:Cite web</ref> | Сворачивание, плагины, многоязычность и др. |
| 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<ref>Шаблон:Cite web</ref> | Проверка правописания, автодополнение, вкладки («tab-ы»), подсветка текущей строки и столбца, undo branches и другие изменения |
| 12 мая 2007 года | 7.1 | Исправление ошибок, новые исполняемые файлы и файлы синтаксиса и др. |
| 9 августа 2008 года | 7.2<ref>Шаблон:Cite web</ref> | Поддержка чисел с плавающей запятой в сценариях, рефакторинг кода отрисовки экрана, исправление ошибок, новые файлы синтаксиса и др. |
| 15 августа 2010 года | 7.3 | Исправление ошибок, новые исполняемые файлы и файлы синтаксиса, улучшение безопасности, «вечные» undo и redo, прекращение поддержки Mac OS 9 и GTK1, поддержка Lua и Python3 и др. |
| 10 августа 2013 года | 7.4<ref>Google Discussiegroepen Шаблон:Webarchive. Groups.google.com. Retrieved on 2013-12-09.</ref> | Новый, более быстрый движок для поддержки регулярных выражений |
| 12 сентября 2016 года | 8.0<ref>Шаблон:Cite web</ref> | Асинхронный ввод/вывод, лямбда-выражения, замыкания, поддержка GTK+ 3 и Microsoft DirectX и др. |
| 18 мая 2018 года | 8.1<ref>Шаблон:Cite web</ref> | Поддержка открытия терминала внутри окна Vim<ref>Шаблон:Cite web</ref>. |
| 14 декабря 2019 года | 8.2<ref>Шаблон:Cite web</ref> | Всплывающие окна, свойства текста. |
| 28 июня 2022 года | 9.0<ref>Шаблон:Cite web</ref> | Vim9 script |
| 2 января 2024 года | 9.1<ref>Шаблон:Cite web</ref> | Поддержка классов и объектов в Vim9 script, сглаженная прокрутка, виртуальный текст |
Лицензия
Vim распространяется по GPL-совместимой лицензии, известной как Charityware (англ. Шаблон:Lang-en2 — благотворительность). Часть средств, пожертвованных на разработку Vim, тратится на поддержку сирот Уганды посредством организации ICCF Holland.
Интерфейс

Одна из главных особенностей Vim и основное отличие от «классических» текстовых редакторов — применение двух основных, вручную переключаемых, режимов ввода: командного (после запуска редактор находится в нём) и текстового (англ. Шаблон:Lang-en2, режим непосредственного редактирования текста, аналогичный большинству «обычных» редакторов). Существуют и другие режимы.
Vim не интуитивен (кроме «текстового» режима), так что эффективная работа с редактором требует предварительного обучения.
Как и у vi, интерфейс Vim основан не на меню или значках, а на командах, заданных в текстовом пользовательском интерфейсе. Графический режим, gVim, добавляет меню и панели инструментов для часто используемых команд, но полная функциональность по-прежнему используется через интерфейс командной строки. Vi (и, соответственно, Vim), как правило, позволяет наборщику держать пальцы на среднем («домашнем») ряду, что может быть преимуществом для слепого метода печати<ref name="Lamb1998">Шаблон:Cite book</ref>.
В Vim есть встроенный учебник для начинающих под названием vimtutor, который обычно устанавливается вместе с Vim, но представляет собой отдельный исполняемый файл и может запускаться с помощью команды оболочки<ref>Шаблон:Cite web</ref>. Руководство пользователя Vim, подробно описывающее функции Vim, можно прочитать прямо в Vim или найти в Интернете<ref>Vim help files Шаблон:Webarchive at vimhelp.org</ref><ref name="vimbook">Шаблон:Cite book Шаблон:Wayback</ref>.
Также Vim имеет подробную справочную систему и систему навигации и перехода между её разделами. Чтобы открыть любой её раздел, достаточно воспользоваться командой :help в командном режиме.
Регистры
У Vim есть специальные элементы памяти — регистры (не путать с аппаратными средствами или регистрами процессора) — в которые можно сохранить обработанный текст при его вырезании, удалении, копировании или вставке. Есть 36 регистров общего назначения, связанных с буквами и цифрами ([a-z0-9]), и ряд специальных регистров, которые либо содержат специальные значения (текущее имя файла, последняя команда и т. д.), либо служат для специальной целиШаблон:R.
Режимы работы
Как и vi, vim поддерживает несколько режимов редактирования. В зависимости от режима вводимые символы интерпретируются либо как последовательности команд, либо вставляются как текст. Всего есть 12 режимов редактирования, 6 из которых — основные<ref name=":0">Шаблон:Cite web</ref>.
- Нормальный режим (Шаблон:Lang-en2) — используется для команд редактора. Обычно это режим по умолчанию; нажатие Шаблон:Key press возвращает редактор в этот режим.
- Режим вставки (Шаблон:Lang-en2) — используется для ввода текста аналогично большинству редакторов. В этом режиме открытый текст в буферах можно модифицировать текстом, введённым с клавиатуры<ref name=":1">Шаблон:Cite web</ref>Шаблон:R.
- Визуальный режим (Шаблон:Lang-en2) — используется для выделения областей текста. Выбранную область можно перемещать, редактировать и т. д.
- Визуальный линейный (Шаблон:Lang-en2) — подтип визуального режима, в котором выбирается одна или несколько целых строк.
- Визуальный поблочный (Шаблон:Lang-en2) — другой подтип, который выделяет прямоугольный блок текста в одной или нескольких строках.
- Режим выбора (Шаблон:Lang-en2) — аналогичный визуальному, но команды не интерпретируются, вместо этого выделенный текст напрямую заменяется вводом с клавиатуры. Аналогичен режиму выделения, используемому в редакторах на платформах Microsoft Windows.
- Режим командной строки (Шаблон:Lang-en2 или Шаблон:Lang-en2) — обеспечивает однострочный ввод в нижней части окна Vim. Команды, начинающиеся с Шаблон:Key press, и некоторые другие клавиши (например поиск по шаблону и команда фильтра) активируют этот режим. По завершении команды Vim возвращается в предыдущий режим<ref name=":1" />Шаблон:R.
- Ex mode mode — принимает последовательность команд.
Нормальный режим
Шаблон:Якорь Шаблон:Врезка По умолчанию Vim начинает свою работу в нормальном режиме, который также называют командным. Нажатие клавиш в этом режиме воспринимается как команды (копирования, удаления, перемещения текста и т. д.).
Среди команд нормального режима есть «односимвольные» команды. Так, например, нажатие Шаблон:Key приведёт к перемещению курсора в конец строки; нажатие клавиши Шаблон:Key (ноль) — в начало; Шаблон:Key (в верхнем регистре) — к удалению (delete) части текущей строки от текущего положения курсора до конца; Шаблон:Key (в верхнем регистре) — к замене (change) части текущей строки от текущего положения курсора и до конца и т. д.
Другие команды для своей работы будут ждать дальнейшего продолжения ввода. Например Шаблон:Key ответственно за быстрое перемещение в строке к следующему набранному после себя символу. Поэтому после нажатия Шаблон:Key Vim будет ждать набора этого символа, чтобы использовать его в качестве искомого.
После нажатия Шаблон:Key (yank), Шаблон:Key, Шаблон:Key и других подобных «управляющих» клавиш Vim будет ожидать дальнейшего ввода команд, задающих объект, над которым будет произведено действие (копирование, удаление или замена соответственно). Так, Шаблон:KeyШаблон:KeyШаблон:Key удалит текущее слово под курсором (delete ambient word), а Шаблон:KeyШаблон:Key — все символы начиная с текущего положения курсора и заканчивая концом строки.
Подобные очень простые команды используются не только в «ручном режиме» (когда при необходимости набираются всякий раз с клавиатуры), но и при задании сложных последовательностей действий.
Нормальный режим — это центральный режим, из которого осуществляется переход во все остальные. Из любого режима в командный режим можно перейти, дважды нажав клавишу Шаблон:Key (в большинстве случаев достаточно одного нажатия).Шаблон:Дополнить раздел
Режим вставки
Шаблон:Якорь Режим вставки (англ. Шаблон:Lang-en2), в котором производится ввод текста.
Для перехода из командного режима в режим вставки можно нажать Шаблон:Key (для начала вставки текста на месте курсора) или Шаблон:Key (для начала вставки с начала строки) или Шаблон:Key (для начала вставки текста после курсора) или Шаблон:Key (для начала вставки в конец строки) . Также существует ряд других клавиш и их сочетаний для перехода в режим непосредственного редактирования текста (например, через одну из команд замены текстового объекта).
В этом режиме Vim работает так же, как и большинство «обычных» текстовых редакторов. По умолчанию набранные символы не воспринимаются как команды, а вставляются в существующий текст. Однако даже в этом режиме можно задать особые действия редактора, выполняемые при нажатии определённых клавиш или их сочетаний. Как пример, можно задать, чтобы при наборе открывающейся скобки Шаблон:Key сразу же добавлялась парная ей закрывающая скобка и курсор устанавливался между ними.
Для вставки, удаления, изменения и автодополнения текста также могут использоваться клавиатурные сочетания (Шаблон:Key и др.)
При наборе слова-аббревиатуры это слово автоматически заменяется на заранее заданный текст.Шаблон:Дополнить раздел
Режим командной строки
Шаблон:Якорь Этот режим вызывается нажатием Шаблон:Key из нормального режима. За двоеточием следует сложная команда (например, поиска или замены), которая после ввода передаётся на исполнение нажатием Шаблон:Key. После выполнения команды редактор возвращается в нормальный режим. К этому режиму также относятся команды поиска дальше по тексту /, поиск назад по тексту (?) и команда-фильтр ! для передачи данных внешнему фильтру.
Визуальный режим

Визуальный режим отсутствовал в Vi и впервые появился в Vim. Он чем-то схож с командным. С помощью специальных управляющих команд, в сочетании со стрелками и командами навигации, можно посимвольно, построчно или в виде блока выделять фрагменты текста и затем применить к ним команды нормального режима (например, удаление выделенного текста или его замена). Редактирование в этом режиме проще, чем в нормальном, потому что чётко видно, к какому блоку текста будет применяться вызванная команда редактирования.
Настройка
Расширения Vim
Общее число расширений, доступных на официальном сайте, составляет более 3000<ref>Шаблон:Cite web</ref>.
К популярным расширениям Vim, в частности, относятся:
- MiniBufferExplorer;
- taglist — для просмотра структуры программных файлов (список функций и пр.);
- bufexplorer (начиная с версии Vim 7.4 в основном не актуален);
- closetag — для более удобного закрывания тегов при редактировании html и xml файлов;
- supertab — для автодополнения слов нажатием Шаблон:Key (при этом отступы строк работают как обычно);
- project — для организации файлов в проекты для более удобной навигации по ним;
- indexer — для генерации тегов с помощью ctags для всех файлов, входящих в проект (проект может быть организован как плагином project, так и без него). Теги нужны для быстрого перемещения от вызова функции к её объявлению, для получения списка членов структуры или класса, и т. д.
Благодаря гибкости возможностей, предоставляемых посредством расширений, Vim также можно использовать в качестве персонального вики.
Обзор: избранные улучшения vi
В сравнении с классическим vi, Vim отличается следующими улучшениями:
- Работа со многими файлами одновременно. Разбиение окон редактирования может производиться многократно как по горизонтали, так и по вертикали.
- Поддержка Unicode.
- Поддержка визуального режима, который позволяет, например, выполнять операции над блоками текста.
- Неограниченная глубина отмены (undo) и возврата (redo) действий.
- Режим сравнения двух файлов, перенос отдельных изменений из одного файла в другой.
- Широкая файловая поддержка (файл со справкой и более 200 файлов с описанием синтаксиса).
- Подсветка синтаксиса, автоматическое определение величины отступа для каждой строки в зависимости от языка программирования (изначально поддерживает более 200 языков программирования и форматов конфигурационных файлов).
- Интеграция с операционной системой, дающая возможности, близкие к интегрированным средам разработки, такие как поиск ошибки по сообщению компилятора, автодополнение идентификаторов и др.
- Поддержка языка сценариев; возможность написания модулей расширения — плагинов.
- Автоматическое продолжение команд, слов, строк целиком и имён файлов.
- Автоматический вызов внешних команд (например, автоматическая распаковка файла перед редактированием).
- Распознавание и преобразование файлов различных форматов.
- Удобный механизм истории команд, поисковых слов и т. д.
- Запись и исполнение макросов.
- Возможность сохранения настроек и сеанса.
- Возможна интеграция с языками программирования Perl, Tcl, Python и Ruby.
- Поддержка языков с письмом справа налево (арабских и других).
- Сворачивание (folding) текста для лучшего обзора.

- Возможно использование графического интерфейса в специальных версиях (GTK, Motif, ...).
- Хорошо конфигурируется и настраивается под нужды пользователя.
- Для программистов: поддержка цикла разработки «редактирование — компиляция — исправление» программ. Автоматическое выполнение сборки/компиляции, обнаружение и распознавание ошибок, переход к строкам ошибок в тексте программы.
- Для поклонников vi: практически стопроцентная совместимость с vi.
Терминология
- Буфер — временное хранилище текста, каждый редактируемый файл связан с единственным буфером.
- Окно — часть экрана для просмотра/редактирования одного буфера. Каждый буфер может быть размножен на неограниченное количество окон.
- Вкладки («табы», «tabs») — механизм группировки и переключения между группами окон.
- Именованный регистр — именованное хранилище текста для множественных вставок.
- Регистр по умолчанию — неименованное хранилище текста.
- Аббревиатуры — сокращения, при наборе в виде отдельных слов (но не в составе других слов) автоматически разворачивающиеся (путём замены) в заданный текст.
Vim script
Автоматизация операций
Способность Vim различать текстовые объекты (слова, предложения, параграфы, строки, отдельные символы и т. д.) позволяет задавать последовательность действий для автоматизации определённых операций.
Так, после команды <syntaxhighlight lang="Vim"> nmap <F7> byei<<ESC>ea></<C-R>0><ESC> </syntaxhighlight> нажатие Шаблон:Key преобразует (в командном режиме) любое слово под курсором (вне зависимости от его длины и символов, из которых он состоит) в xml-тег. К примеру если текущее слово под курсором — div, то оно будет преобразовано в <div></div>, если transform — то в <transform></transform> и т. д.
Vim способен на гораздо более сложные преобразования, можно задавать и свои функции для преобразования данных и автоматизации рутинных операций.
Все действия, которые осуществимы в Vim «вручную» (то есть непосредственно человеком с клавиатуры) могут быть автоматизированы (включая переключение между различными режимами).
Портируемость
Одно из достоинств редактора Vim — доступность для множества операционных систем. Это особенно актуально для системных администраторов, которым приходится редактировать файлы на разных платформах.
Vim работает на следующих операционных системах:
- Unix-подобных (IBM AIX, HP-UX, SGI IRIX, Sun Solaris, SCO OpenServer и др.), включая Linux, BSD и macOS, Raspberry Pi OS.
- Windows (начиная с Windows 3.x) и DOS
- Android
- iOS
- AmigaOS
- Atari MiNT
- BeOS
- NextStep
- OS/2, OSF
- RISC OS
- SGI
- VMS
VimTouch
Для ОС Android, использующей сенсорный экран как основное устройство ввода, Дэвид Тао написал адаптированную версию vim — vim touch, в настоящее время распространяемую на условиях лицензии Apache<ref>Шаблон:Cite web</ref><ref>Шаблон:Cite web</ref><ref>Шаблон:Статья</ref><ref>Шаблон:GitHub</ref>. Также существует вариант DroidVim.
Награды
С 2001 по 2004 годы Vim являлся победителем устраиваемого Linux Journal конкурса Readers' Choice Awards в категории «Любимый текстовый редактор». Он также получал награды Linuxworld Editors' Choice Award в 1999-м и Slashdot Beanie Award в 2000-м.
Neovim
Шаблон:Карточка программыNeovim (также произносится «нвим») — это форк Vim, ориентированный на улучшение функциональности и добавление поддержки языка программирования Lua. Основное отличие от оригинального Vim заключается в улучшенной архитектуре, поддержке плагинов и интеграции с современными инструментами разработки<ref name="автоссылка1">Vim_diff - Neovim docs</ref>. На сегодняшний день Neovim пользуется больше популярностью среди новых пользователей <ref>Technology | 2024 Stack Overflow Developer Survey</ref><ref>Technology | 2024 Stack Overflow Developer Survey</ref>.
Neovim кардинально не отличается от Vim. Все базовые функции, которые предлагает Vim, присутствуют и в Neovim. Основные изменения затронули лишь улучшение архитектуры, поддержку асинхронности, а также интеграцию с Lua для более гибкой настройки и разработки плагинов. Почти все функции включая плагины Vim поддерживаются в Neovim, когда как в самом Vim многие функциональности Neovim не работают.<ref name="автоссылка1" />
Проект был запущен в 2014 году после отклонения от идеи(патча) поддержки мультизадачности в Vim<ref>Шаблон:Cite web</ref>. В марте 2014 году Neovim получил финансовую поддержку со сборов краудфандинга и имел как минимум одного full-time разработчика<ref>Шаблон:Cite web</ref><ref>Шаблон:Cite web</ref>.
Основные отличия в таблицах
| Особенность | Vim | Neovim |
|---|---|---|
| Язык настройки | Vimscript | Lua |
| Асинхронность | Нет | Да |
| Поддержка плагинов | Плагины через Vimscript | Плагины через Lua и асинхронно |
| Интеграция с LSP | Требует внешних плагинов | Встроенная поддержка LSP |
| Поддержка GUI | Есть, но ограничена | Развитая поддержка GUI |
Основные отличия включают в себе:
- Lua вместо VimScript: В отличие от традиционного и малопопулярного Vimscript, Neovim использует Lua для настройки и написания плагинов. Это позволяет значительно повысить производительность и гибкость редактора, а также ускоряет его работу. Lua более современный и быстрый язык, чем Vimscript, что делает работу с Neovim более эффективной.
- Архитектура: Neovim имеет улучшенную архитектуру, которая позволяет добавлять новые функции и возможности без изменений в ядре самого приложения. Это делает редактор более гибким и легко расширяемым, предоставляя разработчикам возможность внедрять новые фичи без «ломки» базовой функциональности.
- Асинхронность: Одним из ключевых улучшений является поддержка асинхронности. В Neovim плагины могут работать в фоновом режиме, не блокируя основной процесс работы редактора. Это значительно ускоряет работу с большим количеством плагинов и делает работу с редактором более отзывчивой.
Галерея
-
Neovim с настроенной строкой состояния и тёмной цветовой схемой.
-
Tweaked v0.9.0-dev version.
Примечания
Ссылки
- Рекомендации по эффективному использованию Vim от его создателя
- Руководство по установке и быстрой настройке редактора Vim в Unix, Linux и MS Windows 95/NT
- Vim Awesome — Список популярных расширений Vim по популярности их на GitHub
- Страницы с ошибками скриптов
- Программное обеспечение по алфавиту
- Свободные текстовые редакторы
- Свободное кроссплатформенное программное обеспечение
- Текстовые редакторы для macOS
- Текстовые редакторы для Linux
- Текстовые редакторы для Windows
- Программное обеспечение для Unix
- Свободное программное обеспечение, написанное на Си
- Программное обеспечение, программируемое с помощью Lua
- Termcap
- Careware
- Vi