Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСС.docx
Скачиваний:
8
Добавлен:
12.11.2019
Размер:
546.05 Кб
Скачать

Тема 5.4. Текстовый редактор VI

Цель занятия: изучить режимы редактора vi, основные команды редактора, уметь вызывать редактор vi, вставлять, удалять, перемещать, модифицировать текст, сохранять файл

План изложения материала

  1. Вызов vi

  2. Перемещение курсора

  3. Вставка текста

  4. Удаление текста

  5. Модификация текста

  6. Перемещение текста

  7. Поиск

  8. Команды редактора ex: структура и формат команды, адресование команды

  9. Команды редактирования

  10. Команды записи

  11. Команды чтения

  12. Команды окончания работы

  13. Глобальные команды

Текстовый редактор это программа, используемая для редактирования файлов, которые содержат текст.

В системах Unix существует несколько текстовых редакторов. Среди них emacs -мощный редактор с самым большим набором возможностей. По сравнению со всеми остальными редакторами Unix, он сравнительно велик и поэтому его нет во многих системах; ed - строчный редактор, имеющийся во всех системах, ex - также строчный редактор, похожий на ed, но более мощный. Редактор vi - это полноэкранный достаточно мощный текстовый редактор, широко распространенный в мире Unix.

Vi и строковый редактор ex - это фактически один и тот же редактор, имена vi и ex идентифицируют скорее особый пользовательский интерфейс, чем функциональное различие.

К экранному редактору вы можете получить доступ с помощью команды vi. Экранный редактор vi является дисплей-ориентированным, интерактивным программным средством. Он позволяет вам обозревать файл при редактировании постранично. Этот редактор работает наиболее эффективно на видеотерминалах, оперирующих со скоростью 1200 бод и выше.

Вы можете модифицировать (добавлять, удалять, изменять) файл, позиционируя курсор в том месте на экране, где должны быть произведены изменения. Экранный редактор немедленно отображает результат изменений.

Экранный редактор предлагает вам набор команд. Например, команда number позволяет вам перемещать курсор внутри файла. Другие команды прокручивают вперед и назад файл на экране, помогают изменить существующий текст или создать новый текст. Дополнительно к своему набору команд экранный редактор может иметь доступ к командам построчного редактора.

Vi не выполняет никаких операций редактирования с вашим файлом, вместо этого он работает с копией файла, которая находится в буфере редактирования. Когда вы активизируете vi с одним аргументом -именем файла, этот файл копируется во временный буфер редактирования. Редактор запоминает имя файла, определенного при вызове и позднее может скопировать содержимое буфера редактирования обратно в указанный файл.

Внутри vi существует три отдельных режима:

Режим команды: в этом режиме сигнал с клавиатуры интерпретируется как команда редактирования или команда перехода в другие режимы.

Режим вставки: переход в этот режим осуществляется набором команд вставки, присоединения, подстановки, изменения или замещения, имеющимися в vi. В режиме вставки символы, набранные на клавиатуре, вставляются в буфер редактирования. Для завершения режима вставки и возврата в командный режим следует нажать ESC.

Режим переключения в ex (режим командной строки). В vi команды - это одиночные клавиши. В ex командами являются строки текста, завершенные нажатием клавиши Enter. Для перехода в режим переключения в ex применяют символ ":". Этот символ отображается в командной строке (последней строке экрана) как указатель на следующую команду редактора ex. Большинство команд обработки файла выполняются в режиме переключения в ex (например, команды чтения из файла и запись из буфера редактирования обратно в файл).

Вызов vi.

Для запуска редактора достаточно набрать команду vi и указать имя файла, который вы хотите редактировать:

vi < имя_файла >

Для входа в редактор vi можно использовать следующие команды:

vi - редактирует пустой буфер редактирования;

vi < имя файла > - редактирует указанный файл;

vi +123 < имя файла > - копирует указанный файл для редактирования и переходит на строку с номером 123 указанного файла;

vi +/word < имя файла > - копирует указанный файл для редактирования и ищет первое вхождение слова "word" в указанном файле;

vi +/tty < имя файла > - копирует указанный файл для редактирования и ищет первое вхождение слова "tty" в указанном файле.

На экране помещаются 24 строки. Появившийся столбец символов "~" говорит от том, что вы находитесь в конце файла. Значки тильды означают, что строки пустые (если создается новый файл). При печати тильда исчезает. Если файла с указанным именем не существует, то внизу пустого экрана появляется сообщение о том, что вы создаете новый файл с указанным именем. В противном случае, если указанный файл существует, на экран выводится содержимое файла и сообщение в нижней части экрана, показывающее, сколько в нем строк и символов.

Вставка текста.

Хотя редактор vi запущен, вы не можете сразу начать ввод нового текста, т.к. находитесь в командном режиме. Для того чтобы вставлять текст в файл, необходимо перейти в режим вставки. Воспользуйтесь командой i редактора vi (т.е. нажмите клавишу i)и начинайте набор текста. Команда i вставляет текст на место курсора.

