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

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

< Лекция 15 || Лекция 16: 12345 || Лекция 17 >
Аннотация: Свойства текстового редактора vi, помогающие в ежедневной работе. Расширенный текстовый редактор vim, краткое описание его возможностей.

Полезные умения Vi

Карманы

Все команды, удаляющие фрагмент текста ( d, x, c, s ), записывают его в карман, из которого этот фрагмент можно в любое время достать командой p ( p aste). В соответствии с логикой vi, p вставляет содержимое кармана после курсора, а Pперед. Способность команд удаления запоминать удаленное – удобство, по нашему мнению, в первую очередь психологическое. Оно вселяет уверенность, что текст не пропадает: просто часть этого текста перемещается из видимого мира в невидимый, но она и там в безопасности – до тех пор, пока мы не удалим что-нибудь еще. Тут сетовать можно только на О: если мы не использовали карман, значит, не хотели. Класть в карман части текста можно и не удаляя их, с помощью гнездовой команды y ( y ank). Она не изменяет видимого мира, а работает, как d без удаления. Команда y подчиняется правилу двойного удара, а синоним Y означает не y$, как в C или D, а гораздо более распространенную операцию – "запомнить текущую строку" (то же, что yy, но в два раза короче).

Если в карман попала целая строка или несколько, команда p вставит содержимое не после курсора, а после текущей строки. Это и понятно: удалили строку, значит, и добавлять надо строку. В тех действительно редких случаях, когда строку нужно запомнить для вставки между символами, следует использовать команды перемещения, не работающие со строками, – поиск по файлу, перемещения внутри строки и т. п. Одну строку, например, можно запомнить с помощью 0y$ (0 здесь поставлен для перехода в начало строки; если курсор уже там, достаточно y$ ).

Кроме обычного – неименованного – кармана в vi есть карманы именованные. Их 26: карманы именуются буквами латинского алфавита. Для того чтобы результат гнездовой команды записывался в именованный карман вместо обычного, нужно перед этой командой поставить два символа: " и имя кармана. Например, команда "eD удалит конец строки и спрячет ее в карман e, а команда "eP – вставит содержимое кармана e перед курсором. Имена карманов подчиняются правилу синонимов: если вместо строчной использовать прописную букву, то части текста добавляются к содержимому кармана, в конец, а не заменяют его. Можно, например, в разных местах текста использовать "AY для складывания понравившихся строк в карман -аккумулятор a, а потом вынуть их из кармана с помощью "ap. Смысл именованных карманов – в том, что их содержимое не теряется во время редактирования: если вы не трогали карман a, то и под конец работы можно вынуть из него то же содержимое. В старых версиях vi неименованный карман очищался при смене редактируемого файла по :n или :e. Поэтому переносить части текста из файла в файл можно было при помощи :w временный_файл и :r временный_файл – или в именованном кармане.

У именованных карманов есть еще одно примечательное свойство, масштаб возможностей которого постигается не сразу. Команда @ карман выполняет содержимое кармана, как последовательность операторов vi. Это означает, что во время работы с текстом программу можно хранить в прямом смысле слова "между строк"; более того, если формат текста позволяет, самые хитрые приемы работы с ним можно превратить в комментарии и оставить насовсем. Когда настанет пора снова редактировать такой файл, сколь угодно длинную команду vi, найденную в комментарии, следует сохранить в каком-нибудь кармане, например с помощью "xY, а потом использовать в виде @x. Кстати, если вы намерены использовать последовательность команд режима командной строки, не забудьте, что начинаться она должна с ":", а команды в ней разделяются символом |. Например, вместо сокращения Ctrl+^, которое не сработает, если текущий файл не сохранен, можно использовать две команды: ':w!|n#'.

Макрокоманды

Идеология проективной системы и, в частности, З, не одобряет, когда человеку приходится механически повторять одни и те же действия. Если задача была решена, должен существовать способ формализовать и сохранить ее решение. Частично в этом помогает команда ".", которая повторяет последнюю выполненную команду изменения. Например, после удаления двух строк ( 2dd или d2d, все равно), можно продолжать нажимать "." – и vi всякий раз будет удалять по две строки. Но как сохранить целую последовательность команд? Запись операторов в карман – синтетическое решение, требующее смешения потока данных и потока управления (один и тот же файл, одни и те же регистры), что далеко не всегда бывает удобно.

Для хранения последовательностей команд в vi существует механизм определения макрокоманд:map. Некоторые алфавитно-цифровые клавиши и подавляющее большинство функциональных в vi не имеют командного смысла (в vim задействованы все алфавитно-цифровые клавиши), но команда вида :map клавиша vi-операторы приведет к тому, что он появится: в командном режиме при нажатии этой клавиши vi будет выполнять заданный список операторов. Строго говоря, :map переопределяет не клавишу, а последовательность входных символов – имя макроса, которое vi будет заменять на тело макроса, как только введете эту последовательность целиком. Вот как можно переопределить клавишу =, чтобы она удаляла отступ в строке (начальные пробелы и табуляции): :map = 0dw.

Если имя макроса должно содержать непечатные символы (вроде Esc ), их надо экранировать с помощью ^V (в режиме командной строки vi, как и sh, повторяет возможности терминальной линии). Можно, например, определить макрокоманду, которая по трем нажатиям Esc будет сохранять файл и выходить из редактора: ':map ^[^[^[ :w!^M:q^M' (при этом набрать на клавиатуре надо следующее: :map ^VEsc^VEsc^VEsc :w!^VEnter:q!^VEnter ). Просмотреть список уже определенных макросов можно с помощью :map без параметров. Скорее всего, мы увидим, что vi самостоятельно определил несколько макросов для функциональных клавиш, найденных на нашем терминале: стрелок, Page Up, Page Down и т. п.

< Лекция 15 || Лекция 16: 12345 || Лекция 17 >
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