Изучение vi по шпаргалке
1. Начало начал
Введение
Этот учебник покажет Вам как использовать мощный экранный
редактор vi. Это руководство разработано так, чтобы Вы стали искусным
пользователем vi без затрат огромного количества времени, используя специальный
ускоренный "шпаргалочный" метод. Здесь Вы узнаете как перемещаться по тексту,
редактировать текст, использовать добавление, копирование и вставку текста, а также
важные расширения vim, такие как экранный режим и многооконное редактирование.
Если Вы вообще не умеете пользоваться vi, или считаете его неудобным,
то Вам стоит уделить внимание этому учебнику, чтобы овладеть одной из наиболее
популярных и мощных программ экранного редактирования для Linux/UNIX.
Об этом учебнике
Одна мелочь делает изучение vi утомительным -- у vi множество команд.
Чтобы эффективно использовать vi, Вам нужно запомнить достаточно много.
Это может занять уйму времени, и потому одна из задач этого учебника -- не
допустить его растранжиривания. Для начала, давайте разберемся -- каким конкретно
способом я смогу помочь Вам запомнить эту кучу команд за кратчайшее время?
Чтобы справиться с этой задачей, мы вместе, читая учебник, постепенно
составим шпаргалку. На этой шпаргалке будут записаны все важные команды vi. После
завершения этого учебника Вы сможете обратиться к шпаргалке, если забудете какую-то
команду. Позднее, запоминая команды, Вы постепенно станете все меньше и меньше
зависеть от шпаргалки. Используя шпаргалочною технику, выучить, как пользоваться vi,
Вы сможете быстрее, чем когда бы то ни было ранее!
Процесс обучения
В этом учебнике используются несколько приемов для облегчения изучения.
Во-первых, описывается как работает какая-либо команда. Затем Вам следует проверить
работу этой команды на практике в редакторе. После этого нужно записать команду
на шпаргалке (для последующих обращений). Если Вы хотите изучить vi быстро, то важно
проделать все эти шаги. Проверка команды в редакторе и запись команды на шпаргалку
помогают запомнить команду.
Позвольте представить -- vim
Существует множество версий vi, я представлю Вам версию vi называемую "vim".
vim очень популярен, так как у него есть несколько дополнений, делающих vi немного приятнее
(когда будут демонстрироваться специфичные для vim команды, я это отмечу). Если Вам
нужно установить vim, Вы можете получить его на
http://www.vim.org.
В придачу к улучшенному консольному vi, vim доступен также в виде gvim --
прекрасного графического редактора, который может быть сконфигурирован для использования
с великолепной библиотекой gui (графического интерфейса пользователя) GTK+. Здесь приведена
картинка gvim из моей системы. (см. прим. переводчика)
Figure 1.1: Так выглядит gVIM |
 |