При вставке текста вы можете напечатать любое количество строк (после каждой строки нажимать Enter)и можете корректировать ошибки, используя клавишу возврата Backspace.

Для завершения работы в режиме вставки и для возврата в командный режим нажмите Esc.

В командном режиме вы можете использовать клавиши со стрелками для перемещения по файлу.

Существует несколько способов вставки текста, отличных от использования команды i. Команда a добавляет в текст сразу после курсора. Для того, чтобы начать вставку текста в строку ниже текущей, используйте команду o.

Удаление текста.

В командном режиме команда x удаляет символ перед курсором.

Вы можете удалять целые строки, набирая команду dd (т.е. нажимая d дважды).

Чтобы удалить слово, на котором находится курсор, используйте команду dw.

Изменение текста.

Вы можете заменить фрагменты текста, используя команду R. Использование команды R для редактирования текста очень похоже на команды i и a, но R заменяет прежний текст вместо вставки в него.

Команда r заменяет один символ, отмеченный курсором.

Команда ~ изменяет размер буквы, отмеченной курсором - делает большую маленькой и наоборот.

Перемещение курсора.

Клавиши управления курсором позволяют перемещать курсор по файлу. Помимо перемещении по тексту с помощью стрелок, вы также можете использовать команды h,j,k,l для перемещения курсора влево, вниз, вверх, вправо соответственно.

Перемещение вперед: i, Spacebar, клавиша перемещения вправо

Синтаксис:

[N]i

[N]Spacebar

[N]

Перемещают курсор на один символ вперед. Если задан счетчик N, то перемещают на указанное число символов. Нельзя переместиться за предел конца строки.

Перемещение назад: h,Backspace, клавиша перемещения влево

Синтаксис:

[N]h

[N]Bksp

[N]

Перемещают курсор на один символ назад. Если задан счетчик N, то перемещает назад на указанное число символов. Нельзя переместиться за предел начала строки.

Следующая строка: +, Return, Ctrl-N, LF, j, клавиша перемещения вниз

Синтаксис:

[N]+

[N]Return

Перемещает курсор вниз на начало следующей строки. Если задан счетчик N, то перемещает на указанное число строк.

[N]j

[N]Ctrl-N

[N]LF

[N]

Перемещает курсор на одну строку, оставляя его в прежней колонке.

Предыдущая строка: -,k, Ctrl-P, клавиша перемещения вверх

Синтаксис:

[N]k

[N]Ctrl-P

[N]

Перемещает курсор на одну строку вверх, оставляя его в прежней колонке. Если задан счетчик, то курсор перемещается на указанное число строк.

[N]-

Перемещает курсор на начало предыдущей строки.

Начало строки: 0(ноль), ^

Синтаксис:

[N]^

[N]0

Перемещает курсор на начало текущей строки. 0 всегда возвращает курсор на первый символ текущей строки. Знак ^ перемещает курсор на первый символ строки, который не является меткой табуляции или пробелом.

Конец строки: $

Синтаксис:

[N]$

Перемещает курсор в конец текущей строки. Курсор находится на последним символом в строке. Если задан счетчик N, то курсор перемещается на (N-1) строк вперед в конец строки.

Перейти к строке: G

Синтаксис:

[N]G

Перемещает курсор на начало строки с номером N. Если N не задано, то курсор перемещается на начало последней строки файла. Для определения номера текущей строки нажмите Ctrl-G.

Колонка: |

Синтаксис:

[column]|

Перемещает курсор в текущей строке в позицию с номером column. Если этот аргумент не задан, то курсор перемещается в первую позицию текущей строки.

Перемещение вперед на слово: W, w

Синтаксис:

[N]w

[N]W

Перемещает курсор вперед на начало следующего слова. Команда w ищет слово, определенное как строка буквенно-числовых символов, разделенных пунктуацией или пустым пространством. Команда W ищет слово, определенное как строка непустых символов.

Перемещение назад на слово: B, b

Синтаксис:

[N]b

[N]B

Перемещение курсора вперед на начало следующего слова. Команда b ищет слово, определенное как строка буквенно-числовых символов, разделенных пунктуацией или пустым пространством. Команда B ищет слов, определенное как строка непустых символов. Если курсор уже находится внутри слова, то он перемещается назад, на начало этого слова.

Перемещение в конец слова: E, e

Синтаксис:

[N]e

[N]E

Перемещает курсор в конец слова. Команда e перемещает курсор на последний символ слова, где слово определено как строка буквенно-числовых символов, разделенных пунктуацией или пустым пространством. Команда Е перемещает курсор на последний символ слова, слово определено как строка непустых символов. Если курсор уже находится внутри слова, то он перемещается на конец этого слова.

Предложение: (, )

Синтаксис:

[N](

[N])

Перемещает курсор в начало (левая скобка) или в конец предложения (правая скобка). Предложение определено как последовательность символов, заканчивающаяся точкой ".", знаком вопроса "?" или восклицательным знаком "!" и следующими за ними двумя пробелами или символами новой строки. Предложение начинается с первого непустого символа, за которым следует все предложение.

