Операционная система Linux

Работа с фрагментами текста


Любая команда перемещения определяет две точки в тексте: ту, в которой был курсор до перемещения, и ту, в которую он переместился в результате данной команды. Расположенный между этими двумя точками отрезок текста однозначно задается командой перемещения. Например, команда ")" захватывает текст от текущего положения курсора до начала следующего предложения. Vi позволяет применить к этому фрагменту любую команду редактирования – так устроены гнездовые команды. Гнездовая команда состоит из действия и следующего за ним перемещения. Перемещение задает фрагмент текста, а действие определяет, что с этим фрагментом сделать. Например, команда "d)" удалит весь текст от текущей позиции курсора до начала следующего предложения. Наиболее полезные действия – "d" ("delete"), "c" ("change"), ">" и "<" (сдвинуть), "y" (запомнить) и "gq" (отформатировать).

Гнездовая команда. Команда редактора Vi, позволяющая применить указанное действие к указанному отрезку текста. Отрезок задается стандартной командой перемещения по тексту.

Очень часто возникает необходимость заменить фрагмент в тексте: слово, предложение, строку и т. д. Это можно сделать в два действия: сначала удалить часть текста, затем перейти в режим вставки и вставить замену. Vi предоставляет возможность упростить эту операцию, сведя два действия к одному: заменить. Гнездовая команда "c" предназначена именно для этого. Например, команда "cw" (буквально: "change word") заменит текст от курсора до начала следующего слова (так можно заменить одно слово), "c)" заменит текст от курсора до начала следующего предложения.

Мефодий не забыл, что команды перемещения можно использовать с множителями, и попробовал заменить сразу три слова в своем файле на другие: для этого он в командном режиме подогнал курсор в начало слова "первая" и набрал "c3w " ("заменить фрагмент отсюда до начала третьего слова", буквально: "change 3 words"). Результат этой команды выглядел так:


Это файл для примеров. Пример 1. Моя #vi... ~ ~ ~ -- ВСТАВКА -- 3,5 Весь

Пример 9.6. Команда замены в Vi (html, txt)

В примере знак "#" обозначает позицию курсора: как видно, Vi удалил три слова, попавшие в зону действия команды и сразу перешел в режим вставки. Мефодию осталось только набрать что-то взамен.

Перестановка частей – типичная задача, возникающая в процессе редактирования. Для перестановки требуется удалить фрагмент в одном месте текста и вставить его же в другом. Для решения первой части задачи в Vi нет специальных средств, потому что любая команда удаления ("d", "c", "x" и др.) сохраняет удаленный текст в специальном регистре. Для вставки последнего удаленного фрагмента служит команда "p" в командном режиме (от "put", положить). При помощи этой команды Мефодий может вставить только что удаленные им командой "c3w" три слова:

Это файл для примеров. Пример 1. Моя новая строка для vi... первая строка в ~ ~ 4,1 Весь

Пример 9.7. Вставка удаленного фрагмента (html, txt)

Для того чтобы скопировать фрагмент текста, служит команда "y" (от "yank" – забрать, сдернуть): она не удаляет текст, а просто сохраняет его в том же регистре, что и команды удаления. Команду "y" можно использовать в гнездовых командах, например, "y5w" сохранит в регистре фрагмент текста от курсора до начала пятого слова. Вставить скопированный фрагмент можно все той же командой "p". Однако таким способом можно вставлять только текст, удаленный или скопированный последним, для хранения нескольких разных фрагментов текста следует использовать именованные регистры (см. подробнее в руководстве по Vim).

Для того чтобы применить команду к нескольким строкам текста, не обязательно подгонять к ним курсор. В командной строке Vi любой команде может предшествовать указание диапазона в тексте, к которому следует эту команду применить. Команды с указанием диапазона выглядят так: ":начало,конец}команда", где начало и конец – это адреса начальной и конечной строк диапазона (т. е. фрагмента текста), а команда – это команда режима командной строки, такая как ":w" или ":r". Многие команды командного режима (в частности, "d" и "y") доступны также и в командной строке. В качестве адреса можно использовать номера строк в файле (команда ":1,5y" будет означать "скопировать в регистр строки с первой по пятую"), есть специальные обозначения для текущей строки ("."), последней строки ("$") и всего файла ("%"). Указать границу диапазона можно и при помощи шаблона: граничной будет считаться та строка, в которой обнаружится шаблон.

Последним свойством Мефодий воспользовался, чтобы удалить плоды своих экспериментов: он выполнил команду ":/Пример 1/,$d" (от строки "Пример 1" до конца файла – удалить):

Это файл для примеров. ~ ~ ~ 3 fewer lines

Пример 9.8. Удаление диапазона по шаблону. Выполнена команда ":/Пример 1/,$dEnter". (html, txt)


Содержание раздела