Предшественник Vim, Stevie (ST Editor for VI Enthusiasts) , был создан Тимом Томпсоном для Atari ST в 1987 году [11] [12] и доработан Тони Эндрюсом [11] [13] и GR (Fred) Уолтером. [14] [15] Это был один из первых популяризированных клонов Vi , и он не использовал исходный код Vi. Исходный код Vi использовал текстовый редактор Ed , разработанный AT&T, и поэтому Vi мог использоваться только теми, у кого была исходная лицензия AT&T. [ необходима цитата ] Основание Vim на исходном коде Stevie означало, что программу можно было распространять без необходимости исходной лицензии AT&T.
Основываясь на своей работе на Стиви, Брэм Муленар начал работать над Vim для компьютера Amiga в 1988 году, а первый публичный релиз (Vim v1.14) состоялся в 1991 году. [16] [17] [ нужен лучший источник ]
На момент своего первого выпуска название «Vim» было аббревиатурой от «Vi IMitation», но в конце 1993 года оно было изменено на «'Vi IMproved». [18]
История релизов
Лицензия
Vim выпускается под лицензией Vim , которая включает в себя некоторые пункты о благотворительности , которые поощряют пользователей, которым нравится программное обеспечение, рассмотреть возможность пожертвования в пользу детей в Уганде . [4] Лицензия Vim совместима с GNU General Public License посредством специального пункта, разрешающего распространение измененных копий под лицензией GNU GPL версии 2.0 или более поздней . [4]
Vim имеет встроенный учебник для начинающих под названием vimtutor, который обычно устанавливается вместе с Vim, но является отдельным исполняемым файлом и может быть запущен с помощью команды оболочки. [34] В руководстве пользователя Vim подробно описаны функции Vim, его можно прочитать из Vim или найти в Интернете. [35] [36]
Vim также имеет встроенную справочную систему (использующую :helpкоманду ), которая позволяет пользователям запрашивать команды и функции и перемещаться по ним.
Регистры
Vim имеет различные специальные записи памяти, называемые регистрами (не путать с аппаратными или процессорными регистрами ). При вырезании, удалении, копировании или вставке текста пользователь может выбрать сохранение измененного текста в регистре. Существует 36 регистров общего назначения, связанных с буквами и цифрами ([a-z0-9]), и ряд специальных, которые либо содержат специальные значения (текущее имя файла, последняя команда и т. д.), либо служат для специальных целей. [7] : 85
Режимы
Как и vi, vim поддерживает несколько режимов редактирования. В зависимости от режима, набранные символы интерпретируются либо как последовательности команд, либо вставляются как текст. В Vim есть 14 режимов редактирования, 7 основных режимов и 7 вариантов: [37]
Нормальный режим – используется для команд редактора. Обычно это режим по умолчанию, и по умолчанию нажатие ESCвозвращает редактор в этот режим.
Режим вставки – используется для набора текста способом, похожим на большинство современных редакторов. В этом режиме открытый текст в буферах может быть изменен текстом, введенным с клавиатуры. [38] [33] : 12
Визуальный режим – используется для выделения областей текста. Команды могут быть запущены на выделенной области – перемещение, редактирование, фильтрация через встроенную или внешнюю команду и т. д.
Визуальный построчный режим , подтип визуального режима, который выбирает одну или несколько целых строк.
Визуальный блок , другой подтип, который выбирает прямоугольный блок текста в одну или несколько строк.
Режим выбора — похож на визуальный, но команды не интерпретируются, вместо этого выделенный текст напрямую заменяется вводом с клавиатуры; похож на режим выбора, используемый в редакторах на платформах Microsoft Windows.
Режим командной строки или Cmdline — обеспечивает ввод одной строки в нижней части окна Vim. Команды (начинающиеся с ) и некоторые другие клавиши для определенных действий (включая поиск по шаблону и команду фильтра) активируют этот режим. После завершения команды Vim возвращается в предыдущий режим. [38] [33] : 12 :
Режим Ex mode – принимает последовательность команд.
Режим «Терминал-Задание» — взаимодействие с заданием в окне терминала.
Настройка
Vim легко настраивается и расширяется, что делает его привлекательным инструментом для пользователей, которым требуется большой контроль и гибкость в своей среде редактирования текста. [39] Ввод текста облегчается множеством функций, разработанных для повышения эффективности клавиатуры. Пользователи могут выполнять сложные команды с помощью «привязок клавиш», которые можно настраивать и расширять. Функция «записи» позволяет создавать макросы для автоматизации последовательностей нажатий клавиш и вызывать внутренние или определяемые пользователем функции и сопоставления. Сокращения, подобные макросам и сопоставлениям клавиш, облегчают расширение коротких строк текста в более длинные и также могут использоваться для исправления ошибок. Vim также имеет «легкий» режим для пользователей, ищущих более простое решение для редактирования текста. [40]
Существует множество плагинов , которые расширяют или добавляют новые функции в Vim. Эти плагины обычно написаны на внутреннем языке сценариев Vim, vimscript (также известном как VimL), [41] , но могут быть написаны и на других языках.
Существуют проекты, объединяющие сложные скрипты и настройки и нацеленные на превращение Vim в инструмент для определенной задачи или добавление основных особенностей в его поведение. Примерами служат Cream, который заставляет Vim вести себя как редактор «кликни и набери», или VimOutliner, который предоставляет удобный планировщик для пользователей Unix-подобных систем.
Возможности и улучшения по сравнению с vi
Vim имеет режим совместимости с vi, но когда этот режим не используется, Vim имеет много улучшений по сравнению с vi. [42] Однако даже в режиме совместимости Vim не полностью совместим с vi, как определено в Single Unix Specification [43] и POSIX (например, Vim не поддерживает открытый режим vi, только визуальный режим). Разработчики Vim заявляют, что он «очень совместим с Vi». [44]
Некоторые из улучшений Vim включают функции завершения , сравнение и слияние файлов (известные как vimdiff), комплексную интегрированную справочную систему, расширенные регулярные выражения , языки сценариев (как собственные, так и через альтернативные интерпретаторы сценариев, такие как Perl, Python, Ruby, Tcl и т. д.), включая поддержку плагинов , графический пользовательский интерфейс (gvim), ограниченные функции, подобные интегрированной среде разработки , взаимодействие с мышью (как с графическим интерфейсом, так и без него), сворачивание , редактирование сжатых или архивированных файлов в форматах gzip , bzip2 , zip и tar , а также файлов по сетевым протоколам, таким как SSH , FTP и HTTP , сохранение состояния сеанса, проверку орфографии , разделение (горизонтальное и вертикальное) окон и вкладок, поддержку Unicode и других языков, подсветку синтаксиса , команды между сеансами, историю поиска и положения курсора , многоуровневую и разветвленную историю отмены/повтора , которая может сохраняться между сеансами редактирования, и визуальный режим. [ необходима ссылка ]
Во время работы Vim сохраняет изменения пользователя в файле подкачки с расширением ".swp" . Этот файл можно использовать для восстановления после сбоя. Если пользователь попытается открыть файл, а файл подкачки уже существует, Vim предупредит пользователя, и если пользователь продолжит, Vim будет использовать файл подкачки с расширением ".swo" (или, если уже есть более одного файла подкачки, ".swn", ".swm" и т. д.). [45] [46] Эту функцию можно отключить. [47]
Vim-скрипт
Скрипт Vim (также называемый Vimscript или VimL ) [48] — это язык сценариев, встроенный в Vim. [49] Основанный на языке ex editor оригинального редактора vi , в ранние версии Vim были добавлены команды для управления потоком и определениями функций. Начиная с версии 7, скрипт Vim также поддерживает более сложные типы данных, такие как списки и словари , а также простую форму объектно-ориентированного программирования . Встроенные функции, такие как map()и , filter()позволяют реализовать базовую форму функционального программирования , а скрипт Vim имеет лямбда с версии 8.0. Скрипт Vim в основном написан в стиле императивного программирования .
Макросы Vim могут содержать последовательность команд обычного режима , но также могут вызывать ex-команды или функции, написанные на скрипте Vim для более сложных задач. Почти все расширения (называемые плагинами или чаще скриптами) основных функций Vim написаны на скрипте Vim, но плагины могут также использовать другие языки, такие как Perl , [50] Python , [51] Lua , [52] Ruby , [53] Tcl , [54] или Racket . [55] Эти плагины можно установить вручную или через менеджер плагинов, такой как Vundle, Pathogen или Vim-Plug.
Файлы скриптов Vim хранятся как обычный текст, как и другой код, и расширение имени файла обычно .vim. Одним заметным исключением является файл конфигурации Vim, .vimrc.
Примеры
" Это программа Hello World на языке Vim.
echo "Hello, world!"" Это простой цикл while в скрипте Vim. let i = 1 while i < 5 echo "count is" i let i += 1 endwhile
unlet i
Neovim имеет тот же синтаксис конфигурации, что и Vim до vim9script; таким образом, один и тот же файл конфигурации может использоваться с обоими редакторами, хотя есть небольшие различия в деталях опций. [66] Если дополнительные функции Neovim не используются, Neovim совместим почти со всеми функциями Vim. [67]
Проект Neovim был начат в 2014 году после того, как патч для Vim, поддерживающий многопоточность, был отклонен. [68] Neovim успешно собрал средства в марте 2014 года, поддержав по крайней мере одного штатного разработчика. [69] [70]
В настоящее время разрабатывается несколько интерфейсов, которые используют возможности Neovim. [71] [72] [73]
С выпуском Neovim версии 0.5 2 июля 2021 года он получил встроенную поддержку LSP , Tree -sitter и более полную поддержку Lua, включая поддержку скриптов конфигурации, написанных на Lua вместо VimL. [74]
Галерея
Neovim имеет настроенную строку состояния и темную цветовую схему.
^ LuaJIT напрямую указан как сторонняя зависимость для сборки программы.
Ссылки
^ "Vim 9.1 доступен". 2 января 2024 г. Получено 3 января 2024 г.
^ "vim/LICENSE". github.com . 20 октября 2021 г. Архивировано из оригинала 16 августа 2021 г. Получено 5 июля 2021 г.
^ "Vim License". spdx.org . Архивировано из оригинала 29 июля 2021 г. . Получено 5 июля 2021 г. .
^ abc "Vim: uganda.txt". vimhelp.org . Архивировано из оригинала 13 января 2019 . Получено 13 января 2019 .
^ Документация Vim: введение Архивировано 13 января 2019 г. на Wayback Machine : «Vim произносится как одно слово, как Jim, а не как vi-ai-em. Оно пишется с заглавной буквы, так как это имя, опять же как Jim».
^
Оригинальное интервью: Муленаар, Брэм (18 апреля 2005 г.). «Рожовор: Брэм Муленаар» [Интервью: Брэм Муленаар]. LinuxEXPRES (Интервью) (на чешском языке). Беседовал Заплетал, Лукаш. вопрос 2. Архивировано из оригинала 28 декабря 2023 года . Проверено 3 января 2024 г.
Перевод: Брэм Муленаар (nd). «Интервью с Брэмом Муленааром, опубликованное в чешском журнале LinuxEXPRES, английская версия». Сайт Брэма Муленаара . Архивировано из оригинала 7 января 2016 года.
^ ab McDonnell, Mark (2014). Pro vim. [Беркли]. ISBN978-1-4842-0250-0. OCLC 897466496.{{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
^ "Лучший редактор | Linux Journal". www.linuxjournal.com . Получено 20 апреля 2023 г. .
^ "Stack Overflow Developer Survey 2015 § IV. Text Editor". Stack Overflow. Архивировано из оригинала 4 мая 2019 года . Получено 25 июля 2016 года .
^ "Результаты опроса разработчиков Stack Overflow 2019". Stack Overflow § VII. Среды разработки. Архивировано из оригинала 7 марта 2020 г. Получено 20 июля 2019 г.
^ abcd Томпсон, Тим (26 марта 2000 г.). "Стиви". Архивировано из оригинала 4 января 2016 г. Получено 27 декабря 2010 г.
^ ab Тим Томпсон (28 июня 1987 г.). "A mini-vi for the ST". Группа новостей : comp.sys.atari.st. Usenet:[email protected]. Архивировано из оригинала 9 ноября 2012 г. Получено 27 декабря 2010 г.
^ ab Tony Andrews (6 июня 1988 г.). "v15i037: Stevie, "начинающий" клон VI для Unix, OS/2, Amiga". Группа новостей : comp.sources.unix. Usenet:[email protected]. Архивировано из оригинала 9 ноября 2012 г. Получено 27 декабря 2010 г.
↑ Vim (20 января 2015 г.). "intro.txt". Справка Vim . Vim. Архивировано из оригинала 9 июля 2016 г. Получено 9 июля 2016 г.
^ "vim(1)". die.net . Vim. 11 апреля 2006 г. Архивировано из оригинала 9 июля 2016 г. Получено 9 июля 2016 г. Vim основан на Stevie, над которым работали: Тим Томпсон, Тони Эндрюс и GR (Фред) Уолтер. Хотя от оригинального кода почти ничего не осталось.
^ Moolenaar, Bram (10 октября 2000 г.). "Продолжение истории Vim" (PDF) . moolenaar.net . Архивировано (PDF) из оригинала 18 апреля 2012 г. . Получено 19 сентября 2011 г. .
^ "История Вима – Йовица Илич". 5 июня 2014 г. Архивировано из оригинала 25 января 2020 г. Получено 25 января 2020 г.
^ abc "VILE (Vi Like Emacs) – Часто задаваемые вопросы (FAQ)". Архивировано из оригинала 31 августа 2019 года . Получено 7 сентября 2019 года .
^ abcdef Муленаар, Брэм (15 января 2002 г.). «Vim, текстовый редактор с открытым исходным кодом». Архивировано из оригинала 7 августа 2011 года . Проверено 24 октября 2005 г.
^ "Textfiles.com". Архивировано из оригинала 16 июля 2011 года . Получено 2 октября 2009 года .
^ "Filewatcher". Архивировано из оригинала 11 июля 2011 г. Получено 26 февраля 2011 г.
^ "Официальное руководство Vim, краткое содержание версии 4". 12 марта 2004 г. Архивировано из оригинала 18 августа 2008 г. Получено 6 августа 2008 г.
^ "Официальное руководство Vim, краткое содержание версии 5". 17 января 2004 г. Архивировано из оригинала 21 августа 2008 г. Получено 6 августа 2008 г.
^ "Официальное руководство Vim, краткое содержание версии 6". 12 марта 2004 г. Архивировано из оригинала 11 июня 2008 г. Получено 6 августа 2008 г.
^ "Vim Reference Manual, Version 7". 17 июля 2016 г. Архивировано из оригинала 13 января 2019 г. Получено 13 января 2019 г.
^ "Google Groups". groups.google.com . Архивировано из оригинала 6 ноября 2012 . Получено 11 августа 2008 .
^ Google Discussiegroepen Архивировано 22 января 2011 г. в Португальском веб-архиве. Groups.google.com. Получено 09.12.2013.
^ Bram Moolenaar. "Vim 8.0 released!". Архивировано из оригинала 22 января 2011 года . Получено 12 сентября 2016 года .
^ Брэм Муленар. "Vim 8.1 выпущен!". Архивировано из оригинала 17 мая 2018 года . Получено 18 мая 2018 года .
^ Брэм Муленар. "Vim 8.2 выпущен!". Архивировано из оригинала 12 декабря 2019 года . Получено 13 декабря 2019 года .
^ Брэм Муленар. «Vim 9.0 выпущен!». Архивировано из оригинала 2 июля 2022 г. Получено 30 июня 2022 г.
^ Кристиан Брабандт. "Vim 9.1 выпущен!". Архивировано из оригинала 2 января 2024 года . Получено 4 января 2024 года .
^ abc Lamb, Linda; Robbins, Arnold (1998). Learning the Vi Editor . O'Reilly Media, Inc. стр. 305. ISBN9781565924260.
^ Moolenaar, Bram (3 ноября 2010 г.). "Vim documentation: usr_01". Архивировано из оригинала 29 июля 2020 г. Получено 28 августа 2019 г.
^ Файлы справки Vim Архивировано 13 января 2019 г. на Wayback Machine на vimhelp.org
^ Уаллин, Стив (апрель 2001 г.). Vi IMproved (VIM) (PDF) . New Riders Publishers. ISBN0-7357-1001-5. Архивировано (PDF) из оригинала 19 ноября 2021 г. . Получено 11 октября 2021 г. .
^ Муленаар, Брэм. «Вим: intro.txt». vimhelp.org . Проверено 1 сентября 2023 г.
^ ab "CS107 The Vim Editor". web.stanford.edu . Архивировано из оригинала 27 января 2023 г. . Получено 27 января 2023 г. .
^ Мелендес, Стивен (28 октября 2014 г.). «Почему Vim, текстовый редактор 80-х годов, по-прежнему является пользовательским интерфейсом по выбору опытных пользователей». FastCompany . Архивировано из оригинала 6 мая 2019 г. . Получено 5 мая 2019 г. .
^ "Tips: Making Vim easy". Linux.com . 10 апреля 2007 г. Архивировано из оригинала 6 мая 2019 г. Получено 6 мая 2019 г.
^ "Vim documentation: usr_41". vimhelp.org . Архивировано из оригинала 13 января 2019 . Получено 13 января 2019 .
^ Справочная система Vim (введите " :help" в Vim)
↑ The Open Group (2008), «vi — экранно-ориентированный (визуальный) редактор отображения», Single Unix Specification, Version 4 (IEEE Std 1003.1–2008), архивировано из оригинала 22 января 2011 г. , извлечено 27 декабря 2010 г.
^ Peppe; Benji; Campbell, Charles (2 января 2004 г.). "Vim FAQ". Архивировано из оригинала 13 января 2019 г. . Получено 27 декабря 2010 г. .(вопрос 1.3)
^ "Vim documentation: recovery". vimdoc.sourceforge.net . Архивировано из оригинала 13 декабря 2020 г. . Получено 17 декабря 2020 г. .
^ "Как обращаться с файлами подкачки в Vim". cs.longwood.edu . Архивировано из оригинала 7 мая 2021 г. . Получено 17 декабря 2020 г. .
^ "опция 'swapfile'". vimhelp.org . 10 октября 2020 г. Архивировано из оригинала 14 декабря 2020 г. Получено 18 декабря 2020 г.
^ Кляйн, Бенджамин. «The VimL Primer: Edit Like a Pro with Vim Plugins and Scripts by Benjamin Klein | The Pragmatic Bookshelf». Архивировано из оригинала 25 января 2020 г. Получено 25 января 2020 г.
^ "Vim documentation: usr_41". vimhelp.org . Архивировано из оригинала 13 января 2019 . Получено 13 января 2019 .
^ Verdoolaege, Sven; Gerassimof, Matt. "Vim documentation: if_perl". Архивировано из оригинала 8 февраля 2012 года . Получено 27 августа 2019 года .
^ Мур, Пол. "Vim documentation: if_pyth". Архивировано из оригинала 22 августа 2012 года . Получено 27 августа 2019 года .
^ Карвальо, Луис. "Vim documentation: if_lua". Архивировано из оригинала 30 марта 2012 года . Получено 27 августа 2019 года .
^ Маэда, Шуго. "Vim documentation: if_ruby". Архивировано из оригинала 14 февраля 2012 года . Получено 27 августа 2019 года .
^ Вилкен, Инго. "Vim documentation: if_tcl". Архивировано из оригинала 24 августа 2012 года . Получено 27 августа 2019 года .
^ Хорев, Сергей. "Vim documentation: if_mzsch". Архивировано из оригинала 14 апреля 2012 года . Получено 27 августа 2019 года .
^ " :help sys-file-list" "Vim Online: Загрузки". Архивировано из оригинала 8 января 2007 г. Получено 7 января 2007 г.
^ "Mac OS X Manual Page For vim(1)". developer.apple.com . Apple Inc. Архивировано из оригинала 9 июня 2012 г. Получено 12 января 2010 г.
^ "VimTouch, разработка этого приложения застопорилась". GitHub . Архивировано из оригинала 29 декабря 2015 г. Получено 9 августа 2015 г.
^ "DroidVim, в стадии активной разработки". GitHub . Архивировано из оригинала 27 июня 2018 г. Получено 5 марта 2017 г.
^ "Vim – Applidium, мобильное агентство в Париже". Архивировано из оригинала 20 января 2012 года . Получено 11 августа 2015 года .
^ "Выпуск 0.10.2". 3 октября 2024 г. Получено 22 октября 2024 г.
^ "Neovim: vim, из коробки". neovim.io . Архивировано из оригинала 16 мая 2022 г. . Получено 2 мая 2024 г. .
^ "Neovim Vision". Архивировано из оригинала 26 апреля 2022 года . Получено 18 февраля 2016 года .
^ "Nvim documentation: vim_diff". Архивировано из оригинала 25 августа 2019 г. Получено 2 октября 2019 г.
^ "GitHub – neovim/neovim: Vim-fork, ориентированный на расширяемость и удобство использования". GitHub . 29 августа 2019 г. Архивировано из оригинала 10 февраля 2016 г. Получено 18 февраля 2016 г.
^ "Переход на NeoVim". 31 марта 2015 г. Архивировано из оригинала 16 февраля 2016 г. Получено 18 февраля 2016 г.
^ "Как начать использовать Neovim вместо Vim". Архивировано из оригинала 4 июня 2017 г. Получено 18 февраля 2016 г.
^ Эдди Ковски (1 февраля 2017 г.). «25-я годовщина Vim и выпуск Vim 8 [LWN.net]». lwn.net . Получено 13 июня 2023 г. .
^ "Vimcasts.org blog post". Архивировано из оригинала 17 августа 2021 г. Получено 18 февраля 2016 г.
^ "Neovim". Bountysource . 23 марта 2014 г. Архивировано из оригинала 5 января 2021 г. Получено 20 марта 2021 г.
^ "NyaoVim frontend". GitHub . 29 августа 2019 г. Архивировано из оригинала 30 апреля 2022 г. Получено 18 февраля 2016 г.
^ "Mac OS X frontend". GitHub . 29 августа 2019 г. Архивировано из оригинала 17 апреля 2022 г. Получено 18 февраля 2016 г.
^ "Neovim-Qt frontend". GitHub . 21 июля 2020 г. Архивировано из оригинала 16 сентября 2019 г. Получено 17 июля 2019 г.
^ Ayooluwa Isaiah (3 августа 2021 г.). "Новые функции в Neovim 0.5 [LWN.net]". lwn.net . Получено 13 июня 2023 г. .
Внешние ссылки
В Wikibook Learning the vi Editor есть страница по теме: Vim
На Викискладе есть медиафайлы по теме Vim .
Официальный сайт
TechTalk Брэма Муленара, посвященный 25-летию первого релиза vim на YouTube