Сокращения
В руководстве будут использованы следующие сокращения :
^X обозначает "control" символ. Например : ^d - удерживая клавишу "control" нажать соответствующий символ. Для этого примера используется клавиша "control" в сочетании с буквой "d".
Предисловие
Пользователи ОС Linux, использующие новые терминальные эмуляторы такие как xterm gnome-terminal, kvt, aterm, могут пропустить этот раздел. Переменная "$TERM" у них всегда по умолчанию имеет правильное значение.
Редактор Vi работает в полноэкранном режиме, поэтому использует информацию о типе терминала. Когда вы соединяетесь с "wiliki" ("wiliki" - имя главного инженерного сервера в Гавайском университете) он требует указания типа вашего терминала. Например :
TERM = (vt100)
Если у вас данный тип терминала (или эмулятор поддерживающий этот тип) просто нажмите клавишу "Enter". Если у вас термнал hp, введите hp и нажмите клавишу "Enter". Если вам не известен тип терминала - спросите совет у лаборанта.
Если вы допустили ошибку указав неверный тип терминала - ничего страшного, просто завершите сеанс работы. Следующие команды помогут исправить установки системы :
Во-первых установите переменную TERM (если вы не знаете какая оболочка используется в системе выполните команду echo $SHELL). В примерах подразумевается тип терминала vt100. Замените его при необходимости используемым вами. Для оболчки C (/bin/csh) используйте следующую команду :
set term=vt100Для оболочек Bourne (/bin/sh) или Korn (/bin/ksh) :
export TERM TERM=vt100Далее перезапустите ваш терминал :
tset
Теперь, после правильной установки типа терминала, начнем изучение редактора Vi.
Начало работы
Редактор vi позволяет создавать новые файлы и редактировать существующие. Для запуска vi используйте команду vi сопровождаемую именем файла. Например для редактирования файла temporary наберите vi temporary и нажмите клавишу "Enter". Можно запустить vi без имени файла - в этом случае для сохранения результатов работы сообщите имя файла редактору позже.
Когда вы запускаете vi - на экране с левой стороны вы видите тильды (~). Так обозначаются пустые строки. В нижней части экрана отображается имя текущего файла и размер :
"filename" 21 lines, 385 charactersЕсли это новый файл сообщение будет выглядеть следующим образом :
"newfile" [New file]При запуске vi без имени файла - нижняя часть экрана будет пустой. Если не отображается одно из этих сообщений - возможно у вас неверный тип терминала. Наберите :q и "Enter" для выхода из vi и установите поддерживаемый тип терминала. Если не знаете как - спросите совет у лаборанта.
Выход из VI
Теперь, когда вы знаете как запустить vi, необходимо узнать как завершить сеанс работы с редактором. Редактор vi имеет два рабочих режима и для завершения сеанса работы необходимо перейти в командный режим. Нажмите клавишу "Escape" или "Esc" (если у вас нет такой клавиши попробуйте "^[" или "control-[") для переключения в командный режим. Если вы находясь в командном режиме нажмете клавишу "Escape" - ничего страшного. Возможно прозвучит сигнал, но редактор по-прежнему будет в командном режиме.
Команда для выхода из vi - ":q". В командном режиме наберите двоеточие и "q" и нажмите клавишу "Enter". Если вы вносили изменения в файл - редактор предупредит об этом и не позволит завершить сеанс подобным образом. Выход из редактора без сохранения изменений - ":q!".
Конечно, работая в редакторе, вы хотите сохранять результаты работы. Команда для сохранения изменений - ":w". Можно сохранить изменения и завершить сеанс работы одновременно - ":wq". Для изменения имени файла выполните - ":w filename". Например для сохранения файла с новым именем filename2 выполните : ":w filename2".
Другая возможность завершения сеанса работы с редактором - выполнение команды ":ZZ". В командном режиме выполните ":ZZ" (эквивалент команды ":wq"). Если были сделаны изменения - они будут сохранены. Это самый простой вариант.
Режимы работы VI
Первое, что узнают пользователи о редакторе vi - два режима его работы : командный и вставки текста. Командный - режим ввода команд. Обычно эти команды короткие - состоят из одной или двух букв. Режим вставки текста - вставляется в файл то, что вы набираете на клавиатуре.
По умолчанию редактор запускается в командном режиме. Для переключения в режим вставки текста существует несколько команд. Наиболее часто используемые среди них - "a" и "i". Ниже мы остановимся подробнее на этих командах. Чтобы выйти из режима вставки текста нажмите клавишу "Escape". Если у вас нет такой клавиши попробуйте "^[" или "control-[" Вы можете нажать клавишу "Escape" дважды и редактор все равно будет командном режиме. Нажатие клавиши "Escape" в командном режиме не переведет его ни в какой другой. Может только прозвучать сигнал, сообщающий, что вы уже находитесь в командном режиме.
Работа в командном режиме
Команды в этом режиме имеют формат :
-
[count] command [where]
Аргумент count - число, начинающееся с символа от 1 до 9. Например : команда "x" удаляет символ в позиции курсора, при вводе команды "23x" - будут удалены 23 символа.
Некоторые команды используют аргумент where, определяющий границы текста, к которым будет применена команда, также параметр where может быть командой перемещения курсора.
Простые команды редактора VI
Рассмотрим некоторые команды для начала работы с vi. Позже обратим внимание на другие команды.
- a
- вставить текст за текущей позицией курсора. Если определен аргумент count - весь введенный текст будет повторен count раз.
- h
- переместить курсор на одну позицию влево.
- i
- вставить текст, начиная с позициии перед курсором. Если определен аргумент count - весь введенный текст будет повторен count раз.
- j
- переместить курсор вниз на одну строку.
- k
- переместить курсор вверх на одну строку.
- l
- переместить курсор на одну позицию вправо.
- r
- заменить символ в текущей позиции курсора. Аргумент count определяет количество заменяемых символов.
- u
- отмена последнего изменения. Повторная команда u возвратит изменение.
- x
- удалить символ в текущей позиции курсора. Аргумент count определяет количество удаляемых символов. Символы будут удалены за курсором.
Текстовые буферы в редакторе VI
Редактор vi предоставляет пользователю 36 буферов для хранения информации и также буфер общего назначения. Удаленный или скопированный текст помещается в буфер общего назначения. Многие пользователи vi редко используют другие буферы. Но можно использовать так называемые "поименованные" буферы. Для их применения используется команда ". Эта команда используется в сочетании с буквой или цифрой для определения буфера. Например : команда "mdd использует буфер m для вырезания в него текущей строки. Команды p или P используются для вставки текста. Команда "mp вставит содержимое буфера m за текущей позицией курсора. Эти буферы могут быть использованы командами, рассматриваемыми в следующих двух разделах.
Вырезание и копирование
Наиболее часто используемая команда для вырезания текста "d". Эта команда удаляет текст из файла. Использует аргумент count. Команда "dd" удаляет текущую строку. Рассмотрим несколько примеров :
- d^
- удаляет символы от текущей позиции курсора до начала строки.
- d$
- удаляет символы от текущей позиции курсора до конца строки.
- dw
- удаляет символы от текущей позиции курсора до конца слова.
- 3dd
- удаляет три строки от текущей позиции курсора вниз.
Действие команды "y" (копирование) подобно действию команды "d", но она не удаляет текст, а только копирует его в буфер.
Вставка
Команды для вставки "p" и "P". Различие между ними в положении вставляемого текста. Команда "p" вставляет текст из буфера после текущей позиции курсора, "P" - вставляет текст перед текущей позицией курсора. Аргумент count определяет количество повторов вставляемого текста.
Оформление и контроль
Редактор vi предоставляет программистам возможность аккуратного оформления кода. Существует переменная определения позиции для каждого уровня вложенности кода. Для ее определния обратите внимание на раздел "Настройка VI и EX". Например для определения отступа равным 4 символам используйте команду ":set sw=4".
Можно также использовать следующие команды (поддерживают аргумент count) :
- <<
- Сдвиг строки влево на одну позицию.
- >>
- Сдвиг строки вправо на одну позицию.
Редактор vi предоставляет возможность контроля кода по круглым или фигурным скобкам. Команда "%" контролирует парность круглых или фигурных скобок. Установите курсор на скобку и введите команду "%" для перемещения курсора на парную. При отсутствии парной скобки прозвучит сигнал, предупреждающий об ошибке.
Поиск текста
Редактор vi предоставляет два вида поиска : строк и символов. Команды "\" и "?" для поиска строк. При выполнении этих команд в нижней части экрана отображается строка введенная вами для поиска. Различие между командами "\" и "?" : "\" осуществляет поиск вниз по файлу, а "?" - вверх. Команды "n" и "N" повторяют поиск в том же или противоположном направлении соответственно. Некоторые символы имеют специальное значение в редакторе vi - поэтому перед ними должен быть введен символ \.
Специальные символы :
- ^
- начало строки.
- .
- любой один символ.
- *
- любое число символов.
- $
- конец строки.
- [
- определяет набор символов для поиска. Например : /f[iae]t определит любую комбинацию из следующих : fit fat fet или /a[^bcd] определит любую комбинацию кроме : ab ac ad.
- <
- начало или конец слова. Например : /\
определит только слово the, но не there and other. - >
- смотри описание выше.
Символьный поиск осуществляется в текущей строке командами "f" и "F". Команда "f" осуществляет поиск вперед, "F" - назад, курсор перемещается в позицию найденного символа.
Действие команд "t" и "T" аналогично действию "f" и "F". Различие между ними в положении курсора : после выполнения команды "t" курсор перемещается в позицию перед найденным символом, после выполнения команды "T" - после найденного символа.
Повтор поиска осуществляется командами ";" и ",". Команда ";" повторяет поиск в том же направлении, команда "," - в противоположном.
Установка переменной "ic" (:set ic) позволяет осуществить поиск не учитывая регистр.
Настройка VI и EX
Редактор vi предоставляет возможность настройки, осуществляемой установкой параметров командой :set. Далее следует список параметров, установленных на компьтере Wiliki для редакторов vi и ex (для получения списка используется команда :set all в командном режиме).
noautoindent magic noshowmatch
autoprint mesg noshowmode
noautowrite nomodelines noslowopen
nobeautify nonumber tabstop=8
directory=/tmp nonovice taglength=0
nodoubleescape nooptimize tags=tags /usr/lib/tags
noedcompatible paragraphs=IPLPPPQPP LIpplpipnpbp term=xterm
noerrorbells prompt noterse
noexrc noreadonly timeout
flash redraw timeoutlen=500
hardtabs=8 remap ttytype=xterm
noignorecase report=5 warn
keyboardedit scroll=11 window=23
keyboardedit! sections=NHSHH HUuhsh+c wrapscan
nolisp shell=/bin/csh wrapmargin=0
nolist shiftwidth=8 nowriteany
Некоторые параметы могут быть просто включены или выключены, а некоторые принимают значение (включенное или выключенное состояние называют булевым значением и наличие "no" перед параметром означает, что он выключен). Значения некоторых параметров рассмотрены ниже. Например : для установки параметра autoindent выполните команду :set autoindent или :set ai. Для отмены установки этого параметра : выполните команду :set noautoindent или :set noai.
- autoindent(ai)
- вновь создаваемые строки выравниваются по отступу предыдущей. Для отмены отступа используйте в начале строки сочетание ^D в режиме вставки текста. Величина отступа также может быть установлена параметром shiftwidth.
- exrc
- файл .exrc загружается каждый раз при вызове vi. Это устанавливается переменной "EXINIT" или в файле .exrc в вашем домашнем каталоге.
- mesg
- команда :set nomesg отменяет разрешение появления текста на вашем терминале.
- number (nu)
- выводит номера строк вдоль левого края экрана.
- shiftwidth (sw)
- устанавливает значение отступа (используемого командами << и >>). Например : :set sw=4 устанавливает значение отступа равным 4.
- showmode (sm)
- показывает индикатор режима. Если вы находитесь в режиме вставки текста - в нижней строке экрана будет выведено сообщение "INPUT MODE".
- warn
- выводит предупреждение, если файл был изменен со времени выполнения последней команды записи.
- window (wi)
- устанавливает количество строк выводимых редактором vi на экран. Например : для использования 12 строк (из-за низкой скорости модема) используется команда :set wi=12.
- wrapscan (ws)
- когда в ходе поиска достигается конец файла, он продолжается с его начала.
- wrapmargin (wm)
- если значение параметра не равно нулю, редактор автоматически вставляет новую строку. Например : команда :set wm=2 устанавливает параметру wm значение 2.
Макросы
Существует полезная команда редактора ex для редактора vi - abbreviate. Она используется для сокращения наиболее часто применяемых фраз. Синтаксис команды : :ab string thing to substitute for. Например : если вам необходимо вводить слово "Humuhumunukunukuapua`a", но вы не хотите каждый раз набирать его полностью - используйте команду ab. Для данного случая она будет выглядеть так :
:ab 9u Humuhumunukunukuapua`a
Теперь если вы введете 9u - вы получите полное значение. При вводе 9university замены не произойдет.
Для удаления сокращения используется команда unabbreviate. Для данного случая - :una 9u. Команда :ab выдаст список всех сокращений.
Другая полезная команда редактора ex - map. Существуют две разновидности команды - для командного режима и для режима вставки текста - map и map! соответственно. Работает сходно с командой ab - последовательность символов заменяется обычно командами редактора vi.
Переменная EXINIT и файл .exrc
Существуют два пути управления настройками редактора vi - создание файла .exrc в вашем домашнем каталоге или настройка переменной "EXINIT". Параметры будут установлены в ваш файл сценария. Если вы используете /bin/csh (C-Shell) выполните следующие команды :
setenv EXINIT '...'Если вы используете /bin/sh или /bin/ksh выполните эти команды :
export EXINIT EXINIT='...'Не используйте ... как в примерах. Используйте команды. Например : для (для C shell) :
setenv EXINIT 'set ai nu wm=3'
Для выполения нескольких команд разделите их вертикальной чертой (|). Например : для использования команды :map g G совместно с предыдущей выполните
setenv EXINIT 'set ai nu wm=3|map g G'
Используйте выражения в кавычках, после "EXINIT", для применения файла .exrc.
Восстановление данных
Редактор vi работает с копией файла и после завершения редактирования или по команде сохранения содержание копии перемещается в основной файл. Если возникает аварийная ситуация при редактировании, vi сохраняет результаты работы для последующего восстановления. Обратите внимание : при возникновении подобной ситуации, vi посылает e-mail сообщение с инструкциями о восстановлении данных. Параметр -r означает восстановление. Например : команда vi -r vitalinfo используется для восстановления данных после возникновения аварийной ситуации при редактировании файла vitalinfo. После использования параметра -r для восстановления файла необходимо сохранить результат в существующий файл. Параметр -r действителен только один раз после возникновения аварийной ситуации.
Предупреждения для использования VI на рабочих станциях
При использовании рабочих станций для работы с редактором vi необходимо помнить следующее : многократное одновременное редактироване одного и того же файла и изменение размера экрана.
Vi использует копию файла для редактирования и сохраняет изменения в существующий файл. Поэтому если редактируется один и тот же файл одновременно несколько раз - при сохранении результатов одна копия может переписать другую. Будьте уверены, что используется один сеанс для редактирования файла.
При работе с терминальной программой можно изменить размеры экрана. Если возникли проблемы с экраном, что является редкостью, выполните команду :
eval `resize`или :
eval `/usr/bin/X11R6/resize`
Обзор команд редактора VI
Команды сгруппированы по действиям, более подробный обзор смотрите здесь. Для удобства использования сохраните файл в обычном текстовом формате, удалите команды, которые вы не планируете использовать и распечатайте.
- Вырезание и вставка/удаление текста
- Вставка текста
- Перемещение по файлу
- Перемещение по экрану
- Замена текста
- Поиск текста
- Манипулирование символьно/строковым форматированием
- Сохранение и выход
- Разное
- Команды редактора EX
Вырезание и вставка/удаление текста
- "
- Назначение буфера. Используется с буквой или цифрой.
- D
- Удалить от текущей позиции курсора до конца строки.
- P
- Вставить текст из буфера в позицию перед курсором. Если не определен буфер командой ", используется буфер общего назначения.
- X
- Удалить символ перед текущей позицией курсора.
- Y
- Копировать текущую строку в буфер. Если не определен буфер, используется буфер общего назначения.
- d
- Удалить. "dd" - удалить текущую строку. Аргумент count определяет количество удаляемых строк. Если не определен буфер командой ", используется буфер общего назначения.
- p
- Вставляет текст после текущей позиции курсора. Если не определен буфер командой ", используется буфер общего назначения.
- x
- Удаляет символ в позиции курсора. Аргумент count определяет количество удаляемых символов. Символы будут удалены после текущей позиции курсора.
- y
- Копировать. "yy" - копировать текущую строку. Аргумент count определяет количество копируемых строк. Если не определен буфер командой ", используется буфер общего назначения.
Вставка текста
- A
- Добавляет текст в конце строки.
- I
- Добавляет текст в начале строки.
- O
- (letter oh) Переключает в режим вставки текста и вставляет пустую строку перед текущей строкой.
- a
- Переключает в режим вставки текста и добавляет текст после курсора. Аргумент count определяет количество повторений введенного текста.
- i
- Переключает в режим вставки текста и добавляет текст перед курсором. Аргумент count определяет количество повторений введенного текста.
- o
- Переключает в режим вставки текста и вставляет пустую строку после текущей строки.
Перемещение по файлу
- ^B
- Переход на один экран назад. Аргумент count определяет количество экранов.
- ^D
- Переход на половину экрана вперед. Аргумент count определяет количество строк.
- ^F
- Переход на один экран вперед. Аргумент count определяет количество экранов.
- ^H
- Переход на один символ влево. Аргумент count определяет количество символов.
- ^J
- Переход на одну строку вниз. Аргумент count определяет количество строк.
- ^M
- Переход в начало следующей строки
- ^N
- Переход на одну строку вниз. Аргумент count определяет количество строк.
- ^P
- Переход на одну строку вверх. Аргумент count определяет количество строк.
- ^U
- Переход на половину экрана назад. Аргумент count определяет количество строк.
- $
- Переход в конец текущей строки. Аргумент count определяет строку.
- %
- Переход к парной круглой или фигурной скобке.
- ^
- Переход к первому символу.
- (
- Переход в начало предложения.
- )
- Переход в начало следующего предложения.
- {
- Переход к предыдущему абзацу.
- }
- Переход к следующему абзацу.
- |
- Переход в столбец, определенный аргументом count.
- +
- Переход к первому символу в следующей строке.
- -
- Переход к первому символу в предыдущей строке.
- _
- Переход к первому символу в текущей строке.
- 0
- (Zero)Переход в начало текущей строки.
- B
- Переход назад на одно слово.
- E
- Переход в конец текущего слова.
- G
- Переход в конец файла. Аргумент count определяет номер строки для перехода.
- H
- Переход к первому символу вверху экрана.
- L
- Переход к первому символу внизу экрана.
- M
- Переход к первому символу в середине экрана.
- W
- Переход в начало следующего слова.
- b
- Переход назад на одно слово. Если курсор в середине слова - переход в начало текущего слова.
- e
- Переход вперед на одно слово. Если курсор в середине слова - переход в конец текущего слова.
- h
- Переход на один символ влево.
- j
- Переход вниз на одну строку.
- k
- Переход вверх на одну строку..
- l
- Переход на один символ вправо.
- w
- Переход вперед на одно слово. Если курсор в середине слова - переход к первому символу следующего слова.
Перемещение по экрану
- ^E
- Переход на одну строку вперед. Аргумент count определяет количество строк.
- ^Y
- Переход на одну строку назад. Аргумент count определяет количество строк.
- z
- Обновить экран. "z
" устанавливает текущую строку вверх экрана; "z." устанавливает текущую строку в середину экрана; and "z-" устанавливает текущую строку вниз экрана. Аргумент count определяет строку для замены текущей строки. Например : "16z." устанавливает строку 16 в центр экрана.
Замена текста
- C
- Заменить от текущей позиции курсора до конца строки.
- R
- Заменить текст до нажатия клавиши "Escape".
- S
- Заменить всю строку.
- c
- Заменить. "cc" заменяет текущую строку. Аргумент count определяет количество строк.
- r
- Заменить символ в позиции курсора. Аргумент count определяет количество символов.
- s
- Заменить символ в позиции курсора и перейти в режим вставки текста. Аргумент count определяет количество символов. Символ ($) будет установлен на последнем символе для замены.
Поиск текста
- ,
- Повторить последнюю команду "f", "F", "t" или "T" в обратном направлении.
- /
- Искать определенную строку вперед по файлу.
- ;
- Повторить последнюю команду "f", "F", "t" или "T".
- ?
- Искать определенную строку назад по файлу
- F
- Искать определенный символ вперед в текущей строке. При успешном выполнении - курсор перемещается в позицию найденного символа.
- N
- Повторить последний поиск "/" или "?" исключая обратное направление.
- T
- Искать определенный символ вперед в текущей строке. При успешном выполнении - курсор перемещается в позицию после найденного символа.
- f
- Искать определенный символ в текущей строке. При успешном выполнении - курсор перемещается в позицию найденного символа.
- n
- Повторить последний поиск "/" или "?".
- t
- Искать определенный символ в текущей строке. При успешном выполнении - курсор перемещается в позицию перед найденным символом.
Манипулирование символьно/строковым форматированием
- ~
- Изменить регистр символа в позиции курсора.
- <
- Выполнить сдвиг влево на величину shiftwidth. "<<" - сдвиг текущей строки влево (использует аргумент count).
- >
- Выполнить сдвиг вправо на величину shiftwidth. ">>" - сдвиг текущей строки вправо (использует аргумент count).
- J
- Объединить текущую строку с последующей. Аргумент count определяет количество строк.
Сохранение и выход
- ^\
- Выход из режима "VI" в режим "EX". Редактор EX - строковый редактор, на основе которого построен редактор VI. Команда редактора EX для возврата в VI :vi.
- Q
- Выход из режима "VI" в режим "EX". Редактор EX - строковый редактор. Команда редактора EX для возврата в VI :vi.
- ZZ
- Выход из редактора с сохранением изменений.
Разное
- ^G
- Показать имя файла и статус.
- ^L
- Очистить и перерисовать экран.
- ^R
- Перерисовать экран и удалить ошибочные строки.
- ^[
- Отменить частично набранную команду.
- ^^
- Возвратиться к последнему редактированному файлу.
- !
- Выполнить команду оболочки.
- &
- Повторить предыдущую команду :s.
- .
- Повторить последнюю команду.
- :
- Начало команды редактора "EX". Команда выполняется один раз после нажатия клавиши "Enter".
- @
- Напечатать команду из определенного буфера.
- U
- Восстановить текущую строку.
- m
- Отметить текущую позицию определенным символом.
- u
- Отменить последнее изменение файла. Повторная команда восстанавливает изменения.
Команды редактора EX
Редактор vi построен на основе редактора ex. Редактор ex редактирует построчно. Из редактора vi можно вызвать команду ex - : вводится перед командой. Мы рассмотрим наиболее используемые команды. Если необходимо изменить более одной строки командами :s или :w определяется диапазон. Например : для изменения строк с 3 по 15 используется команда :3,15s/from/this/g.
- :ab string strings
- Сокращение. Если в редакторе vi появляется слово string, происходит автоматическая замена. Например : команда :ab usa United States of America определяет сокращение для слова "usa". Теперь при вводе слова "usa" произойдет замена на "United States of America".
- :map keys new_seq
- Макрос. Замена клавиши или последовательности клавиш .
- :q
- Выход из редактора VI. Если были сделаны изменения - редактор сообщит об этом.
- :q!
- Выход из редактора VI без сохранения изменений.
- :s/pattern/to_pattern/options
- Замена. Замена выражения pattern на выражение to_pattern. Без использования options производит замену первого вхождения выражения pattern. Если используется опция "g" - все вхождения выражения pattern будут заменены. Например : команда :1,$s/Dwayne/Dwight/g заменит все вхождения выражения "Dwayne" на "Dwight".
- :set [all]
- Установка некоторых параметров настройки VI и EX. Команда :set all выводит список всех возможных параметров (обратите внимание на раздел "Настройка VI и EX").
- :una string
- Удаление ранее определенного сокращения командой :ab.
- :unm keys
- Удаление ранее определенного макроса командой ":map.
- :vi filename
- Начало редактирования нового файла. Если изменения не были сохранены - редактор выдаст предупреждение.
- :w
- Записать текущий файл.
- :w filename
- Записать файл с именем filename.
- :w >> filename
- Добавить содержимое буфера в файл filename.
- :wq
- Сохранить изменения и выйти.
Ссылки
- Адрес оригинала заметки: www.eng.hawaii.edu/Tutor/vi.html
- Загрузить VIM, популярную версию редактора VI из http://www.vim.org/
- Вопросы и комментарии направляйте (Ben Y. Yoshino)