Согласующий разделитель: %

Синтаксис:

%

Перемещает курсор на согласующий разделитель, которым могут быть круглая, операторная или фигурная скобка.

Это очень удобно при согласовании пар вложенных круглых, операторных и фигурных скобок.

Возврат на исходное место.

Верх экрана: H

Синтаксис:

[offset]H

Перемещает курсор верхний левый угол экрана. Если задан параметр offset, то курсор возвращается на [offset-1] линий от вершины экрана. Необходимо отметить, что команда dH уничтожает все строки от текущей строки до верхней строки, показанной на экране.

Середина экрана: M

Синтаксис:

М

Перемещает курсор на начало средней линии экрана. Эту команду можно использовать для быстрого перемещения курсора в середину экрана сверху или снизу экрана. Команда dM удаляет все строки, от текущей до выбранной командой М.

Низ экрана: L

Синтаксис:

[offset]L

Перемещает курсор а нижнюю строку экрана. Используйте команду для быстрого перемещения в нижнюю часть экрана. Если задан параметр offset, то курсор возвращается на (offset-1) линий от самого низа экрана. Команда dL уничтожает все линии от текущей до нижней линии, показанной на экране.

Команды экрана.

Команды экрана не являются командами управления перемещения курсора и не могут использоваться в командах удаления как разграничители фрагментов текста. Эти команды осуществляют перемещение текста и удобны для страничной организации информации из файла.

Прокрутка: Ctrl-U, Ctrl-D

Синтаксис:

[size]Ctrl-U

[size]Ctrl-D

Прокручивает экран на половину окна вверх (Ctrl-U) или вниз (Ctrl-D). Если задан аргумент size, то производится прогон на (size) строк. Это значение запоминает для всех последующих операций прокрутки.

Разбиение на страницы: Ctrl-F, Ctrl-B

Синтаксис:

[N]Ctrl-F

[N]Ctrl-B

Постранично листает экран вперед и назад. Предварительно заданный счетчик указывает число страниц, на которое надо продвинуть вперед или назад.

Состояние: Ctrl-G

Синтаксис: Ctrl-G

Высвечивает состояние редактора vi в строке состояния: имя редактируемого файла, был ли он изменен, номер текущей строки, число строк в файле и процент файла (в строках), предшествующий месту нахождения курсора.

Обнуление экрана: z

Синтаксис:

[linenumber]z[size]Enter

[linenumber]z[size].

[linenumber]z[size]

перерисовывает содержимое экрана дисплея с текущей строки. Если вы зададите аргумент size, то число высвечиваемых линий равно size. Если задан аргумент linenumber, то строка с номером linenumber размещается вверху экрана. Если последний аргумент Enter, то текущая строка размещается вверху экрана. Если последний аргумент ., то текущая строка размещается в середине экрана. Если последний аргумент -, то текущая строка размещается внизу экрана.

Перерисовка: Ctrl-R, Ctrl-L

Синтаксис:

Ctrl-R

Ctrl-L

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

Вставка текста.

Команды вставки текста всегда переводят вас в режим вставки. Выход из режима вставки осуществляется нажатием клавиши Esc. При применении этих команд текст не уничтожается.

Вставить: I, i

Синтаксис:

i[text]Esc

I[text]Esc

Вставляет текст Text в буфер редактирования. Команда i переводит вас в режим вставки. Текст вставляется перед курсором. Для вставки новой строки нажмите Enter. Для выхода из режима вставки нажмите Esc. Команда I также переводит вас в режим вставки, но начинает вставлять текст с начала текущей строки, а не перед курсором.

Присоединить: A, a

Синтаксис:

a[text]Esc

A[text]Esc

Присоединяет текст text к содержимому буфера редактирования. Команда a работает точно также как команда i, только вставка текста начинается после курсора, а не перед ним. Это является одной из возможностей добавления текста в конец строки. Команда А начинает вставку текста в конце текущей строки, а не после курсора.

Начать новую строку: O, o

Синтаксис:

o[text]Esc

O[text]Esc

Открывает новую строку и вставляет текст. Команда о открывает новую строку под текущей строкой, команда О открывает новую строку над текущей строкой. После того, как строка открыта, обе команды работают аналогично команде I.

Удаление текста.

Большинство команд удаления текста используют в качестве оператора выполнения клавишу D. Этот оператор удаляет текстовые объекты, ограниченные курсором и командой перемещения курсора. Удаленный текст всегда продолжает хранится в буфере.

Удалить символ: X, x

Синтаксис:

[count]x

[count]X

Удаляет символ. Команда х удаляет символ, находящийся под курсором. При заданном начальном значении счетчика count удаляется (count) символов вправо от символа, стоящего под курсором. Команда X удаляет символ, расположенный перед курсором. При заданном впереди счетчике count удаляется (count) символов в обратном направлении, начиная с символа, стоящего перед курсором.

Удалить: D, d

Синтаксис:

d cursor-movement

dd

D

