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

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

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

Экранный редактор Vi

Vi называется экранным редактором, поскольку использует в качестве рабочего поля весь экран терминала, а не одну строку, как ed. Экран задействован большей частью для отображения редактируемого текста, а одну строку – последнюю – vi отводит для общения с пользователем в стиле ed. Помимо понятия текущей строки в vi появляется текущая позиция в строке, указателем на которую работает курсор (между прочим, до курсора создатели терминалов тоже додумались не сразу: ведь в пишущих машинках его не было). Все команды vi применяются к тексту именно в том месте, где находится курсор. Все это так похоже на устройство многих современных текстовых редакторов, что в объяснении не нуждается.

Три режима

Создатели vi не пошли на компромисс, а решились на смелый шаг: отказаться от традиционной концепции Управляющего ввода (впрочем, тогда она не была столь уж традиционной; скорее наоборот: концепция управления vi очень напоминает традиционную для того времени концепцию управления ed ). Этот шаг, пожалуй, самый трудный и при освоении vi. В vi предусмотрено три режима работы: режим командной строки, практически повторяющий возможности ed, командный режим, в котором нажатие на любую клавишу означает какую-нибудь команду редактору, и режим вставки, в котором нажатие на клавишу с печатным символом приводит к вставке этого символа перед курсором (как в обычных текстовых редакторах ). Можно представить дело так, как если бы на терминале имелась клавиша Control Lock, и в активном ее состоянии все символы были бы командными, а в неактивном – обычными.

Основной режим работы viкомандный, а не режим вставки. Суть его в том, что, как было сказано ранее, большую часть времени пользователь UNIX проводит, изменяя проекты. Причем когда он создает проект, все, что требуется от редактора, – не мешать. Набивает программист текст программы – и пусть набивает, в режиме вставки ; ему при этом почти ничего не нужно. А вот для исправления ошибок, для ориентации и перемещения по тексту, для преобразования необходим творческий подход и соответствующие средства редактирования. Следовательно, прежде всего, пользователю должны быть доступны команды редактирования, а перейти – одной командой – в режим вставки и понабивать текст будет не так уж утомительно.

Итак, в начале работы vi находится в командном режиме. Весь экран, кроме последней строки, занят текстом, и каждое нажатие клавиши выполняется как команда. Соответствующие печатные символы при этом не отображаются – незачем, это только собьет с толку; лучше сразу увидеть результат. Например, команда x удаляет символ под курсором, и ничего нагляднее собственно удаления не придумаешь. Аббревиативность этой команды основана не на названии, а на внешнем виде: x означает "поставить крест". Кстати, команда X удаляет символ перед курсором, т. е. x действует как Delete, а X – как Backspace.

Запомним правило синонимов: прописная буква выполняет ту же команду, что и строчная, но несколько иначе. Это правило позволяет сократить количество запоминаемых сущностей – сообразно У .

Для перехода в режим вставки предусмотрены две простые команды: i ( i nsert) – для вставки текста перед курсором, a ( a ppend) – для вставки после курсора. Согласно правилу, A тоже переводит vi в режим вставки, но при этом перемещает курсор в конец строки: чаще всего именно добавление текста в конец строки и бывает нужно. А I перед включением режима вставки перемещает курсор в начало строки, причем не в самое начало, а в то место, откуда начинается текст, – на первый неразделитель. Команда особенно полезна, когда текстовый файл размечен отступами (а в программах это сплошь и рядом). Еще одна команда – o ( o pen) – вставка текста в новую строку, которая добавляется после текущей. O ведет себя так же, только строка добавляется перед текущей.

Режим вставки – некомандный, в нем доступно очень мало команд редактирования и (в ортодоксальном vi ) никаких команд перемещения по тексту. Обычно vi подражает терминальной линии: есть команды удаления только что введенного символа, слова и всей строки. Единственная дополнительная команда нужна, когда используется автоматическое добавление отступа (т. н. autoindent; при редактировании файла, размеченного отступами, – например, программы – без этого обходиться неудобно). Если vi добавил, скажем, 18 пробелов отступа, а вложенный блок текста закончился, потребуется переместить курсор в позицию предыдущего отступа (например, 12-ю). Вместо того чтобы 12 раз нажимать пробел, лучше использовать ^D (автоматический отступ включается специальной переменной настройки vi: :set autoindent, а величина сдвига задается другой переменной: :set shiftwidth=6 ).

Для выхода из режима вставки используйте клавишу "Escape". Начинающим пользователям vi рекомендуется в случае потери ориентации немедленно жать на Esc: это приведет vi в исходный – командный – режим редактирования. Еще одна команда, ^C, вместо ожидаемого аварийного выхода из редактора вызовет только аварийный останов текущей команды: vi по-своему обрабатывает сигнал TERM.

Последнюю строку экрана vi оставил для диалога с пользователем. Во-первых, в ней vi выводит информационные сообщения, а во-вторых, использует ее под командную строку. Чтобы перейти в режим командной строки, надо нажать " :". Курсор переместится вниз экрана, и появится подсказка " :". Вводимое в режиме командной строки отображается на экране, и это правильно, потому что команды данного режима обычно довольно длинные: содержат имена файлов, регулярные выражения или цепочки команд редактора ex. Сигналом об окончании команды служит, как и в ed, перевод строки.

Редактором ex называется построчная ипостась редактора vi. Собственно, ex – это vi, постоянно находящийся в режиме командной строки. Если в vi в командном режиме выполнить команду Q, он превращается в ex, а ex превращается в vi по команде vi из командной строки. Ex существует на случай совсем уж тупого (т. н. dumb ) терминала, работа с которым в экранном режиме невозможна. В ex/vi сохранились многие команды ed: e, w и r, s ( поиск с заменой!) и некоторые другие. Слегка развилось понятие контекстного адреса. Самая главная команда ex/vi – команда выхода из редактора, q ( q uit). Так как это – команда ex, в vi ее нужно вводить в режиме командной строки, после " :". Если отредактированный текст не записан в файл, vi не подчинится такой команде, сообщая, что файл изменен и не сохранен. Если сохранять исправления не нужно, можно усилить команду восклицательным знаком: :q!.

Таково правило усиления команд командной строки: если после файловой команды поставить " !", vi выполнит ее во что бы то ни стало. Помешать может только ограничение доступа или невозможное имя файла. На случай, когда вы совсем заредактировали текст, но в файл еще не записали, полезна команда :e!.

Для записи в файл используйте команду : w; этой команде можно задать контекстный адрес и (или) имя файла, чтобы записать указанный диапазон строк в файл с этим именем. Если vi сопротивляется – вникните в его аргументацию или используйте : w!. Можно редактировать несколько файлов по очереди, для этого надо запустить vi файл1 файл2... и использовать для переключения между ними команду : n ( n ext; с параметром–именем файла эта команда работает аналогично :e ) и :rew ( r ewind). Удобнее всего работать с двумя файлами, потому что специальное имя # обозначает предыдущий отредактированный файл, а :n#Enter имеет еще более короткое сокращение – ^^ в командном режиме.

< Лекция 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