Если vi Вам в новинку, попробуйте установить в своей системе gvim. Использование
vi в графической оболочке может кое в чем облегчить новичкам жизнь.
2. Первые Шаги
Открываем файл
Перед использование vi для редактирования файлов Вам следует
узнать, как в vi перемещаться по файлу. У vi множество команд перемещения,
многие из них мы сейчас рассмотрим. Для этой части обучения найдите
какой-нибудь малоценный текстовый файл (TODO: лучше на английском)
и загрузите его в vi напечатав:
Code listing 2.1 |
$ vi myfile.txt
|
Если у Вас установлен vim, напечатайте vim myfile.txt.
Если Вы предпочитаете использовать gvim, наберите gvim myfile.txt.
myfile.txt должно быть именем текстового файла в Вашей системе.
Внутри vi
После загрузки vi, на экране Вы должны увидеть часть загруженного Вами
текстового файла. Поздравляю -- Вы уже в vi! В отличии от большинства редакторов,
загрузившись, vi находится в специальном режиме, называемом "командным режимом".
Это значит, что если вы нажмете клавишу "l"(строчная L), вместо появления "l"
на месте курсора Вы увидите, что курсор всего лишь сдвинулся на один символ вправо.
В командном режиме знаки, набираемые на клавиатуре, используются как команды
для vi, а не как помещаемые в текст символы. Один из наиболее важных типов
команд -- это команды перемещения. Давайте рассмотрим некоторые из них.
3. Перемещаемся по документу
Перемещения в vi, часть 1
Находясь в командном режиме, Вы можете использовать клавиши
h,j,k и l для перемещения курсора влево, вниз,
вверх и вправо соответственно. Если Вы используете современную версию vi,
Вы можете также с этой целью использовать клавиши со стрелками.
Клавиши h,j,k и l предпочтительнее, так как
освоившись с ними Вы сможете перемещаться по файлу не размахивая руками
над клавиатурой. Попробуйте понажимать h,j,k и l
(а также клавиши со стрелками) для перемещения по текстовому файлу.
Попробуйте использовать h пока не дойдете до начала строки.
Отметьте, что vi не даст Вам перескочить на предыдущую строку нажимая h,
если Вы находитесь в начале строки. Точно также он не позволит Вам перескочить
на следующую строку нажимая l в конце строки.
Перемещения в vi, часть 2
vi предоставляет специальные команды для прыжков в начало и конец
текущей строки. Вы можете нажать 0 (ноль) чтобы перескочить на первый
символ в строке, и $ чтобы перескочить на последний символ в строке.
Попробуйте и посмотрите.
Поскольку у vi так много команд перемещения, его можно использовать в качестве
великолепного просмотрщика -- "pager"а (как команды more или less). Используя vi
как просмотрщик, Вы очень быстро запомните все команды перемещения.
Вы также можете использовать <Ctrl>F и <Ctrl>B
для перемещения вперед и назад сразу на страницу. Современные версии vi (такие как vim)
могут позволить использовать для этих целей клавиши PageUp и PageDown.
Перемещение по словам, часть 1
vi также позволяет Вам перемещаться влево и вправо по словам.
Для перемещения на первый символ следующего слова нажмите w.
Чтобы передвинуться на следующий последний символ слова нажмите e.
Сдвинуться на предыдущий первый символ слова можно нажимая b.
Попробуйте, пожалуйста.
Перемещение по словам, часть 2
Позабавившись с командами перемещения по словам, вы могли заметить,
что vi считает слова типа "foo-bar-oni" пятью различными словами!
Это происходит потому, что vi по умолчанию разделяет слова пробелами
или знаками пунктуации (которые тоже считает словами).
Поэтому foo-bar-oni считается пятью словами: "foo","-","bar","-" и "oni".
Иногда Вам так и надо, а иногда - нет. К счастью, vi воспринимает
понятие "большого слова". vi разделяет большие слова только пробелами и
началами строк. Это значит, что foo-bar-oni состоит из пяти vi-слов, но
является только одним большим словом vi.
Перемещение по словам, часть 3
Чтобы переместиться на следующее или предыдущее большое слово,
Вы можете использовать "заглавные" команды перемещения по словам.
Нажав W Вы попадете на первый символ следующего большого слова,
E -- на следующий последний символ большого слова, и B --
на предшествующий первый символ большого слова. Проверьте их работу,
сравните соответствие команд перемещения по словам и по большим словам,
почувствуйте разницу между ними.
Дальние переходы
Осталось рассмотреть еще несколько команд, и можно будет начинать
их записывать на шпаргалку. Вы можете использовать скобки -- ( и ),
чтобы перейти на начало предыдущего и следующего предложения.
А еще Вы можете перескочить в начало параграфа -- текущего или следующего --
используя команды { или } (фигурные скобки).
Попробуйте и их.
4. Выход
Выход
Мы рассмотрели основные команды перемещения, однако осталась еще пара команд,
которые Вам необходимо знать. Напечатав :q Вы должны выйти из vi.
Если не получиться, значит Вы каким-то образом ухитрились изменить файл.
Сообщить vi, что надо выйти отбросив изменения следует командой :q!.
Теперь Вы должны оказаться в командной строке системы.
Любая команда в vi, начинающаяся с двоеточия (":"), называется командой ex-режима
(an ex-mode command). Это из-за того, что vi имеет встроенный не экранный
редактор, зовущийся ex. Он может использоваться подобно sed для выполнения
операций редактирования, ориентированных на строки. Дополнительно, как мы только что
видели, он может использоваться для завершения работы. Если Вы случайно нажмете
Q находясь в командном режиме, то можете оказаться в ex-режиме. В этом случае
Вы столкнетесь с приглашением ":", и нажатие на Enter будет сдвигать вверх
содержимое экрана. Для возврата к привычному vi-режиму просто наберите vi
и нажмите Enter.
5. Шпаргалка
Начало шпаргалки
Мы рассмотрели несколько команд, и теперь самое время вписать их в нашу
шпаргалку. Для шпаргалки Вам потребуется листок бумаги размером А4 или развернутый
тетрадный лист. (На этoт лист надо будет втиснуть кучу информации!) Здесь приведена
картинка моей шпаргалки после записи всех только что рассмотренных команд. Постарайтесь
придерживаться моего размещения, если возможно, чтобы все уместилось на одной странице.
Figure 5.1: Начало Шпаргалки |
 |
