Vim

Материал из Википедии — свободной энциклопедии
(перенаправлено с «VIM»)
Перейти к: навигация, поиск
Vim
Vimlogo.svg
Vim syntax.png
Vim в «консольном» режиме
Тип

Текстовый редактор

Разработчик

Брам Моленар и другие

Написана на

C и Vim script [1]

Интерфейс

GTK+

Операционная система

Amiga, Linux, Mac OS X, Windows, OpenVMS, OS/2, Unix

Языки интерфейса

английский, китайский, французский, итальянский, польский, русский[2]

Первый выпуск

2 ноября 1991[3]

Последняя версия

7.4 (10 августа 2013)

Лицензия

GPL-совместимая, charityware

Сайт

vim.org

Vim на Викискладе

Vim (сокр. от Vi Improved, произносится «вим») — свободный режимный текстовый редактор, созданный на основе более старого vi. Ныне это один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации, и созданным благодаря этому расширениям и надстройкам.

Пользовательский интерфейс Vim’а может работать в чистом текстовом (консольном) режиме.

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


Основное отличие от «обычных» текстовых редакторов[править | править вики-текст]

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

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

Функциональность[править | править вики-текст]

Обзор: избранные улучшения vi[править | править вики-текст]

GVim

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

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

В редакторе Vim удалось объединить все наиболее значимые усовершенствования vi.

Справочная система Vim[править | править вики-текст]

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

Например, чтобы узнать, как написать собственный плагин для Vim достаточно набрать :help write-plugin.

Терминология[править | править вики-текст]

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

Режимы работы[править | править вики-текст]

Нормальный режим[править | править вики-текст]

Конечно же, подобных команд существует гораздо больше. Дело в том, что вам нужно изучить эти команды, чтобы использовать. Вы можете возразить, что, вероятно, не сможете выучить все эти команды, ведь существуют сотни различных команд перемещения, среди которых есть и простые, и достаточно хитроумные, и что уйдут недели тренировок на изучение всех этих команд. Что ж, вам и не нужно изучать их все. Вместо этого нужно разобраться в своём индивидуальном стиле редактирования и изучить только те команды, которые помогут сделать его более эффективным.[4]

Bram Moolenaar

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

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

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

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

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

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


Режим непосредственного редактирования текста[править | править вики-текст]

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

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

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

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


Режим командной строки[править | править вики-текст]

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

Визуальный режим[править | править вики-текст]

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

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

Автоматизация операций[править | править вики-текст]

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

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

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

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

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

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

История версий[править | править вики-текст]

Портируемость[править | править вики-текст]

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

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

Награды[править | править вики-текст]

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

Лицензия[править | править вики-текст]

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

Расширения Vim[править | править вики-текст]

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

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

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

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

Примечания[править | править вики-текст]

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]