Компания ALT Linux
Опубликован: 14.12.2004 | Доступ: свободный | Студентов: 12276 / 1470 | Оценка: 4.19 / 3.84 | Длительность: 18:18:00
ISBN: 978-5-9556-0019-1
Лекция 15:

Текстовый редактор Vi

< Лекция 14 || Лекция 15: 12345 || Лекция 16 >
Аннотация: Особенность структуры текстовых файлов UNIX. Понятие текстового редактора как средства модификации проекта. Построчный текстовый редактор ed и экранный текстовый редактор vi. Принципы организации системы команд vi.
Ключевые слова: текст, пользователь, AWK, программа, текстовый редактор, Unix, очередь, интерпретатор командной строки, управляющий интерфейс, ПО, командная строка, терминал, shell, управляющие клавиши, перевод строки, терминальная линия, терминальное устройство, построчный текстовый редактор, контекстный адрес, операторы, INSERT, append, операции, командный режим, команда, Write, файл, read, бревиативность, global, утилита, regular expression, область действия, минимум, управляющие, базы данных, curses, экранный текстовый редактор, управляющий ввод, компромисс, control, клавиатурный модификатор, GNU, знаковый бит, KOI8-R, char, Line, EXT, Lisp, интерпретатор, язык высокого уровня, максимум, автор, vi, курсор, режим командной строки, режим вставки, правило синонимов, поиск, диапазон строк, команда перемещения, множитель, VIM, гнездовая команда, hang, откат, множества, ex, выход, exit, сочетания, change, правило двойного удара

Что такое текстовый редактор?

В лекции 14 мы обсуждали приемы автоматической обработки текстов, с помощью которых пользователь может избавить себя от бессмысленной ручной работы. Себе он оставляет только творческие задачи – написание командных или sed, awk, Perl, Python... сценариев, конфигурационных файлов и вообще всего, что можно назвать текстовой частью проекта (см. лекцию 14). Даже в этом идеальном случае ему необходим инструмент творческой, а не автоматической работы с текстом. Но еще чаще приходится вручную изменять проекты, потому что никакая программа никогда не бывает сразу правильной (и никакой способ ошибаться нельзя полностью автоматизировать, кроме ошибок самой автоматизации).

Итак, текстовый редактор в UNIX – это, прежде всего, инструмент создания и изменения текстового проекта, а во вторую очередь – инструмент создания текста "вообще", например письма или романа (далее мы, для краткости, вместо " текстовый редактор " будем иногда говорить просто "редактор", понимая под этим не профессию, а инструмент).

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

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

Тем не менее универсальный текстовый редактор должен отображать текст только текстовыми средствами, безо всяких дополнительных требований к аппаратуре. Что еще важнее, команды со стороны пользователя тоже в идеале должны быть только текстовыми, без расчета на то, что устройство ввода – клавиатура – обзаведется, помимо текстовых, еще и управляющими клавишами, вроде Replace, Go to, Save и т. п. Из управляющих можно полностью рассчитывать только на клавишу "перевод строки". В UNIX можно еще доверять описанным в лекции 8 средствам редактирования, предоставляемым самой терминальной линией. Если ориентироваться на любое возможное терминальное устройство, большего требовать нельзя.

Построчный редактор Ed

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

Редактор ed устроен очень похоже на sed, описанный в лекции 14: он управляется текстовыми командами редактирования, снабженными контекстными адресами. В целом работа с ed по отношению к работе с sed – то же, что работа в командной строке shell по отношению к программированию на нем. В ed есть уже известные нам операторы s, d, p и некоторые другие команды sed, например i (insert) и a (append). Конечно, к операциям sed добавлены и другие, необходимые для интерактивной работы: операции копирования и перемещения строк текста, смены текущей строки (операции перемещения по тексту ) и некоторые другие. Работа с файлами перестроена для удобств командного режима: команда w (write) записывает не строку, а весь файл (если не указан контекстный адрес ), причем допустим вызов w без параметров: это приводит к записи текста в текущий редактируемый файл. По аналогии с w существует команда r (read), которая вставляет содержимое указанного файла после текущей строки, и команда e (edit), которая открывает новый файл для редактирования.

Кое-какие команды sed пришлось заменить, не нарушая принцип аббревиативности. Например, команда g в ed означает global (как модификатор g в sed ), и формат у нее такой: 'g/РВ/команды_ed/'. Эта команда дает возможность выполнять команды_ed только в строках, удовлетворяющих регулярному выражению РВ. Если не указан контекстный адрес, g ищет среди всех строк файла. Есть обоснованное подозрение, что утилита grep получила имя после создания ed, потому что делает она то же, что и команда 'g/re/p', где re – это regular expression.

В ed добавлено несколько полезных свойств в контекстный адрес. Во-первых, появилось удобное обозначение текущей строки – " ." . Во-вторых, любой простой контекстный адрес можно дополнить смещением – положительным или отрицательным числом, сдвигающим область действия команды на несколько строк вперед или назад по тексту. Так что вполне допустима команда '/BEGIN/+1,/END/-1d', удаляющая все между строками с BEGIN и END, или команда '.,/обед/s/.*/копать/' (по-хорошему, чтобы не пропустить обед, надо было написать '.,/обед/-1s/.*/копать/' ).

Нельзя не отметить, что ed как-то уж слишком подчиняется радикальным требованиям к терминальному устройству. В этом редакторе можно с легкостью работать даже на экзотической консоли компьютера PDP-7, состоящей из алфавитно-цифровой клавиатуры и алфавитно-цифрового же печатающего устройства (так это же просто электрическая печатная машинка!). С той же легкостью и удобством ed запускается на приличном терминале, но именно что с той же легкостью и с тем же удобством. А ведь даже shell в его нынешнем виде умеет пользоваться общими для многих терминалов свойствами: управляющими последовательностями или функциональными клавишами (уж как минимум теми, на которых нарисованы стрелки).

Конечно, когда-то и shell этого не умел. Главным препятствием было то, что разные терминалы имеют разные управляющие последовательности и возвращают разные последовательности символов при нажатии на функциональные клавиши. И вообще, не похожи друг на друга. Именно для преодоления этого препятствия были собраны базы данных по терминалам – termcap и terminfo – и создана библиотека работы с терминалом curses. Говорят, что curses была написана специально для создания экранного текстового редактора vi.

< Лекция 14 || Лекция 15: 12345 || Лекция 16 >
Andranik Avakian
Andranik Avakian

41. УК РФ и Комментарии (ст. 273)

М. 2000 г. Издательство: ALT Linux, Институт Логики

Уголовный Кодекс РФ и комментарии к нему?

По ссылке открывается сайт документации Linux, раздел Linux Installation and Getting Started

Сергей Петровский
Сергей Петровский

У Вас написано:

ls -dt1 `grep -il отчет *` | head -1

если знания по шелу мне не изменяют, то должно быть:

ls -dt | `grep -il отчет *` | head -1