Многогранный vi
Давайте продолжим наш беглый обзор команд. В командном режиме Вы можете
перескочить на конкретную строку напечатав G. Чтобы оказаться на
первой строке файла наберите 1G. Отметьте, что G - заглавная.
Если желаете оказаться в очередном месте появления какого-либо текста --
наберите /<regexp> и нажмите enter. Замените только
<regexp> разыскиваемым регулярным выражением. Не смущайтесь, если
не знаете как использовать регулярные выражения -- набрав /foo
окажетесь там, где далее по тексту встретится foo.
Однако, если в образце поиска фигурируют символы ^, ., $
или \, перед любым из них нужно ввести обратную наклонную черту
- backslash (\). К примеру, /foo\.gif займется поиском
очередного появления "foo.gif".
Чтобы повторить выполнявшийся последним поиск, можете напечатать просто //.
Можно поискать образец повторно, нажимая:
n - следующий или N - предыдущий.
Как обычно, посмотрите как работают эти команды в именно вашей версии редактора vi.
6. Сохранение и Редактирование
Save(сохранить) и save as...(сохранить как...)
Мы уже видели, как используя ex-команду :q выйти из vi.
Пожелав сохранить сделанные изменения наберите команду :w.
Если хотите сохранить свои труды в другом файле, напечатайте
:w filename.txt для записи их в файл filename.txt.
Если хотите сохранить и выйти, введите команду :x или :wq.
В vim (и других потомках vi, типа elvis), Вы можете держать открытыми
одновременно несколько буферов. Введите команду :sp filename.txt и vim
откроет файл filename.txt в новом окне, потеснив уже открытые.
Команда :sp (без имени файла) откроет дополнительное окно для активного
буфера. Для перехода между окнами нажмите
<Ctrl>w,<Ctrl>w (дважды control-w).
Любая из команд :q, :q!, :w и :x относиться только
к активному окну.
Простое редактирование
Вот и подошло время заняться изучением простых команд редактирования.
Рассматриваемые здесь команды считаются "простыми" из-за того, что
оставляют Вас в командном режиме. Более сложные команды автоматически
переводят Вас в режим ввода текста, позволяющий добавлять в буфер символьную
информацию, набираемую на клавиатуре; их рассмотрим позднее.
Попробуйте теперь установить курсор над какими-нибудь символами и
несколько раз нажать на x. Вы увидите, что x будет удалять
текущий символ под курсором. А сейчас сместитесь в середину какого-либо
абзаца и нажмите J (заглавную). Вы увидите, что команда J
заставит vi присоединить следующую строку к концу текущей строки. Теперь
установите курсор на символ и нажмите r, и следом другой символ --
Вы увидите, как им будет заменен первоначальный символ. Наконец, установите
курсор на любой строке в файле и нажмите dd. Вы увидите, что будет
удалена текущая строка текста.
Повторение и удаление
Повторить любую команду редактирования Вы можете нажимая клавишу
. (точка). Если попробуете, то можете увидеть, что печать dd...
удалит 4 строки, а J...... объединит семь строк. Как обычно, vi
обеспечивает Вас различными удобными средствами сокращения трудозатрат.
Удалять текст Вы можете также комбинируя команду d с любыми
командами перемещения. Например, dw удалит часть текста от текущей
позиции курсора до начала следующего слова; d) удалит вплоть до
следующего конца предложения, и d} удалит весь остаток абзаца.
Поэкспериментируйте с командой d и другими командами редактирования,
пока не почувствуете себя с ними уверенно.
Отставить!
Теперь, когда мы поэкспериментировали с удалением, неплохо изучить,
как отменять любые изменения. При нажатии на u оригинальная версия
vi позволит отменить только последнюю операцию редактирования. Однако,
современные версии vi, такие как vim, позволяют последовательным нажатием
u продолжать убирать сделанные в файле изменения. Попробуйте
протестировать некоторые d и u команды совместно.
Обновление шпаргалки
Подошло время обновить шпаргалку! После внесения всех только что
рассмотренных команд ваша шпаргалка должна выглядеть примерно так:
Figure 6.1: Шпаргалка с командами редактирования |
 |
