ТехноСаратов → Блог

Что может VIM?БлогПрограммы

Multitoolbox — новый сайт от создателей этого поратала

VIM — один из наиболее популярных и функциональных текстовых редакторов. И, в мес… те с тем, — один из самых тяжелых в освоении. По этому, часто, запускать его снова и снова начинающего пользователя заставляют только лестные отзывы его приверженцев. Целью этого поста является как раз такое мотивирование начинающих vim юзеров( или еще пока не юзеров), к изучению инструмента настоящих лентяев профессионалов.

Vim может быть разным. Простым текстовым редактором, с аскетичным пользовательским интерфейсом, между тем представляя мощьные средства редактирования. Или же полноценной IDE, практически для любого популярного языка, с возможностью отладки кода, компилирования, подсветки синтаксиса, фолдинга участков кода, дополнения имен членов классов и множеством прочих функций о которых некоторые IDE не могут и мечтать. Именно по этому MSVS и Eclipse имеют специальные модули интеграции с vim.

Приятно и то, что при всем богатстве функционала vim всеже остается текстовым редактором. Чего, к сожалению, не скажешь о Emacs. Неназойливый командный интерфейс позволяет каждому использовать vim в меру своей продвинутости. И, на самом деле, это намного удобнее чем капаться в длинных многоуровневых меню и диалогах со множеством вкладок. Достаточно просто изучить те команды, которые тебе действительно необходимы в ежедневной работе и даже не вспоминать о тех которые никогда не понадобятся.

Однако, легко сказать — «набравшись опыта»… Не одна неделя потребовалась мне, чтобы заучить только самые основные команды: открытие, сохранение, копирование, вставка, поиск, замена и т.д. Сразу вспомнились первые шаги в компьютерном мире. Правда, тогда я не чувствовал себя таким идиотом как в этот раз. Только спустя пару месяцев, я почувствовал себя более-менее свободно в этом редакторе, а через полгода изоляции в vim даже начал находить его наиболее удобным и единственно правильным. И так, чтобы не потерять сути излагаемого, постараюсь быть последовательным.

По утверждениям разработчиков vi задумывался так, чтобы пользователю ненужно было убирать руки с основной клавиатуры, по этому большинство команд — это замысловатые последовательности буквенно-цифровых клавиш. Несколько адаптировавшись можно будет забыть о неприятном перемещении рук к клавишам дополнительной клавиатуры. Единственным неудобством здесь является постоянная потребность перехода между режимами работы по нажатию клавиши Esc. Но до Esc всеже легче дотянуться, чем до того же PgUp.

Первое что бросается в глаза — огромное количество команд для навигации по тексту и для его редактирования. Каждой из команд можно задать коэффициент повторения. Например, команда копирования одной строки в буфер обмена выглядит как ‘yy’, вызывая команду ‘y5y’ мы копируем пять строк в низ от текущей. Затем переходим в позицию вставки и нажимаем ‘p’. Это достаточно удобно для программистов, которым чаще нужно копировать именно целые строки, за одно они экономят время на выделении текста. Но это еще не все. На самом деле буфер обмена не один. Их много! Кроме, так называемого, безымянного буфера, в который происходит копирование по умолчанию есть еще именованные буферы. Чтобы их использовать в командах копирования и вставки нужно указывать их имя. По этому команды для буфера с именем ‘a’ выглядят, соответственно, как ‘«a6yy’ для копирования шести строк и ‘»ap’ для вставки (перед именем буфера ставится еще двойная кавычка). Самое главное здесь — запомнить что в каком буфере лежит 🙂 А теперь давайте представим, что мы правим html, и в каждом из буферов у нас лежит парочка тегов или целые шаблоны, и набирая что-то вроде ‘«ap’ мы получаем вставку !

Следующей замечательной особенностью vim является возможность применения регулярных выражений при поиске и замене участков текста. Например, чтобы найти все места в исходнике в которых создаются указатели определенного типа достаточно ввести команду ‘/type*.*=.*new.*;’. Под этот шаблон подойдут строки:

Если бы мы искали просто по строке ‘type*’, то нам бы пришлось в ручную отсеевать все приведения типов, описания параметров функций и т.п. Вообще к применению регулярных выражений очень сильно привыкаешь, действительно, удобнее и проще один раз правильно сформулировать мысль, чем вместо этого выполнять механическую работу по отсеиванию мусора.

Интересным фактом является и то, что vim позволяет вызывать внешние команды операционной системы, и даже пропускать через них выбранные участки редактируемого текста! Впервые увидев команду ‘6!!sort’, которая сортирует шесть строк с помощью внешнего фильтра sort я испытал настоящее прозрение. Ведь можно использовать такие мощьные утилиты как awk, sed… А может вы хотите зашифровать текст? Или пропустить его через англо-русский переводчик (здесь в конце)?

Кроме обычных средств редактирования, vim предоставляет и специальные инструменты для программистов. Например, не выходя из редактора можно отлаживать код с помощью gdb, использовать мощнейшее средство навигации по исходникам C, C++, Java, Perl — ctags, ну и конечно запускать сборку проекта командой ‘:!make’ или просто ‘:!gcc file.c’ (как, в прочем, и любую внешнюю программу). Собственно для любого языка можно собрать легкую IDE и прикрутить к ней свои программы. Примеров этого в интернете более чем достаточно.

Вот наверное на сегодня и все. Многие из возможостей остались »за кадром». Это управление окнами и вкладками, проверка правописания, возможность работы с разными кодировками (в том числе UTF-8). Всех функций vim так много, что даже упомянуть о них в одной статье невозможно. Но думаю цели, поставленные перед написанием статьи, я достиг, и заинтересовал тех кто еще не знаком с vim. Передал им, как говорится, вектор и ускорение, которого должно хватить до того момента, когда vim из средства пытки превратиться в лучшего друга.

Ссылки на дополнительную информацию:
www.opennet.ru/docs… — небольшой сборник документации по vim и vi
www.vim.org — официальный сайт проекта Vim