Удаляет текстовый фрагмент. Команда d в качестве аргумента использует cursor-movement (перемещение курсора). Если cursor-movement - внутристрочная команда, то производится удаление от курсора до конца текстового фрагмента, ограниченного аргументом cursor-movement.

Удаление в прямом направлении (вперед) удаляет символ, расположенный под курсором; удаление в обратном направлении (назад) не выполняется. Если cursor-movement - многострочная команда, то удаление производится с текущей строки, включая ее саму, до текстового фрагмента, ограниченного аргументом cursor-movement.

Команда dd удаляет целые строки. Команда D удаляет все от позиции курсора, включая ее, до конца текущей строки.

Удаленный текст автоматически заносится в стек буфера, пронумерованный от 1 до 9. Самый последний удаленный текст также размещается в специальном буфере удаления, который имеет логический номер 0. Этот специальный буфер делается буфером по умолчанию для всех команд put (поместить), используя двойные кавычки " для указания номера буфера для команд удаления, помещения и выставки. Доступ к буферам с 1 по 9 может быть организован командами р, Р (поместить) с присоединением двойных кавычек к номеру буфера.

Например, команда "4р помещает содержимое буфера удаления с номером 4 в буфер редактирования под текущей строкой. Последний удаленный текст помещается по умолчанию и указание номера буфера при этом не требуется.

Модификация текста.

Команды модификации текста вызывают замену одного текста другим. Это означает, что некоторый текст, вероятно, будет удален. Все команды модификации текста могут быть отменены командой u.

Отменить сделанное: U, u

Синтаксис:

u

U

Уничтожает результат последней команды вставки или удаления. Команда u уничтожает результат выполнения последней команды вставки или удаления. Это означает, что после выполнения команды вставки команда u удаляет вставленный текст, а после команды удаления - вставляет текст обратно. Команда U восстанавливает текущую строку в ее первоначальном состоянии, независимо от того, сколько раз она редактировалась с того момента, когда вы перешли на нее.

Повторить: .

Синтаксис:

.

Повторяет последнюю команду вставки или удаления.