7. Режим ввода текста
Режим ввода текста
Мы уже рассмотрели, как в vi перемещаться, выполнять чтение\запись
файлов и основные операции редактирования. Однако, я еще не объяснил, как
напечатать произвольный текст! Сделано это было умышленно, так как поначалу
режим ввода текста в vi малость сложноват. Тем не менее, после того, как
Вы станете спокойно себя чувствовать в режиме ввода текста, эта сложность
(и гибкость) станет настоящей ценностью.
В vi, в режиме ввода текста, Вы можете вводить текст "прямо на экран",
как в большинстве других экранных редакторов. Сделав свои изменения, Вы
можете нажать Escape и вернуться в командный режим. В режим ввода текста Вы
можете войти нажав i или a. Если нажмете i -- ваш текст
будет вставлен (inserted) перед текущим символом, а если нажмете a
-- ваш текст будет добавлен (appended) после текущего символа.
Не забудьте, введя свой текст, нажать <ESC> для возврата в режим команд.
Прок от режима ввода текста
Двинемся дальше и попробуем использовать команды a и i.
Нажмите a или i, наберите какой-нибудь текст, а затем нажмите
Escape чтобы вернуться в командный режим. После нажатия a или i
попробуйте нажать <ENTER>, и посмотреть, что произойдет. Попробуйте
использовать стрелки и клавишу <DEL> чтобы почувствовать, как
работает режим ввода текста. Используя клавиши со стрелками и <DEL>
Вы можете произвести значительные изменения без постоянного переключения в
режим ввода текста и обратно.
Вариации на тему
Существуют и другие удобные способы переключения в режим ввода текста.
Нажав A (заглавную), Вы начнете добавлять текст в конце текущей
строки, не взирая на ваше текущее положение в строке. Точно также, нажав
I (заглавную), начнете вводить текст в начале текущей строки.
Создать пустую строку после или перед текущей, где Вы сможете вводить текст,
Вы можете нажав o (строчную) или O (заглавную) соответственно.
Чтобы заменить текущую строку целиком, нажмите cc. Для замены текста
от текущего положения и до конца строки наберите c$. Заменить все от
начала строки до курсора можно набрав c0 (ноль!).
Дополнительно, выполнив свои специфические действия, каждая из
этих команд переведет Вас в режим ввода текста. Закончив печатать
нажмите <ESC> для возвращения в режим ввода команд.
Изменение текста
Мы уже использовали команду c (change - заменить) совсем
недавно, когда набирали cc, c0 и c$. cc --
это специальная разновидность команды замены, похожая на dd.
Команды c0 и c$ являются образцами использования команды
замены в комбинации с командами перемещения. В такой форме c
работает также, как и d, только оставляет Вас в режиме ввода
текста, чтобы Вы могли набрать замещающий текст взамен удаленного.
Попробуйте комбинации c с разными командами перемещения
(например: cW, ce, c() и оцените их работу
на своем тестовом файле.
8. Комбинированные команды
Комбинированные команды
vi действительно становиться мощным, когда Вы начинаете
использовать совмещенные (или комбинированные) команды, типа d{
и cw. Дополнительно к таким командам, Вы также можете
совмещать числа с любыми командами перемещения, как 3w, которая
сообщает vi о необходимости проскочить вперед на три слова. Вот еще
несколько примеров таких комбинированных команд: 12b, 4j.
Разрешая комбинации (число)(команда перемещения), vi позволяет
еще совмещать команды d или c с числами или командами
перемещения. Так d3w удалит следующие три слова, d2j
удалит текущую и две следующие строки, и т.д. Попробуйте немного
поэкспериментировать с командами c и d, совмещенными с
перемещениями, чтобы почувствовать, каким мощным и лаконичным может быть
редактирование в vi. Когда эти команды станут вашей второй натурой,
Вы сможете редактировать файлы с невероятной скоростью.
Обновление шпаргалки
Пора опять обновить шпаргалку.
Вот на что она теперь должна походить:
Figure 8.1: Шпаргалка с комбинированными командами |
 |
Увеличение производительности
Только что мы рассмотрели, как перемещаться, сохранять и завершать
работу, выполнять простое редактирование и удаление, пользоваться режимом
ввода текста. С этим багажом знаний (только что показанным на шпаргалке)
Вы уже способны, используя vi, справиться практически с любой задачей.
Однако, у vi есть еще много более мощных команд. В этом разделе
Вы узнаете как вы'резать (cut), скопировать (copy) и
вставить (paste), найти (search) и заменить (replace) текст,
а так же как использовать автоматический отступ (autoindent).
Эти команды помогут vi быть более приятным и производительным.
Экранный режим
Лучшим способом вырезать и вставлять фрагменты текста является
использование экранного режима, специального режима, добавленного в современных
версиях vi, таких как vim и elvis. Вы можете представлять себе экранный
режим как режим "подсвечивания текста". Выделенный текст может быть
скопирован или удален, а затем вставлен. Если Вы используете gvim,
выделить кусок текста Вы можете просто нажав левую кнопку мышки и
протащив курсор по нужной области:
Figure 8.2: VIM с выделенным текстом |
 |
Войти в экранный режим Вы еще можете нажав v (это
может быть вашей единственной возможностью, если Вы используете
vi в консоли). Затем, двигая курсор командами перемещения
(обычно стрелками), Вы можете выделить область текста.
Закончив выделение, Вы уже готовы вырезать либо копировать текст.
Для копирования текста нажмите y (от слова "yank").
Чтобы вырезать текст нажмите d. Вы будете переведены назад в
командный режим. Теперь переместитесь в то место, где Вы хотите вставить
вырезанный или скопированный текст, и нажмите P (заглавная) для
вставки перед курсором или p (строчная) для вставки за курсором.
Всё, копирование\вырезание и вставка выполнены! А теперь проделайте
еще несколько раз процедуру копирования\вырезания и вставки перед тем,
как перейти к следующему разделу.
Замена текста
Для замены образцов текста мы используем ex-режим. Если Вы
хотите заменить первый попавшийся в текущей строке образчик, наберите
:s/<regexp>/<replacement>/ и нажмите <ENTER>,
где <regexp> - что хотите заменить, и <replacement> - на что.
Для замены всех совпадений с эталоном в текущей строке используйте команду
:s/<regexp>/<replacement>/g. Если хотите выполнить
замену каждого вхождения образца во всем файле (что обычно и требуется),
воспользуйтесь командой :%s/<regexp>/<replacement>/g.
Подтвердить потребность замены в каждом конкретном случае при выполнении
глобального замещения можно набрав
:%s/<regexp>/<replacement>/gc (здесь "c" означает "confirm").
И не забудьте, набрав команду, нажать <ENTER>.
Выделение
vi поддерживает автоматический отступ при редактировании
Вами исходников (текстов программ). Большинство современных версий vi
(таких, как vim) могут самостоятельно включать абзацный авто отступ при
редактировании Вами исходников (например, файлов типа .c). Если авто отступ
включен, Вы можете использовать <CTR>d (control-d) для уменьшения
и <CTR>t (control-t) для увеличения уровня отступа. Если
автоматический абзацный отступ не включился самостоятельно, Вы можете
включить его вручную набрав ex-команду :set autoindent .
Вы также можете попросить vi установить табуляцию Вашего любимого размера
командой :set tabstop; довольно популярна :set tabstop=4.
Наша полная шпаргалка
Ну вот, мы и достигли конца учебника по vi ! После помещения
всех дополнительных команд редактирования на вашу "шпаргалочку", она должна
выглядеть примерно так:
Figure 8.3: Законченная шпаргалка |
 |
Держите Вашу шпаргалку под рукой и начинайте использовать vi чтобы
редактировать файлы и писать письма. Заглядывайте в шпаргалку при необходимости;
через неделю Вы заметите, что запомнили уже почти все команды и продуктивность
Вашей работы в vi невероятно выросла!
Ресурсы
Означенные здесь ресурсы могут быть полезны желающим
продолжить изучение vi далее. (Правда, на английском):
|