|
- И.Яловой, 04/2003, ar2.mksat.net -
Оглавление:
Вступление
1. Достоинства
2. Основные
принципы работы
3. Чтение файла,
сохранение, выход из программы
4. Навигация по
тексту
5.
Редактирование
6. Удаление,
копирование, вставка - работа с регистрами
7. Работа с
несколькими файлами и "окнами"
8. Поиск,
замена
9. Русские
кодировки
10. Макросы
11. Группировка
текста
12. Режим быстрой
отладки
13. Параметры,
которые полезно знать и настраивать
Заключение
Вступление
Необходимость
использовать текстовый редактор (ТР) возникает достаточно часто -
особенно у пользователя систем, подобных UNIX. Поэтому каждый
стремится подобрать себе редактор по вкусу. Начнем с того, что их
огромное количество, и даже под Linux их уже написано достаточно
много. Среди них есть очень достойные кандидаты на звание лучшего, но
...
Оставив философский
аспект выбора ТР, я просто изложу в краткой форме, как выбирал я сам.
Прежде всего, мне нужен был быстрый и небольшой редактор, с
подсветкой синтаксиса, макросами и возможностью оперативно выполнять
команды, не выходя из редактора, ну такие как make и др. Найти такой
редактор не так уж просто! Под MSDos я
пользовался qedit, который имел только два достоинства - он был очень
маленького размера и грузился мгновенно даже на машинах, которые
уступают по быстродействию современным калькуляторам. На Amiga я
пользовался CED, который умел все, кроме подсветки синтаксиса. Потом,
правда, появился ProgEdit, но он был уж очень неповоротлив и работал
со скоростью тормознутого текстового процессора. Он у меня не
прижился. Когда я вернулся на PC (После Amiga
я более-менее комфортно смог себя чувствовать только на Pentium II)
то долго перебирал различные редакторы и остановился на Aditor. На
мой взгляд, это лучший ТР на этой платформе. Он вполне может
удовлетворить требования широких масс, оставаясь быстрым и
малогабаритным. Собственно я еще не встречал ни одного человека,
который бы поспорил со мной по этому вопросу. Затем началась гонка
производителей железа и программного обеспечения, намек, я думаю,
достаточно прозрачный. Меня как-то не слишком привлекала перспектива
перманентного апгрейда и изучения новых творений софтверного гиганта.
Поэтому я начал искать альтернативы. Мои впечатления о Linux
подробно изложены в другом документе и здесь я не буду касаться этой
темы. Скажу только, что я стал пытаться переползти на Linux.
Подобная миграция,
конечно, вызвала массу проблем. Главная из них - это то
обстоятельство, что при всем нежелании существует объективная
необходимость работать в обеих операционных системах и, что еще хуже,
- держать их обе на одной машине. Вторая проблема - это возрастающее
количество программного обеспечения, подлежащего изучению.
О том, что VIM существует
на многих платформах, я знал еще со времен Amiga.
Более того, я слышал восхищенные отзывы от людей, деяния и авторитет
которых вызывает глубокое уважение. Конечно, я решил попробовать.
От первого знакомства
осталось только чувство недоумения и полной растерянности. То ли людей
я не понял, то ль я сам ... То есть, попытка запустить и
"поредактировать" окончилась сокрушительным фиаско. И если
версию с графическим интерфейсом еще можно было кое-как использовать
благодаря иконкам и меню, то текстовая версия просто повергала меня в
полное уныние.
Прошло некоторое время, и
я нашел краткий справочник на русском языке по использованию Vi
(прародителя VIM). Почитал и понял, что эта программа не для
нормального человека, а исключительно для маньяков. Сейчас мне смешно
вспоминать - справочник занимал неполных четыре страницы крупным
шрифтом! Я решил, что по доброй воле я больше не вернусь к этому
редактору.
Изменить своему решению
меня заставили два обстоятельства:
первое - я хотел иметь
под Linux и Windows один редактор;
второе - меня мучило
чувство собственной неполноценности, люди, мол пользуются и довольны
- нахвалиться не могут, а я даже сохранить документ толком не смог, о
каких-то манипуляциях с текстом я вообще молчу!
Я решительно взялся за
документацию, которая поставляется вместе с VIM. Вот тут меня ждал
сюрприз - объем этой документации. Он поистине необъятный. То есть
посидеть вечерок - разобраться в принципе невозможно!
Последняя моя попытка
произошла совершенно случайно - нечем было заняться, и я решил
распечатать и внимательно прочитать руководство по VIM. Потратив день
на чтение и эксперименты, я понял, что им можно таки редактировать
текст!!!
С того времени прошел
год, и я, практически, пользуюсь только этим редактором. Должен
признать, что он достоин того, чтобы потратить время на его изучение.
Скажу честно, что каждый раз, когда я заглядываю в документацию, то
нахожу новые полезные функции и возможности.
В чем же заключается
проблема, которая мешала мне сразу освоить этот редактор? Проблемы
две - одна заключена во мне, а вторая заключается в том, что VIM
принципиально отличается по своей идеологии от "традиционных"
редакторов.
Я глубоко уважаю и
высказываю свое почтение людям, которые самостоятельно его освоили и
используют, значительно увеличив свою личную производительность, а
тем, кому это не удалось, но и желание не пропало, я рекомендую
ознакомиться с этим документом.
Я искренне желаю вам
успеха в освоении этого замечательного редактора и постараюсь помочь,
дав базовые знания и весь арсенал, необходимый для начала полноценной
работы.
Авторские права
Авторские права
принадлежат Яловому Илье Викторовичу © 2003. Этот документ может
распространятся и изменяться в соответствии с требованиями GNU
General Public License. Копия GPL доступна по адресу
http://www.gnu.org/copyleft/gpl.html
1. Достоинства
Прежде всего, отмечу, что
этот редактор отвечает всем требованиям, перечисленным ранее.
Спорными можно назвать только его размер и скорость работы. Не
пугайтесь! Занимает он вполне приемлемо и достаточно быстро работает.
Но, честно говоря, эти параметры находятся очень близко от грани.
Aditor занимает раза в 3 меньше и намного быстрее. Но я перестал
беспокоиться по этому поводу, когда посмотрел файлы конфигурации
подсветки синтаксиса! VIM - работает с синтаксисом значительно
серьезнее, да и вообще когда начинаешь понимать его реальную мощь, то
отпадают всякие сомнения.
Чтобы в полной мере
оценить этот редактор с ним надо поработать. И именно здесь закопана
собака!
Чтобы в полной мере
оценить этот редактор с ним надо поработать ПРОФЕССИОНАЛЬНО. Тем не
менее, постараюсь кратко сформулировать основные положительные
аспекты:
мощнейшая система подсветки
синтаксиса;
интеллектуальное форматирование при
наборе исходных текстов программ;
невероятная гибкость (очень похоже на
теле рекламу, но с ним действительно можно творить чудеса в плане
конфигурации и настройки под конкретного пользователя или конкретные
задачи);
различные возможности автоматизации
набора и редактирования текста, включая макросы;
возможность выполнения команд
операционной системы;
возможность одновременной работы с
несколькими документами;
расширенные возможности по отладке
программ (настраиваемая система разбора файла с ошибками
компиляции);
очень удобные функции при
редактировании текста;
наличие нескольких буферов обмена
(регистров);
очень серьезная система поиска (от
очень простого и быстрого, до сложного - с использованием регулярных
выражений во всей их красе).
Перечислять можно долго,
но оценить вы это сможете, только СЕРЬЕЗНО пощупав собственными
руками.
2. Основные
принципы работы
Как я уже говорил,
работать с VIM можно, только понимая его идеологию. Чем же он
отличается от "обычных" редакторов?
Далее постараюсь быть
лаконичным и исключить лирику для лучшего восприятия материала - уж очень это серьезное дело. Текстовый редактор VIM может находиться
в одном из трех состояний (В скобках указаны оригинальные английские
названия):
Режим ввода команд (NORMAL).
Режим редактирования (INSERT).
Режим выделения текста (VISUAL).
Существуют еще режим
совместимый с VI - он нас не интересует, и режим выделения текста
эмулирующий поведение обычных редакторов под Windows
- Select, но при этом мы теряем больше, чем находим, и я его
рассматривать не буду.
Рассмотрим подробнее
каждое состояние редактора. Каждое состояние соответствует
определенному режиму работы, предназначенному для выполнения
определенных операций.
-
NORMAL:
В этом режиме выполняются
различные команды, такие как чтение-запись файлов, изменение
параметров редактора и др.
-
INSERT:
В этом режиме
осуществляется вставка текста и непосредственное редактирование.
-
VISUAL:
В этом режиме можно
выделять текст для последующих манипуляций, таких как удаление,
перемещение по листу, копирование в один из регистров изменение
форматирования и др.
Имея три основных режима
работы, мы должны оперативно между ними переключаться. Основным
режимом принято считать режим NORMAL.
Поэтому все переходы осуществляются через него.
|
Переход
|
Команда
|
Комментарий
|
|
Из
режима
|
В
режим
|
|
NORMAL
|
INSERT
|
i или
"Insert"
|
Кнопка клавиатуры "Insert"
кроме того переключает режимы вставки - замены.
|
|
INSERT
|
a
|
Вставка текста после символа,
подсвеченного курсором
|
|
INSERT
|
o
|
Вставка новой строки после
курсора с переходом в режим INSERT
|
|
INSERT
|
O
|
Вставка новой строки перед
курсора с переходом в режим INSERT
|
|
INSERT
|
cc, S
|
Очистка строки и переход в
режим INSERT
|
|
INSERT
|
C
|
Удалить правую часть строки и
переход в режим INSERT
|
|
INSERT
|
s
|
Удалить подсвеченный символ и
переход в режим INSERT
|
|
VISUAL
|
v
|
Режим выделения текста (с
точностью до знака)
|
|
VISUAL
|
V
|
Режим выделения текста (с
точностью до строки)
|
|
VISUAL
|
Ctrl+V (Ctrl+Q)
|
Режим выделения прямоугольной
области текста, следует отметить, сто комбинация клавиш Ctrl+V
в Windows используется для вставки
текста из буфера, поэтому вместо нее следует использовать
альтернативный вариант Ctrl+Q.
|
|
VISUAL
|
gv
|
Возврат к области, выделенной
в прошлый раз.
|
|
NORMAL или
INSERT
|
VISUAL
|
<LeftMouse>
|
Прекращает выделение или
начинает новое
|
|
VISUAL
|
<RightMouse>
|
Продолжает выделять область
|
|
INSERT
|
NORMAL
|
ESC
|
Выход в режим NORMAL
|
|
NORMAL
|
Ctrl+O
|
Кратковременный выход в режим
NORMAL для выполнения одной команды,
после чего осуществляется автоматический возврат в режим INSERT
|
|
VISUAL
|
NORMAL
|
Ctrl+c, v, V,...
|
Вернуться в NORMAL
можно повторив ту комбинацию, с помощью которой вы вошли в
VISUAL. При этом не будет выполнено
никаких действий над выделенной областью. Любая команда которая
совершается над выделенной областью также переводит редактор в
режим NORMAL, но подробно эти операции
будут рассмотрены позже.
|
Далее я буду
рассматривать как выполняются те операции, к которым мы привыкли,
используя "традиционный" ТР с графическим интерфейсом (если
кто помнит, то были строчные и экранные редакторы, так вот VIM,
на мой взгляд, ближе к строчным). VIM имеет
множество команд типа "удалить 10 слов от текущего положения
курсора" или "перейти на 4 слова влево". Глупо
говорить, что такие команды не нужны, просто современный рядовой
пользователь не привык к таким командам - его орудие мышка. И
вот как раз такому человеку будет интересно (надеюсь) прочитать
далее, как можно выполнять привычные для него действия в таком
своеобразном редакторе.
3. Чтение файла, сохранение, выход из программы
Итак, самые главные
операции, которые необходимы любому ТР. Общая идея заключается в том,
что VIM имеет некий набор буферов и
экранов. Буфер - это собственно файл (не совсем корректно, но в
первом приближении сойдет), а экран это то окно, в котором
отображается буфер.
Все операции по работе с
файлами, буферами и экранами осуществляются из режима NORMAL.
:edit
- чтение файла и большинство вариаций на эту тему
осуществляется с помощью этой команды. Общий формат команды имеет вид
(здесь и далее в квадратные скобки заключаются необязательные
элементы):
:e[dit][!]
[++opt] [+cmd]
[Имя файла]
где
|
++opt
- это параметр позволяющий изменить значения fileformat и
fileencoding, персонально для открываемого файла. Могут быть
полезны следующие варианты:
|
|
++enc=koi8-r
|
устанавливает кодировку
открываемого файла
|
|
++enc=koi8-u
|
|
|
++enc=cp1251
|
|
|
++enc=latin1
|
|
|
++ff=unix
|
строки заканчиваются символом
<NL>
|
|
++ff=dos
|
строки заканчиваются символом
<CR><NL>
|
|
++ff=mac
|
строки заканчиваются символом
<CR>
|
|
+cmd
- параметр позволяющий указать положение курсора для
открываемого файла или выполнить другую команду.
|
Вопрос работы с
различными русскими кодировками рассмотрен подробнее в
соответствующем разделе.
Возможные варианты
сохранения файла показаны в таблице:
|
Команда
|
Описание
|
|
NORMAL
|
|
:w[rite]
|
Сохранить текущий буфер
|
|
:w!
|
Сохранить текущий буфер не
взирая на атрибут "только для чтения"
|
|
:sav[eas][!] {file}
|
Сохранить буфер под новым
именем, имя текущего буфера тоже меняется. Предыдущее имя
используется как альтернативное. Флаг "!" необходим
для записи поверх существующего файла.
|
|
:wa[ll]
|
Сохранить все содержимое всех
буферов, котрые были изменены
|
|
:wq[!]
|
Сохранение файла и выход из
программы
|
Вопрос работы с
различными русскими кодировками рассмотрен подробнее в
соответствующем разделе.
:q[uit]
- обеспечивает выход из программы. Если один из открытых файлов
был изменен и не сохранен, то для выхода из программы необходимо
использовать :q! или предварительно
сохранить все файлы.
4. Навигация по тексту
Для эффективного
редактирования текста мы должны иметь возможность перемещаться по
нему в любом направлении и к любому его фрагменту. VIM
имеет для этого потрясающие и очень разноплановые возможности. Начнем
с простого. для перемещения курсора традиционно используются
следующие клавиши (только режим NORMAL):
'h' - влево, 'j'
- вниз, 'k' - вверх, 'l'
- вправо.
Такой подход обеспечивает
максимальную скорость, для людей владеющих "слепой печатью",
так как избавляет их от необходимости убирать руки от основной
клавиатуры. Для людей владеющих "однопальцевой печатью" в
последних версиях VIM добавлена возможность
перемещения по файлу с помощью традиционных клавиш как в режиме
NORMAL, так и в
режиме INSERT.
Но такие манипуляции далеко не предел возможностей VIM.
Далее привожу сводную таблицу соответствующих команд. Надо заметить,
что VIM поддерживает технологию подобную
гиперссылкам.
|
Команда
|
Описание
|
|
Общие
|
|
<HOME>
|
Переход в начало строки
|
|
<END>
|
Переход в конец строки
|
|
NORMAL
|
|
f{символ}
|
Поиск указанного символа в
текущей строке вправо
|
|
F{символ}
|
Поиск указанного символа в
текущей строке влево
|
|
%
|
Переход к парной скобке - очень удобно при написании программ на С/С++, Lisp
|
|
{nn}G
или
{nn}gg
|
Переход к строке nn,
если номер строки не указан, то G - переход в конец, а gg - в начало
документа. Эта функция очень помогает при отладке программ,
однако VIM имеет специальный
инструментарий для создания удобной среды разработки. Этот вопрос
рассмотрен далее
|
|
CTRL+O
|
Возврат на предыдущую позицию
(при переходах по документам с помощью меток, именованных меток,
ссылок или с помощью команд gg и G)
|
|
CTRL+I
|
Команда обратная по действию
CTRL+O.
Подробнее смотрите описание использования меток.
|
|
*
|
Переход на следующее слово,
аналогичное подсвеченному курсором. (Поиск слова, на котором в
данный момент стоит курсор, далее по тексту)
|
|
#
|
Аналогична предыдущему, но в
обратном направлении
|
|
)
|
Переход на начало следующего
предложения
|
|
(
|
Переход на начало предыдущего
предложения
|
|
}
|
Переход на начало следующего
параграфа
|
|
{
|
Переход на начало предыдущего
параграфа
|
|
[m
|
Переход назад к началу
описания метода (Java)
|
|
[M
|
Переход назад к концу
описания метода (Java)
|
|
]m
|
Переход вперед к началу
описания метода (Java)
|
|
]M
|
Переход вперед к концу
описания метода (Java)
|
|
[*
|
Переход назад к началу блока
коментария (/*)
|
|
]*
|
Переход вперед к концу блока
коментария (*/)
|
|
CTRL+]
|
Переход по ссылке
|
|
INSERT
|
Очень полезными могут
оказаться именованные метки, особенно, когда приходится вносить
изменения в нескольких частях одного документа. Для работы с
именованными метками используются следующие команды:
|
Команда
|
Описание
|
|
NORMAL
|
|
m{имя}
|
Установить метку с именем
{имя}. Именем метки может быть любая (одна) буква
|
|
'{имя}
|
Переход к строке с указанной
меткой
|
|
`{имя}
|
Переход в конкретное место
(строка и столбец) помеченное меткой
|
|
:marks
|
Показать все определенные
метки
|
Кроме определяемых
пользователем, имеются также предопределенные метки:
|
Метка
|
Описание
|
|
'
|
Позиция курсора до
перемещения (метка, ссылка, поиск ...)
|
|
"
|
Позиция курсора во время
последнего редактирования
|
|
[
|
Начало последнего изменения
|
|
]
|
Конец последнего изменения
|
5. Редактирование
Под редактированием я
понимаю различные манипуляции над текстом и его форматированием.
Соответственно для каждого из режима доступны различные команды. В
режиме VISUAL осуществляются изменения
выделенного участка текста. В режиме NORMAL
в качестве обьекта редактирования выступает текущая строка, слово или
символ. Корректура собственно текста осуществляется непосредственно в
режиме INSERT, в котором вы можите
добавлять новые символы, удалять или заменять старые. Естественно, и
ввод текста осуществляется в этом режиме.
|
Команда
|
Описание
|
|
VISUAL
|
|
~
|
Изменить регистр выделенного
фрагмента текста
|
|
c [x]
|
Удалить выделенный участок в
регистр "x" и перейти в режим вставки
|
|
>
|
Сдвинуть выделенный фрагмент
вправо
|
|
<
|
Сдвинуть выделенный фрагмент
влево
|
|
!
|
Отфильтровать выделенные
строки с помощью внешней программы
|
|
NORMAL
|
|
<DEL>, x
|
Удалить символ правее курсора
|
|
X
|
Удалить символ левее курсора
|
|
dd
|
Удалить текущую строку
|
|
u
|
Отмена последнего действия
|
|
CTRL-R
|
Вернуть исправления
|
|
D
|
Удалить до конца строки
|
|
.
|
Повторить последнее действие
|
|
r
|
Заменить символ подсвеченный
курсором
|
|
~
|
Поменять регистр символа под
курсором
|
|
INSERT
|
|
<CTRL> + A
|
Вставляет тект, который был
введен в прошлый insert-сеанс
|
|
<CTRL> + W
|
Удаляет предыдущее слово
|
|
<DEL>
|
Удаляет следующий символ
|
|
<CTRL> + N
|
Автоматическое завершение
слова с поиском вперед по тексту
|
|
<CTRL> + P
|
Автоматическое завершение
слова с поиском назад по тексту
|
|
<CTRL> + T
|
Вставить табуляцию в начало
текущей строки
|
|
<CTRL> + D
|
Удалить табуляцию из начала
текущей строки
|
|
<CTRL> + Q
|
Вставляет символ, код которого
следует за нажатием комбинации.
|
|
<CTRL> + X
|
Переходит в дополнительный
режим, в котором вы можите выполнять автозавершение или другие
полезные действия. Подробнее этот режим рассмотрен далее.
|
|
<CTRL> + E
|
Вставляет символ, который
находится в той же позиции, что и курсор, но ниже.
|
|
<CTRL> + Y
|
Вставляет символ, который
находится в той же позиции, что и курсор, но выше.
|
Особый интерес
представляет дополнительный режим, в который можно перейти из режима
INSERT, нажав комбинацию клавиш <CTRL>
+ X. Чтобы выполнить требуемое действие вам необходимо выбрать
одну из следующих комбинаций:
|
Комбинация
|
Описание
|
|
<CTRL> + E
|
Сдвиг окна на одну строку
вверх (курсор остается на месте)
|
|
<CTRL> + Y
|
Сдвиг окна на одну строку
вниз (курсор остается на месте)
|
|
<CTRL> + L
|
Автоматическое завершение
целой строки с поиском в обратном направлении.
|
|
<CTRL> + K
|
Автоматическое завершение
слова из файла, указанного в параметре 'dictionary'
|
|
<CTRL> + T
|
Автоматическое завершение
слова из файла, указанного в параметре 'thesaurus'. Пример
использования данной команды рассмотрен далее.
|
|
<CTRL> + I
|
Автоматическое завершение
слова с поиском в текущем файле и всех подключаемых файлах.
|
|
<CTRL> + ]
|
Автоматическое завершение
тэгов
|
|
<CTRL> + F
|
Автоматическое завершение
имени файла
|
Особое внимание
заслуживает комманда <CTRL> + T. Она
представляет собой поиск в словаре. Рассмотрим пример использования
этой команды. Допустим файл словаря содержит следующую строку:
великолепный
замечательный прекрасный отличный превосходный
Если
вы наберете великол
и нажмете комбинацию <CTRL>
+ T, то будет
вставлено слово великолепный.
Последующие нажатия этой комбинации будут вставлять следующие слова
соответственно: замечательный,
прекрасный, отличный, превосходный.
Способов
применения этой команды может быть множество, от подбора синонимов до
организации удобной работы со словарём (при переводе).
|