Существует специальный случай для повтора команд p и Р. Когда эти команды стоят перед именем буфера удаления, следующая команда u высвечивает содержимое буфера удаления ("р4u).

Изменить: C, c

Синтаксис:

c cursor-movement text Esc

C text Esc

cc text Esc

Заменяет текстовый фрагмент на текст text. Текст вставляется как по команде i. Знак $ отмечает конец измененного текста. Команда с изменяет произвольно выбранный текстовый фрагмент, ограниченный курсором и аргументом cursor-movement. Команда С и сс обрабатывают строки целиком и по выполняемым функциям идентичны.

Заменить: R, r

Синтаксис:

[count]r char

R text Esc

Заменяет символ или строку на char или text. Используйте r для замены одиночного символа, R - для замены всей строки. Счетчик count обеспечивает count-кратную вставку текста.

Подставить: S, s

Синтаксис:

s text Esc

S text Esc

Замещает текущий символ или текущую строку текстом text. Используйте команду s для замены одиночного символа новым текстом. Используйте команду S для замены текущей строки новым текстом.

Объединить строки: J

Синтаксис:

[N]J

Объединяет текущую строку со следующей строкой. Если задан счетчик N, то объединяется N строк.

Сдвинуть: < , >

Синтаксис:

[N] > [cusor-movement]

[N] < [cusor-movement]

[N] > >

[N] < <

Сдвигает текст вправо( > ) или влево ( < ). Текст сдвигается на количество позиций, определяемое значением shiftwidth, которое обычно равно 8 пропускам. Обе команды, < и > , сдвигают все строки в текстовом объекте, ограниченные курсором и аргументом cursor-movement.Команды < < и > > выполняют действия над целыми строками. Все версии команды могут использовать стоящий впереди счетчик для увеличения числа объектов, над которыми выполняются операции.

Перемещение текста.

Команды перемещения текста перемещают его в буферы и из буферов, поименованных от a до z и из буферов удаления с номерами от 1 до 9. Эти команды или "выдергивают" текст из буфера редактирования и помещают его в определенный буфер, или возвращают текст в буфер редактирования из поименованного буфера или буфера удаления. По умолчанию текст помещается и извлекается из безымянного буфера, в котором также размещается последний удаленный текст.

Таким образом, совершенно резонно удалить текст, затем передвинуть курсор в то место, куда вы хотите вставить удаленный текст, и после этого поместить текст обратно в буфер редактирования, в новое место, с помощью команды р или Р.

Поименованные буферы наиболее удобны для сохранения нескольких частей текста, которые вы хотите иметь постоянно наготове для более позднего доступа к этим текстам, или их перемещения и переразмещения. Эти буфера поименованы буквами от a до z. Для ссылки в команде на один из этих буферов (или на один из буферов удаления) используйте знак кавычки ("). Например, для извлечения строки из файла в буфер а наберите "ауу.

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

Поместить: P, p

Синтаксис:

["номер буфера]р

["номер буфера]Р

Помещает текст из буфера в буфер редактирования. Если имя буфера-источника не указано, то текст выбирается из "безымянного" буфера. Команда р помещает текст под текущей строкой или после курсора, в зависимости от того, содержит буфер полную строку или нет.

Извлечь: Y, y

Синтаксис:

["letter]y cursor-movement

[N]["letter]yy

[N]{"letter]Y

Копирует текст из буфера редактирования в поименованный буфер. Если имя буфера не указано, текст помещается в "безымянный" буфер. Когда в качестве аргумента используется cursor-movement, то извлекается ограниченный текстовый объект. Команды Y и yy извлекают одну строку, или, если задан счетчик, несколько строк.

Поиск.

Команды поиска осуществляют поиск текста, соответствующего заданному регулярному выражению и находящегося в буфере редактирования в прямом и обратном направлении.

Найти: /, ?

Синтаксис:

/[pattern]/[offset]Enter

/[pattern]Enter

?[pattern]?[offset]Enter

?[pattern]Enter

Осуществляет поиск текста, соответствующего шаблону pattern, в прямом (/) или обратном (?) направлении. Строка является действительным регулярным выражением. Если шаблон pattern не задан, то для поиска используется последнее значение pattern. После второго разделителя может быть задан аргумент offset, определяющий начало строки, относительно строки, в которой был найден шаблон pattern.

Например, /word/ находит начало строки, непосредственно предшествующей строке, содержащей слово "word". /word/+2 находит начало строки, стоящей на две строки дальше от той строки, которая содержит слово "word".

Следующая строка: N, n

Синтаксис:

n

N

Повторяет последнюю команду поиска, команда n повторяет поиск в том же направлении, что и последняя команда поиска. Команда N повторяет поиск в направлении, противоположном направлению последней команды поиска.

Найти символ: F, f

Синтаксис:

f char

F char

;

,

Находит символ char в текущей строке. Команда f выполняет поиск в прямом направлении, команда F -в обратном. Знак (;) повторяет поиск последнего символа. Запятая (,) меняет направление поиска на противоположное.

Перейти к символу: T, t

Синтаксис:

t char

T char

;

,

Помещает курсор над символом char. Знак (;) повторяет поиск последнего символа. Знак (,) меняет направление поиска на обратное.

Отменить: M

Синтаксис:

m letter

Отмечает место в файле, где находится буква letter. Вы можете переместиться к этой отметке при помощи команды to mark, описанной ниже. Это удобно использовать для создания метки, например а, перемещения курсора от этой метки в необходимом направлении и затем удаления от курсора до метки а с помощью команды d'a.

Перейти на метку (to mark): ',`

Синтаксис:

'letter

`letter

Перемещает курсор на метку letter. Эта команда позволяет вам переместиться к месту расположения метки. Метки обозначаются одиночными строчными буквами алфавита. Прежде чем вы сможете переместиться к метке, вам необходимо сначала создать ее с помощью команды m. Знак "`" перемещает вас непосредственно в позицию расположения метки внутри строки. Знак "'" перемещает на начало строки, содержащей метку. Необходимо отметить, что эти команды являются также разрешенными командами перемещения курсора.

Редактирование другого файла.

Для того, чтобы отредактировать другой файл, используйте команду :e. Когда вы наберете :, курсор переместиться на последнюю строку экрана, поскольку вы перейдете в режим последней строки.

Например, чтобы прекратить редактирование файла test и перейти к редактированию файла newf, используйте команду :e newf.

Если вы используете команду :e без предварительного сохранения файла, то получите сообщение об ошибке:

Use edit! To abort changes, or w to save changes

которое означает, что vi не будет редактировать другой файл, пока не будет сохранен первый. В этот момент вы можете использовать команду :w, чтобы сохранить исходный файл, а затем использовать :e или использовать команду :e! newf. "!" сообщает vi что вы на самом деле собираетесь редактировать новый файл без сохранения изменений, которые делались в первом.

Сохранение файла.

В режиме последней строки могут выполняться некоторые расширенные команды.

Одна из них - q!, которая позволяет выйти из vi без внесения изменений в ранее существовавший файл.

Команда :wq записывает изменения в файл (сохраняет), а затем выходит из vi.

Команда ZZ (без :) эквивалентна :wq.

Помните, что вы должны нажимать Enter после набора команды в режиме последней строки. Если вы хотите записать файл без выхода из vi, используйте просто :w.

:x - содержимое буфера редактирования записывается в файл только при условии, что были сделаны какие-либо изменения.

Команды выхода и переключения.

Переключить в режим ex: :

Синтаксис:

:

вводит режим переключения в ex для выполнения команды редактора ex. В строке состояния появляется двоеточие ":" как подсказка-указание для ввода ex-команды. Затем вы можете ввести ex-команду, закончить ее нажатием Enter или Esc, после чего эта команды выполнится. Затем вам предложат нажть клавишу Enter для возврата в режим команд vi.

Выход из редактора: ZZ

Синтаксис:

ZZ

Осуществляет выход из режима команды vi и записывает редактируемый файл, если были сделаны какие-либо изменения.

Возврат в режим ex: Q

Синтаксис:

Q

Вводит режим редактора ex (редактирует тот же файл).вы можете вернуться в режим редактора vi, набрав команду vi в редакторе ex.

Команды редактора ex.

Ввод двоеточия (:) при нахождении в режиме команды выдает подсказку-указание (:) в строке состояния. Это подсказка для ввода команды, доступной в строковом редакторе ex. В основном, ex-команды позволяют записывать в файлы и читать из файлов, выполнять команды MINIX или менять редактируемые файлы.

Большинство команд выполняют действия, которые оказывают влияние на текущий файл. Текущим обычно считается файл, который вы выбрали при запуске редактора vi, хотя текущий файл, который вы выбрали при запуске команды редактора vi, хотя текущий файл может быть изменен командой file(f) или командой next(n). Все подобные команды прекращаются при нажатии клавиши Esc.

Структура команды.

В качестве имен большинства ex-команд используются английские слова, а доступной для использования аббревиатурой являются начальные буквы этих слов. Чем чаще используется слово, тем короче аббревиатура.

Большинство команд используют стоящие впереди адреса, определяющие строки, над которыми необходимо выполнять действия. Ряд команд также может содержать следующий за ними счетчик count, показывающий число строк, которые захватываются при вызове команды. Числа count при необходимости округляются в сторону меньшего значения. Таким образом, команда 10р высвечивает 10 строку в буфере, а команда move5 перемещает текущую строку за строку с номером 5.

Адресование команды:

Следующие обозначения определяют синтаксис адресования строк в ex-командах:

. (точка)

текущая строка. Большинство команд представляет текущую строку как последнюю строку, которую они обрабатывали. Текущая строка для большинства команд является адресом по умолчанию, поэтому знак точки редко используется в качестве адреса.

n

n-строка в буфере редактирования; строки пронумерованы последовательно, начиная с 1.

$

последняя строка в буфере.

+n или -n

смещение n относительно текущей строки буфера. Формы записи .+3, +3, +++ идентичны. Если текущая строка имеет номер 100, то приведенные записи указывают на строку с номером 103.

/pattern/ или ?pattern?

просматривает текст вперед или назад соответственно в поиске регулярного выражения, заданного шаблоном pattern. Просмотр ведется обычно до конца буфера. Если вы хотите только распечатать следующую строку, содержащую pattern, хвостовые знаки /, ? могут быть опущены. Если параметр pattern опущен или пустой, то выделяется строка, соответствующая последнему определенному регулярному выражению. Формы Enter и ??Enter выполняют просмотр, используя последнее указанное регулярное выражение.

'x

строка с меткой. Метки устанавливаются командой m редактора vi, используя одиночную строчную букву в качестве имени метки. На отмеченную строку позже можно сослаться с помощью записи 'x, где х - имя метки.

Адреса команд состоят из серии адресов , разделенных знаками (,) или (;). Если адрес разделен знаком (;), то знак текущей строки (.) устанавливается в значение предыдущего адресного выражения, прежде чем будет интерпретирован следующий адрес. Если новая команда имеет два адреса, то первая адресуемая строка должна предшествовать второй строке в буфере. В списке адресов допускается спецификация пустого адреса; в этом случае по умолчанию принимается знак текущей строки (.). Таким образом, ",100" эквивалентно ".,100". Если перед командой, не требующей адреса, он все же задан, то это считается ошибкой.

Формат команды:

Для всех ex-команд используется следующий формат:

[адрес][команда][!][параметры][счетчик][флаги]

Все части необязательны в зависимости от команды и ее опций.

Команды списка аргументов:

Команды списка аргументов позволяют вам работать с набором файлов посредством запоминания списка имен файлов, которые определяются при активизации редактора vi. Команда args позволяет проверить этот список. Команда file дает информацию о текущем файле. Команда n(next)позволяет либо редактировать следующий файл из списка аргументов, либо изменить список. Команда rewind позволяет перезапустить редактирование файлов в списке. Все эти команды описаны ниже.

args

высвечивает элементы списка аргументов, при этом текущий аргумент заключен в квадратные скобки. Например, список может выглядеть следующим образом: file1 file2 [file3] file4 file5. Текущим является file3.

f

высвечивает имя текущего файла, независимо от того, был ли он изменен с момента последней команды write.

n

редактирует следующий файл из списка аргументов, показанного в командной строке.

n!

Этот вариант подавляет предупреждение о модификациях, не записанных в буфер, отвергая необратимо любые изменения, которые могли бы быть выполнены.

n filelist

указанный список файлов filelist расширяется, и результирующий список заменяет текущий список аргументов.

rew

порядок аргументов в списке меняется на обратный, и редактируется первый по новому порядку файл.

rew!

Порядок аргументов в списке меняется на обратный и подавляются любые изменения, сделанные в текущем файле.

Команды редактирования:

Для редактирования файла, отличного от редактируемого в данное время, вы можете использовать один из вариантов команды e. Имя текущего файла всегда запоминается редактором vi и помечается знаком (%). Имя предыдущего файла в буфере редактирования отмечено знаком (#).

e file

используется для начала редактирования нового файла. Редактор сначала проверяет, был ли модифицирован буфер с момента использования последней команды w. Если это было сделано, то выдается предупреждение и команда прерывается. Иначе команда удаляет желаемое содержимое буфера редактирования, делает указанный файл текущим и высвечивает новое имя файла. После проверки, что этот файл действителен (т.е. не является двоичным файлом, каталогом или устройством), редактор читает файл в свой буфер. Если чтение файла выполнено без ошибок, в строке состояния появляется число прочитанных строк и символов. Текущей строкой изначально считается первая строка файла.

e! file

такой вызов подавляет сообщения о модификациях, которые были сделаны и не записаны из буфера редактирования, вызывая тем самым подавление всех изменений, которые были выполнены перед редактированием нового файла.

e +n file

заставляет редактор начать редактирование с n-строки. Аргумент n может быть также командой редактора, не содержащей пробелы, например, +/pattern.

Ctrl-^

Это сокращенный эквивалент :e #Enter, который возвращает к предыдущей позиции в последнем редактируемом файле. Если вы не хотите записывать файл, нужно использовать запись вида :e! #Enter.

Команды записи:

Команды записи позволяют переписывать все содержимое буфера редактирования или его часть в текущий или какой-либо другой файл. Эти команды перечислены ниже.

w file

переписывает сделанные изменения обратно в файл file, высвечивая количество переписанных строк и символов. Обычно параметр file пропускается и буфер переписывается в текущий файл. Если имя file определено, то текст переписывается в этот файл. Редактор осуществляет запись в файл, только если это текущий файл и он редактируется, или если файл не существует (если этот файл не существует, то он создается). В других случаях для записи можно задать команду w! Имя файла меняется, если оно отлично от текущего; текущая строка никогда не изменяется. Если при записи из текущего или редактируемого файла возникает ошибка, редактор выдает сообщение No write since last change (с момента последнего изменения запись не производилась), даже если буфер не был предварительно модифицирован.

w > > file

добавляет содержимое буфера в конец существующего файла. Предыдущее содержимое файла не разрушается.

w! name

осуществляет запись в любой файл, который разрешен со стороны системы.

Команды чтения:

Команды чтения позволяют читать текст в буфер редактирования, начиная с любого места.

r file

помещает копию текста из заданного файла в буфер редактирования после определенной строки. Если файл не задан, то используется текущее имя файла. Если буфер файла пустой, то эта команда трактуется как команда e. адрес 0 разрешен для этой команды, он вызывает чтение файла с начала буфера.

Когда команда r заканчивается успешно, то выдается статистика, подобная той, которая сопровождает выполнение команды e. после команды r текущей считается последняя прочитанная строка.

Глобальные команды.

Глобальные команды g и v управляют вызовом одной или большего числа других команд, выполняющих преобразование в множестве строк, выбранных регулярным выражением.

Команда g наиболее часто используется для печати, подстановки и удаления множества строк:

m,ng/re/cmd - для всех строк m и n, которые соответствуют re выполняет cmd

m,nv/re/cmd - для всех строк m и n, которые не соответствуют re выполняет cmd

g/s1/p - печатает все строки, содержащие строку s1

g/s1/s//s2 - замещает первое вхождение s1 во всех строках, содержащих ее, на строку s2

g/s1/s//s2/g - заменяет все вхождения s1 на s2. Это распространяется также на многократное вхождение s1 в одной строке

g/s1/s//s2/gp - работает аналогично предыдущей команде, дополнительно выводя все измененные строки

g/s1/s//s2/gc - приглашает вас подтвердить все замещения s1 на s2. Для положительного ответа нажмите y, для отрицательного - любую другую клавишу

g/s0/s/s1/s2/g - отмечает все линии, содержащие строку s0 и -затем только для них заменяет все вхождения s1 и s2

g!/pattern/cmd - запускает команды cmd в каждой строке, не соотвествующей шаблону pattern

g/^/s// /g - вставляет пробелы в начале каждой строки файла.

Командам g и v могут предшествовать номера строк, ограничивающие диапазон. По умолчанию принимается диапазон 1, $.

g/.../p - печатает все строки, соотвествующие регулярному выражению ...

g/.../d - удаляет все строки, соотвествующие ...

g/.../s//repl/p - заменяет первое вхождение ... в каждой строке на repl, печатает измененные строки

g/.../repl/gp - заменяет каждое ... на repl, печатает измененные строки

g/.../s/pat/repl/ - в строках, соответствующих ..., заменяет первую pat на repl

g/.../s/pat/repl/p - в строках, соответствующих ..., заменяет первую pat на repl и печатает

g/.../s/pat/repl/gp - в строках, соответствующих ..., заменяет все pat на repl и печатает

v/.../s/pat/repl/gp - в строках, не соответствующих ..., заменяет все pat на repl и печатает

v/^$/p - печатает все непустые строки

Команды, управляемые командами g и v, также могут использовать номера строк. Текущая строка настраивается по очереди на каждую выбранную строку.

g/thing/...+lp - печатает каждую строку с thing и следующую.

Команда подстановки s заменяет одну последовательность символов другой:

s/old/new - заменяет первую old на new в текущей строке

s/old/new/p - заменяет первую old на new и печатает строку

s/old/new/g - заменяет каждую old на new в текущей строке

s/old/new/gp - заменяет каждую old на new и печатает строку

Заменяется только самое левое вхождение образца в строке, если не написана буква g. Команда s выводит измененную строку только в том случае, когда она оканчивается буквой р.

Если подстановкой вы не добились того, чего хотели, с помощью команды u можно уничтожить последнюю подстановку. Текущая строка должна быть настроена на преобразованную строку.

u - аннулирует последнюю сделанную подстановку

up - аннулирует последнюю подстановку и печатает

Команды перемещения текста.

Команды перемещения текста в большой степени могут быть заменены командами, доступными в редакторе vi. Однако, очень удобны следующие две команды. Команда m перемешает группу смежных строк, а команда t копирует группу строк:

,n,md - перемещает строки m по n за строку d

m,n,td - копирует строки m по n за строку d

Если исходные строки не определены, используется текущая строка. Строка назначения d не может быть в диапазоне m, n-1. Ниже приведено несколько общих идиом, включающих m и t.

m + - помещает текущую строку после следующей

m-2 - помещает текущую строку перед предыдущей

m-- - то же самое: -- это то же, что -2

m$ - помещает текущую строку в конец (m0 помещает в начало)

t. - дублирует текущую строку (t$ дублирует в конце)

-,.t. - дублирует предыдущую и текущую строки

1,$t$ - дублирует все множество строк

Переключение в MINIX.

Часто у Вас возникает необходимость выйти из редактора и выполнить обычные команды системы MINIX.

! < имя команды MINIX >

Остаток строки после знака (!) посылается в MINIX для выполнения. Внутри текста команды символы '%' и '#' расширяются как имена текущего файла и последнего редактируемого файла, а символ '!' заменяется на текст предыдущей команды. Таким образом, в частности, '!!' повторяет последнее такое переключение в MINIX.

Регулярные выражения.

Регулярное выражение определяет набор строк, состоящих из символов. Член этого набора строк называется "заменяемым" на регулярное выражение. На предыдущее регулярное выражение ссылка может осуществляться через пустое регулярное выражение, например, "//" или "??".

\с - отменяет специальный смысл символа с;

^ - соответствует началу строки, когда ^ начинает образец;

$ - соответствует концу строки, когда $ заканчивает образец;

. - совпадает с любым одиночным символом;

[...] - соответствует одному любому символу в ...; допустимы диапазоны типа а-z;

[^...] - cоответствует любому одиночному символу, не входящему в ...; допустимы диапазоны;

г* - cоответствует нулевому или более числу вхождений r, гдеr символ, или [...];

Символу перевода строки не соответствует ни одно регулярное выражение.

Рисунок 5.4.1.

Регулярные выражения, использующие *, выбирают самое левое совпадение с образцом до тех пор, пока это возможно. Отметим, что х* может соответствовать нулю, а хх* одному или более символу.

Специальные опции для vi.

Команда vi имеет специальные опции. Они позволяют:

  • восстановить потерянный файл, если работа vi была прервана;

  • поместить в буфер редактирования несколько файлов и редактировать их по порядку;

  • просмотр файла без риска случайного внесения изменений в него.

Восстановление потерянного файла.

Если случайно произошло прерывание работы редактора vi, то не производится запись текста из буфера обратно в файл. Но vi сохраняет копию буфера. Когда вы вновь зарегистрируетесь в системе UNIX, вы можете восстановить файл с помощью опции -r. Введите:

vi -r filename < CR >

Все или почти все изменения, которые вы выполнили до прерывания, вновь появятся в буфере vi, и вы снова сможете продолжить редактирование файла или записать буфер в файл и завершить работу с vi.

Редактирование нескольких файлов.

Если вы хотите редактировать в одном сеансе более одного файла, то введите команду vi, указав имя каждого файла:

vi file1 file2 < CR >

vi ответит, сколько файлов вы будете редактировать.

Например:

2 files to edit

После того, как вы отредактировали первый файл, запишите все изменения из буфера в файл file1:

:w < CR >

Система ответит на эту команду сообщением в низу экрана. В нем она напечатает имя файла, число строк и символов в этом файле. Затем вы можете начать редактировать следующий файл, задав команду:

:n < CR >

Система в низу экрана сообщит вам имя следующего файла, который вы будете редактировать, и число строк и символов в этом файле.

Просмотр файла.

Один из способов просмотра файла, это воспользоваться командами прокрутки и поиска. Однако вы можете защитить себя от случайного внесения изменений в файл во время сеанса редактирования. Чтобы воспользоваться опцией "только чтение", вызовите редактор следующим образом:

view file < CR >

В таблице приведены специальные опции редактора vi.

Рисунок 5.4.2.