Командная строка Linux
Шрифт:
y$
От текущей позиции курсора до конца текущей строки
y0
От текущей позиции курсора до начала строки
y^
От текущей позиции курсора до первого непробельного символа в строке
yG
От текущей строки до конца файла
y20G
От текущей строки до 20-й строки файла
Давайте попробуем что-нибудь скопировать и вставить. Поместите курсор на первую строку и введите yy, чтобы скопировать текущую строку. Далее, переместите курсор в последнюю строку (G) и введите p, чтобы вставить скопированную строку ниже текущей:
Съешь
Строка 2
Строка 3
Строка 4
Строка 5
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Введите команду u, чтобы отменить изменение. Оставив курсор в последней строке, введите P, чтобы вставить текст выше текущей строки:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3
Строка 4
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 5
Попробуйте другие команды y из табл. 12.4 и посмотрите, как действуют команды p и P. Закончив эксперименты, верните файл в исходное состояние.
Объединение строк
vi очень строго относится к понятию строки. Обычно он не дает возможности переместить курсор в конец строки и удалить символ конца строки, чтобы объединить текущую строку со следующей за ней. По этой причине в vi была добавлена специальная команда J (не путайте с командой j, которая перемещает курсор на одну строку вниз) для объединения строк.
Если поместить курсор в третью строку и ввести команду J, получится следующее:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
Строка 2
Строка 3 Строка 4
Строка 5
Поиск и замена
Редактор vi имеет возможность перемещать курсор, опираясь на результаты поиска. Он может это делать в пределах одной строки или всего файла. Он может также выполнять замену текста с подтверждением или без подтверждения пользователя.
Поиск в пределах строки
Команда f выполняет поиск в строке и перемещает курсор к следующему вхождению указанного символа. Например, команда fa переместит курсор к следующему вхождению символа a в текущей строке. После выполнения операции поиска символа в строке ее можно повторить, введя точку с запятой.
Поиск во всем файле
Для перемещения курсора к следующему вхождению слова или фразы используется команда /. Она действует точно так же, как в программе less, о которой рассказывалось в главе 3. После ввода команды / в нижней части экрана появится прямой слеш, вслед за которым нужно ввести искомое слово или фразу и нажать ENTER. После этого курсор переместится к следующему вхождению искомой строки. Поиск следующего вхождения той же строки можно повторить командой n. Например:
Съешь же
Строка 2
Строка 3
Строка 4
Строка 5
Поместите курсор в первую строку и введите
/Строка
затем нажмите ENTER. Курсор переместится в строку 2. Затем введите команду n, и курсор переместится в строку 3. С каждой следующей командой n курсор будет перемещаться вниз по файлу, пока не достигнет последнего вхождения искомого фрагмента. В примерах выше мы использовали для поиска только слова и фразы, однако vi позволяет применять регулярные выражения — очень мощное средство выражения сложных шаблонов текста. Мы подробно обсудим регулярные выражения в главе 19.
Глобальный поиск и замена
Для выполнения поиска с заменой (в vi эта операция называется подстановкой) в диапазоне строк или во всем файле vi использует ex-команды. Например, заменить слово Строка словом строка во всем файле можно следующей командой:
:%s/Строка/строка/g
Давайте разобьем эту команду на элементы и рассмотрим их по отдельности (табл. 12.5).
Таблица 12.5. Пример синтаксиса команды глобального поиска с заменой
Элемент
Значение
:
Символ двоеточия начинает ex-команду
%
Определяет диапазон строк, где будет выполняться поиск. % — сокращение, означающее «от первой строки до последней». В этом примере можно было бы указать диапазон номеров строк 1,5 (потому что в нашем файле всего пять строк) или 1,$, что означает «от строки с номером 1 до последней». Если диапазон строк не указан, операция применяется только к текущей строке
s
Определяет операцию — в данном случае подстановку (substitution) или поиск с заменой
/Line/line/
Шаблон поиска и текст замены
g
Означает global (глобально), в том смысле, что подстановка выполняется для всех вхождений искомой строки в каждой строке. Если элемент g опустить, операция выполнит замену только первого вхождения искомого фрагмента в каждой строке
После выполнения поиска с заменой наш файл будет выглядеть так:
Съешь же ещё этих мягких французских булок, да выпей чаю. Это классно.
строка 2
строка 3
строка 4
строка 5
В команде подстановки можно указать, что она должна запрашивать подтверждение у пользователя перед заменой. Для этого добавьте символ c в конец команды. Например:
:%s/строка/Строка/gc
Эта команда вернет содержимое файла в прежнее состояние, но перед каждой заменой vi будет останавливаться и спрашивать подтверждение, выдавая следующее сообщение:
заменить на Строка? (y/n/a/q/l/^E/^Y)
В круглых скобках перечислены возможные варианты ответов, описание которых приводится в табл. 12.6.