Путь к VIM. Часть 2 |
Оглавление:Вступление 6. Удаление, копирование, вставка - работа с регистрамиНе смотря на то, что команды автоматического завершения часто избавляют нас от необходимости копировать и вставлять текст, тем не менее необходимость таких операций остается. Копирование и удаление фрагментов текста выполняются в режиме VISUAL. Исключение составляю команды удаления целого слова или строки, так как в этом случае границы фрагмента очевидны исходя из положения курсора. Следует отметить, что в отличии от большинства текстовых редакторов, использующих системный буфер, VIM имеет обширный набор собственных буферов (регистров). Другими словами у вас есть возможность иметь одновременно скопированными несколько фрагментов текста. В том числе операции удаления, копируют удаленный фрагмент в специальный регистр.
По скольку при копировании и вставке фрагментов текста мы активно используем регистры, то давайте остановимся на них подробней. VIM поддерживает следующие виды регистров:
Безымянный регистр используется при всех операциях копирования или удаления, если только в качестве целевого регистра не указана "Черная дыра". В последнем случае удаленный фрагмент не копируется ни в дин из регистров. Если при вставке текста не указан регистр-источник, то в качестве источника используется безымянный регистр. Если в качестве целевого регистра при копировании указать безымянный регистр, то запись осуществляется в регистр "0. Нумерованные регистры заполняются скопированными или удаленными фрагментами текста. При этом регистр "0 содержит последний скопированный фрагмент, если не было указано целевого регистра. Регистр "1 содержит последний удаленный фрагмент, если только не было указано другого регистра и если удаленный фрагмент содержит более одной строки текста. При удалении фрагментов размером менее строки, он копируется в регистр "-. При каждом успешном удалении фрагмент из регистра "1 переносится в регистр "2, из "2 в "3 и так далее. Содержимое регистра "9 безвозвратно теряется. Именованные регистры записываются только по прямому указанию пользователя. При этом если указывается строчная буква, то фрагмент будет перезаписан, а если заглавная, то фрагмент будет добавлен. Назначение остальных регистров очевидно по названию и указано в таблице Специальные регистры:
7. Работа с несколькими файлами и "окнами"Конечно VIM позволяет работать с несколькими файлами одновременно. Я не буду подробно описывать все механизмы связанные с этой темой, а рассмотрю только наиболее полезные и простые операции. Каждый открытый файл может либо отображаться, либо быть скрытым. Мы пропустим описание скрытых файлов, так как чаще всего встречается ситуация, когда необходимо именно отображать несколько файлов. Для этого мы должны рабочее окно разделить на два. По умолчанию в новое окно грузится тот же файл. Это может быть полезно, если необходимо иметь визуальный доступ к нескольким частям одного и того же документа. Однако вы можите в одно из окон загрузить новый файл. Интересной особенностью является то, что рабочее окно может быть разделено по вертикали или по горизонтали.
8. Поиск, заменаVIM имеет очень мощные средства для поиска и замены текста. Эти механизмы основаны на так называемых регулярных выражениях. Если читатель знаком с этой технологией, то мои объяснения будут излишни, если нет - то это тема для отдельной статьи. Рассмотри наиболее употребимые варианты. Простой поиск осуществляется с помощью команды "/" или "?" в нормальном режиме для поиска вперед или назад по тексту соответственно. После символа команды необходимо указать шаблон для поиска. Для повторного поиска необходимо нажать соответствующую команду (без шаблона). Удобной особенностью поиска является автоматическая подсветка найденных слов. Кроме этого, есть очень удобная функция поиска слова на которое указывает курсор. Для этого необходимо в нормальном режиме установит курсор на требуемое слов и нажать # или * для поиска назад или вперед соответственно. Для замены дного фрагмента текста (шаблон) на другой (новый текст) необходимо использовать следующую форму записи команды: [range]s/шаблон/новый текст/[i][g][c] где [range] - указывает где именно необходимо осуществить операцию замены. Возможны следующие варианты этого параметра: % - весь текст, 1 - первая строка, . - текущая строка, $ - последняя строка, .,$ - от текущей строки и до конца файла, и так далее. Параметры в конце команды определяют ее поведение следующим образом: i - игнорировать регистр, g - заменять все слова в строке, иначе заменяется только первое найденное слово, c - подтверждать каждую замену. Если вы вызвали команду замены из режима VISUAL, и опустили первый параметр, то замена будет осуществляться только в выделенной области. 9. Русские кодировкиОдной из проблем, с которой можно встретиться при редактировании документов, содержащих русский текст, является используемая кодировка. Для русского текста широко используются три основные кодировки (реально их больше, но остальные постепенно уходят в прошлое): Dos (альтернативная кодировка 866), Win (cp1251), Koi8-ru (Основная кодировка, используемая в семействе операционных систем Unix). Даже эти несколько разновидностей могут доставить значительно неудобствое в работе. Как вы уже догадались Vim поддерживает работу с различными кодировками. Более того, он поддерживает двухбайтную кодировку и различные направления письма. Хотя для нас это не играет особой роли. Для поддержки различных кодировок необходимо добавить библиотеку iconv.dll (Для работы в Windows), которая распространяется отдельно. В современных дистрибутивах Linux все необходимое уже есть изначально. За формат текстового документа отвечают два основных параметра: fileformat и fileencoding. Первый параметр определяет способ формирования строк в документе. Он может принимать следующие значения: dos (конец строки обозначается парой кодов <CR><NL>), unix (<NL>), mac (<CR>). Второй параметр определяет собственно кодировку. Она может принимать множество значений, но нас интересуют только несколько : koi8-r, koi8-u, 866, cp1251 и др. Эти параметры можно установить для редактора глобально, при открытии файла, локально для буфера или для уже открытого файла. Как это все работает рассмотрим на примере. Допустим, у нас есть некий файл "dos.txt". Он набран в MS Dos в соответствующей кодировке. Но мы этого не знаем и пытаемся открыть его на редактирование в ОС Linux. Для этого мы выполняем команду :e dos.txt. Файл открывается, и его формат распознан автоматически, о чем свидетельствует пометка [dos] в строке статуса, но кодировка к сожалению не распознана, в результате чего мы наблюдаем на экране абракадабру. Однако отобразить этот файл в нормальном виде не составит труда. Необходимо набрать команду :e ++enc=866, при этом русские буквы примут свой обычный вид, а строка статуса дополнится пометкой [converted]. Теперь мы можем работать с этим файлом без проблем. При сохранении его формат сохранится. Но если мы хотим преобразовать его в более удобный для нас формат, то достаточно набрать :set fenc=koi8-r и пометки в строке статуса исчезнут, а сохраненный файл будет в нашем выбранном формате и кодировке. Работа непосредственно с командами может показаться неудобной. И с этим можно согласиться, но если вы планируете часто выполнять подобные операции, то ничего не стоит добавить эти операции в графическое меню или назначить им горячие клавиши. 10. МакросыVIM имеет очень мощные средства автоматизации работы. Для выполнения рутинных операций в текущем или группе файлов имеется встроенный язык. Этот язык достаточно функционален. Есть готовые решения создающие на базе VIM дневник с календарем или даже игру (Тетрис). Однако, описание встроенного языка выходит далеко за рамки данного труда и уж никак не относится к простым приемам редактирования. Этот раздел добавлен с единственной целью немного приоткрыть штору скрывающую внутреннюю мощь этого текстового редактора. Есть и более простой способ для повторения простых действий - линейный алгоритм, без ветвлений. Этот так называемые "сложные повторения" или "записи". Эти макросы записываются непосредственно в именованные регистры. Для начала записи необходимо в режиме NORMAL нажать "q" и имя того регистра, в который необходимо осуществить запись. Окончание записи осуществляется повторным нажатием "q". Для повтора записанных действий в режиме NORMAL используется команда "@" + имя регистра, а в режиме INSERT - <CTRL>+R + имя регистра. Есть еще один метод быстрой подстановки фиксированных слов (словосочетаний или даже целых выражений). Этот метод использует так называемые аббревиатуры. Для описания своей аббревиатуры необходимо выполнить команду :iabbrev за которой следует аббревиатура и ее расшифровка соответственно. Пример: :iabbrev M$ Microsoft. После выполнения этой команды, если вы введете M$ с последующим пробелом, то автоматически будет подставлена соответствующая расшифровка "Microsoft". 11. Группировка текстаИ на последок я оставил самый, на мой взгляд, вкусный кусок. Особенно он понравится программистам. Думаю вам случалось писать объемные программы с множеством функций. Хорошим стилем считается группировка этих функций по отдельным файлам (классам при использовании ООП). Однако и в каждом файле может оказаться значительное количество кода. Навигация по этому файлу может быть затруднена. Не смотря на то, что VIM и без того имеет команды, позволяющие быстро отыскать нужную функцию или ее описание, в него еще встроена возможность временно скрывать часть текста, оставляя тем самым заголовки функций на виду и убирая непосредственно реализацию. При необходимости каждый (или все) фрагмент может быть открыт, отредактирован и закрыт. Такой подход делает программу более обозримой и удобной для восприятия. Группировка может быть осуществлена одним из следующих способов:
Рассмотри только первый способ группировки. Группировки, созданные вручную теряются при закрытии файла. Чтобы их сохранить необходимо выполнить команду :mkview. Восстановление сохраненных группировок осуществляется с помощью команды :loadview. Другие команды для работы со сгруппированным текстом приведены в таблице:
12. Режим быстрой отладкиVIM поддерживает специальный режим работы ускоряющий цикл "редактирование - компиляция - редактирование". Суть его заключается в том, что сообщения (ошибки и предостережения), генерируемые компилятором, сохраняются в файл и используются редактором, для быстрого перехода к месту возникновения ошибки. Используя этот режим вы получаете по сути удобную среду разработки не привязанную к конкретному языку и платформе. Для работы в режиме быстрой отладки могут быть полезны следующие команды:
Важной деталью работы в этом режиме является распознание формата файла ошибок. Очевидно, что различные компиляторы генерируют их поразному. Более того, в некоторых из них, этот формат можно задавать или выбирать. Для работы с конкретным компилятором необходимо настроить систему разбора файла с ошибками. Делается это с помощью команды :compiler {название}. По сути, при выполнении этой команды запускается скрипт, который настраивает параметры VIM на работу с указанным компилятором. Эти параметры можно легко настроить и вручную или написать свой скрипт. 13. Параметры, которые полезно знать и настраиватьУстановка параметров осуществляется командой :set. Она имеет следующие варианты исполнения:
ЗаключениеЯ очень надеюсь, что этот документ оказался вам полезен, и вы узнали из него что-то новое. Для людей, которые только познакомились с VIM, хочу заметить, что перечисленные и описанные здесь возможности - это только вершина айсберга. Действительно, VIM таит в себе огромную мощь. На его основе программист может легко организовать удобную среду разработки. Несмотря на то, что в среде профессиональных программистов, особенно *nix - ориентированных, этот редактор высоко оценен, я хотел бы привести еще несколько доводов в его пользу. Общественное признание VIM еще выражается и в том, что такие ведущие, в своих областях, интегрированные среды разработки как MSVisualStudio и KDevelop имеют возможность интеграции с VIM. На мой взгляд, это достаточно серьезный довод! Тем не менее, этот документ далек от идеала, ему не хватает примеров, не освещены очень многие варианты применения VIM. Возможно, в нём содержатся некоторые ошибки - как грамматические, так и смысловые. То есть, это - не готовый продукт, а только первая версия. Поэтому я надеюсь, что заинтересованные люди примут участие в редактировании и дополнении данного документа. Ваши замечания и благодарности :-) можете отсылать по адресу i_yalovoy@mail.ru. |