В лекции 14 мы обсуждали приемы автоматической обработки sed, , Perl, Python... сценариев, конфигурационных файлов и вообще всего, что можно назвать текстовой частью проекта (см. лекцию 14). Даже в этом идеальном случае ему необходим инструмент творческой, а не автоматической работы с
Итак,
Учитывая проективную организацию UNIX, популярность
Тем не менее универсальный Replace, Go to, Save и т. п. Из управляющих можно полностью рассчитывать только на клавишу "перевод строки". В UNIX можно еще доверять описанным в лекции 8 средствам редактирования, предоставляемым самой
Таким жестким условиям удовлетворяет 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 – это
В ." . Во-вторых, любой простой '/BEGIN/+1,/END/-1d', удаляющая все между строками с BEGIN и END, или команда '.,/обед/s/.*/копать/' (по-хорошему, чтобы не пропустить обед, надо было написать '.,/обед/-1s/.*/копать/' ).
Нельзя не отметить, что ed как-то уж слишком подчиняется радикальным требованиям к терминальному устройству. В этом редакторе можно с легкостью работать даже на экзотической консоли компьютера PDP-7, состоящей из алфавитно-цифровой клавиатуры и алфавитно-цифрового же печатающего устройства (так это же просто электрическая печатная машинка!). С той же легкостью и удобством ed запускается на приличном терминале, но именно что с той же легкостью и с тем же удобством. А ведь даже shell в его нынешнем виде умеет пользоваться общими для многих терминалов свойствами: управляющими последовательностями или функциональными клавишами (уж как минимум теми, на которых нарисованы стрелки).
Конечно, когда-то и shell этого не умел. Главным препятствием было то, что разные терминалы имеют разные управляющие последовательности и возвращают разные последовательности символов при нажатии на функциональные клавиши. И вообще, не похожи друг на друга. Именно для преодоления этого препятствия были собраны базы данных по терминалам – termcap и terminfo – и создана библиотека работы с терминалом . Говорят, что была написана специально для создания vi.
Однако даже с помощью не восполнить бедности
Можно считать (с некоторой натяжкой, кстати), что на клавиатуре терминала есть клавиши со стрелками. На многих терминалах имеются функциональные клавиши, помеченные F1, F2 и т. д.. Часто встречаются терминалы с клавишами Page Up и Page Down. Всего этого явно недостаточно для того, чтобы редактирование было удобным и быстрым. Нужно или искать компромисс, или выдумывать концепцию
Компромисс может быть достигнут тремя способами. Можно ориентироваться на какой-нибудь определенный терминал (или даже самостоятельно его изготовить), на котором будут все нужные управляющие клавиши. При этом редактор немедленно перестает быть универсальным и исчезает вместе с терминалом. Можно понадеяться на F1, F2 и т. д., поскольку, если они есть, то уж в количестве не менее восьми штук. Каждой функциональной клавише приписывается несколько функций редактирования, и пользователь старательно их запоминает. Нам доводилось встречать изготовленные типографским способом бумажки с названиями этих функций, которые следовало наклеивать на клавиатуру, тем самым сводя задачу к предыдущей. Еще курьезнее были терминалы с программируемыми надписями над функциональными клавишами: на такой терминал можно было вывести управляющую последовательность, и надпись над F2 менялась, скажем, на Save!
Третий вариант – использовать в качестве управляющих непечатные символы (из тех, что добываются при помощи клавиши Ctrl ) и основанные на них последовательности. Сам по себе этот третий вариант не лишен смысла, потому что таким образом можно вернуть совсем уж было утерянный принцип Ctrl!
Ctrl есть еще один – Meta (такие терминалы и в самом деле встречаются). Нажатие на Ctrl оставляет от кода символа первые пять битов, так что ^A – это символ с ascii-кодом 1, а нажатие на Meta, наоборот, добавляет к коду символа Meta+a – это символ с кодом 225. К сожалению, в неамериканской кодировке такие символы вполне могут означать букву, а не быть управляющими. Например, в кодировке KOI8-R 225 соответствует русское прописное А.
Самые нужные команды – односимвольные, они состоят из нажатия Ctrl или Meta вместе с каким-нибудь символом. В них уже можно соблюсти принцип ^B, ^F, ^P и ^N – от b ackward char, f orward char, p revious line и n ext line соответственно, а перемещение по словам осуществляется при помощи Meta и тех же f и b.
Если Meta нет – не беда, вместо него можно использовать ESC, тогда команды удлинятся на одно нажатие. Большая часть команд Emacs – многосимвольные, начинаются они со специальных Ctrl-клавиш (самая частая – ^X ), после которых можно набирать что угодно – это будет управляющая последовательность. Чем реже команда требуется, тем она длиннее, это помогает соблюсти З. В составных командах тоже можно соблюдать Ctrl, какой – на Meta, а какой – на ^X.
Однако стройной системы в Emacs не получилось – прежде всего, по вине его главного достоинства: Emacs – легко расширяемый редактор. Дело в том, что весь редактор написан на диалекте LISP – одного из самых старых и самых теоретически продуманных языков программирования. LISP – интерпретатор, и вдобавок – язык высокого уровня, реализующий концепцию функционального программирования. Это, между прочим, означает, что дополнения к Emacs будут строго следовать З: максимум интеллектуальной работы, при небольшой длине
Vi называется экранным редактором, поскольку использует в качестве рабочего поля весь экран терминала, а не одну строку, как ed. Экран задействован большей частью для отображения редактируемого vi отводит для общения с пользователем в стиле ed. Помимо понятия текущей строки в vi появляется текущая позиция в строке, указателем на которую работает курсор (между прочим, до курсора создатели терминалов тоже додумались не сразу: ведь в пишущих машинках его не было). Все команды vi применяются к
Создатели vi не пошли на компромисс, а решились на смелый шаг: отказаться от традиционной концепции vi очень напоминает традиционную для того времени концепцию управления ed ). Этот шаг, пожалуй, самый трудный и при освоении vi. В vi предусмотрено три режима работы: ed,
Основной режим работы vi – командный, а не
Итак, в начале работы vi находится в x означает "поставить крест". Кстати, команда X удаляет символ перед курсором, т. е. x действует как Delete, а X – как Backspace.
Запомним
Для перехода в i ( i nsert) – для вставки a ( a ppend) – для вставки после курсора. Согласно правилу, A тоже переводит vi в I перед включением o ( o pen) – вставка O ведет себя так же, только строка добавляется перед текущей.
vi ) никаких команд перемещения по vi подражает терминальной линии: есть команды удаления только что введенного символа, слова и всей строки. Единственная дополнительная команда нужна, когда используется автоматическое добавление отступа (т. н. autoindent; при редактировании файла, размеченного отступами, – например, программы – без этого обходиться неудобно). Если vi добавил, скажем, 18 пробелов отступа, а вложенный блок ^D (автоматический отступ включается специальной переменной настройки vi: :set autoindent, а величина сдвига задается другой переменной: :set shiftwidth=6 ).
Для выхода из vi рекомендуется в случае потери ориентации немедленно жать на Esc: это приведет vi в исходный – командный – режим редактирования. Еще одна команда, ^C, вместо ожидаемого аварийного выхода из редактора вызовет только аварийный останов текущей команды: vi по-своему обрабатывает сигнал TERM.
Последнюю строку экрана :". Курсор переместится вниз экрана, и появится подсказка " :". Вводимое в режиме командной строки отображается на экране, и это правильно, потому что команды данного режима обычно довольно длинные: содержат имена файлов, регулярные выражения или цепочки команд редактора ex. Сигналом об окончании команды служит, как и в ed, перевод строки.
Редактором :". Если отредактированный vi не подчинится такой команде, сообщая, что файл изменен и не сохранен. Если сохранять исправления не нужно, можно усилить команду восклицательным знаком: :q!.
Таково правило усиления команд командной строки: если после файловой команды поставить " !", vi выполнит ее во что бы то ни стало. Помешать может только ограничение доступа или невозможное имя файла. На случай, когда вы совсем заредактировали :e!.
Для записи в файл используйте команду : w; этой команде можно задать vi сопротивляется – вникните в его аргументацию или используйте : w!. Можно редактировать несколько файлов по очереди, для этого надо запустить vi файл1 файл2... и использовать для переключения между ними команду : n ( n ext; с параметром–именем файла эта команда работает аналогично :e ) и :rew ( r ewind). Удобнее всего работать с двумя файлами, потому что специальное имя # обозначает предыдущий отредактированный файл, а :n#Enter имеет еще более короткое сокращение – ^^ в
Команд в Ctrl+буква. Даже для перемещения влево, вниз, вверх и вправо на одну позицию зарезервированы буквы hjkl. Это, конечно же, на случай, если клавиши-стрелки у терминала отсутствуют или выдают невесть что. Клавиши h и l означают соответственно "влево" и "вправо" (вместо них можно использовать привычные Backspace и пробел), клавишу j можно рассматривать как крючок вниз; тогда k не нуждается в объяснениях. В vi очень много команд перемещения по
Например, перемещение по словам – w (word, переход на начало следующего слова), b ( b ack word, на начало предыдущего слова) и e (end, на конец текущего слова) – стоит доверить vi. Словами в этом случае считаются цепочки букв, цифр и знаков " _ " (похоже на определение идентификатора в языке Си). Прописные W, B и E считают словами цепочки любых неразделителей (похоже на определение параметра в shell). Перемещать курсор можно по предложениям (команды " ) " и " ( "). Предложения заканчиваются соответствующим знаком препинания и разделителем после него. Перемещение по абзацам – команды " } " и " { "(абзацы разделяются пустой строкой; именно пустой: строка, содержащая одни только пробелы или табуляции, не подходит).
n ( n ext), а N.
vi может иметь 10x удалит десять символов справа от курсора, а команда 7+ переместит курсор на семь строк вперед (" + " и " - " – G ( G o) без 33G.
В любом случае пользователь волен экспериментировать с одной командой, как ему заблагорассудится: даже в самой ортодоксальной версии vi есть команда u – u ndo. Всякий может ошибиться: вместо 10 набрать 100, вместо z – x или неправильно составить шаблон для – современной версии vi, обладающей массой дополнительных возможностей, все-таки встроили бесконечный undo. На наш взгляд, это компромисс между дополнительным удобством и строгой дисциплиной.
Основные команды редактирования vi – гнездовые. vi применит действиеdw ( d elete w ord) состоит из действия d ( d elete) и команды w, в результате удалится одно слово. Другая c ( c d ; единственное отличие – после выполнения c редактор переходит в vi, потому что с ее помощью можно исключить одно неудобство, свойственное практически всем
Дело в том, что в типичном Del ), а затем в vi для замены слова на что угодно подается команда cw ( c vi поставит (временно) в конце заменяемой области символ $ и при наборе $ будет "заменяться" (на самом деле этот vi до поры не убирает его с экрана терминала), а после – вставляться. В такое свойство можно включить одним из значений настройки cpoptions, но по умолчанию он сразу удаляет заменяемый участок
Перемещением в w, а любая c/шаблон (изменить d100G (удалить строки от текущей до сотой). Между прочим, vi позволяет читать их полные имена: например, предыдущая команда читается delete 100 Go, а какая-нибудь c7w – change 7 words.
Остроумна vi передаст этой утилите и результат подставит вместо них. Так что отсортировать все строки до конца файла проще простого: достаточно ввести команду !Gsort. Есть > и <, которые сдвигают группу строк на один стандартный шаг ( vi -настройка shiftwidth ).
Виной тому особое умонастроение авторов vi или требования аппаратуры, но в этом редакторе все четыре принципа организации проективных систем соблюдаются безукоризненно.
Предполагается, что процесс редактирования будет проходить в полном соответствии с О и З: "Хорошо подумай, укрепи дух свой и нажми пару клавиш". В отношении О вообще все довольно строго. Например, одноуровневый откат ( u ). В соответствии с О, каждое изменение проекта должно быть обдуманным решением, по сценарию "подумал – сделал – оценил – (возможно) отменил". А для сценария "сделал – сделал – оценил – отменил – отменил – подумал" в проективных системах почти нет места, и в редакторе vi – тоже. Зачастую нажатия полудюжины клавиш достаточно для разительного изменения 1GdGZZ ( ОСТОРОЖНО! Эта команда удаляет весь
Каким образом соблюдать У в многофункциональной системе – вопрос сложный, однако, на наш взгляд, авторы сделали максимум возможного, чтобы устроить из множества команд подобие пирамиды, о которой говорилось в лекции 2. Показательно "краткое руководство по ex и vi", которое есть во всех BSD-системах (в FreeBSD – /usr/share/doc/usd/12.vi/summary.ascii.gz ): оно содержит 14 разделов, посвященных разным типам команд, в каждом из которых описано не больше дюжины операторов (три раздела совсем короткие). Введение
По части З авторы vi весьма пунктуальны, вплоть до экономии на нажатиях клавиш. Например, для замены одного символа другим есть специальная команда r ( r eplace). И действительно, в два раза быстрее набрать, допустим, ra ("заменить на a "), чем c aEsc (результат – тот же). X, как можно догадаться, введено вместо dh. А для последовательности команд :wEnter:qEnter (выход с сохранением) придумано аж два сокращения: во-первых, :xEnter (от exit), а во-вторых, совершенно неожиданное, но очень удобное ZZ (из
Неудивительно, что для оперативных изменений внутри строки было выдумано еще несколько n и N – по отношению к " / ". Если под курсором находится скобка – круглая, квадратная или фигурная, открывающая или закрывающая – команда % переместится на парную ей (учитывая вложенные скобки).
Побочным эффектом такой экономии движений оказывается то, что сокращенными командами действительно можно пользоваться! Достаточно подглядеть в упомянутое "краткое руководство" (оно отлично выглядит, распечатанное в три колонки и сложенное гармошкой) и почувствовать, что новый способ быстрее. Кажется, никто еще не проводил исследования, сколько действий при редактировании vi оказался бы чемпионом краткого управления.
Все dd удаляет текущую строку, а >> сдвигает ее вправо. Кстати, D и C работают как сокращения от d$ и c$. Экономия движений!
В лекции 14 мы обсуждали приемы автоматической обработки sed, , Perl, Python... сценариев, конфигурационных файлов и вообще всего, что можно назвать текстовой частью проекта (см. лекцию 14). Даже в этом идеальном случае ему необходим инструмент творческой, а не автоматической работы с
Итак,
Учитывая проективную организацию UNIX, популярность
Тем не менее универсальный Replace, Go to, Save и т. п. Из управляющих можно полностью рассчитывать только на клавишу "перевод строки". В UNIX можно еще доверять описанным в лекции 8 средствам редактирования, предоставляемым самой
Таким жестким условиям удовлетворяет 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 – это
В ." . Во-вторых, любой простой '/BEGIN/+1,/END/-1d', удаляющая все между строками с BEGIN и END, или команда '.,/обед/s/.*/копать/' (по-хорошему, чтобы не пропустить обед, надо было написать '.,/обед/-1s/.*/копать/' ).
Нельзя не отметить, что ed как-то уж слишком подчиняется радикальным требованиям к терминальному устройству. В этом редакторе можно с легкостью работать даже на экзотической консоли компьютера PDP-7, состоящей из алфавитно-цифровой клавиатуры и алфавитно-цифрового же печатающего устройства (так это же просто электрическая печатная машинка!). С той же легкостью и удобством ed запускается на приличном терминале, но именно что с той же легкостью и с тем же удобством. А ведь даже shell в его нынешнем виде умеет пользоваться общими для многих терминалов свойствами: управляющими последовательностями или функциональными клавишами (уж как минимум теми, на которых нарисованы стрелки).
Конечно, когда-то и shell этого не умел. Главным препятствием было то, что разные терминалы имеют разные управляющие последовательности и возвращают разные последовательности символов при нажатии на функциональные клавиши. И вообще, не похожи друг на друга. Именно для преодоления этого препятствия были собраны базы данных по терминалам – termcap и terminfo – и создана библиотека работы с терминалом . Говорят, что была написана специально для создания vi.
Однако даже с помощью не восполнить бедности
Можно считать (с некоторой натяжкой, кстати), что на клавиатуре терминала есть клавиши со стрелками. На многих терминалах имеются функциональные клавиши, помеченные F1, F2 и т. д.. Часто встречаются терминалы с клавишами Page Up и Page Down. Всего этого явно недостаточно для того, чтобы редактирование было удобным и быстрым. Нужно или искать компромисс, или выдумывать концепцию
Компромисс может быть достигнут тремя способами. Можно ориентироваться на какой-нибудь определенный терминал (или даже самостоятельно его изготовить), на котором будут все нужные управляющие клавиши. При этом редактор немедленно перестает быть универсальным и исчезает вместе с терминалом. Можно понадеяться на F1, F2 и т. д., поскольку, если они есть, то уж в количестве не менее восьми штук. Каждой функциональной клавише приписывается несколько функций редактирования, и пользователь старательно их запоминает. Нам доводилось встречать изготовленные типографским способом бумажки с названиями этих функций, которые следовало наклеивать на клавиатуру, тем самым сводя задачу к предыдущей. Еще курьезнее были терминалы с программируемыми надписями над функциональными клавишами: на такой терминал можно было вывести управляющую последовательность, и надпись над F2 менялась, скажем, на Save!
Третий вариант – использовать в качестве управляющих непечатные символы (из тех, что добываются при помощи клавиши Ctrl ) и основанные на них последовательности. Сам по себе этот третий вариант не лишен смысла, потому что таким образом можно вернуть совсем уж было утерянный принцип Ctrl!
Ctrl есть еще один – Meta (такие терминалы и в самом деле встречаются). Нажатие на Ctrl оставляет от кода символа первые пять битов, так что ^A – это символ с ascii-кодом 1, а нажатие на Meta, наоборот, добавляет к коду символа Meta+a – это символ с кодом 225. К сожалению, в неамериканской кодировке такие символы вполне могут означать букву, а не быть управляющими. Например, в кодировке KOI8-R 225 соответствует русское прописное А.
Самые нужные команды – односимвольные, они состоят из нажатия Ctrl или Meta вместе с каким-нибудь символом. В них уже можно соблюсти принцип ^B, ^F, ^P и ^N – от b ackward char, f orward char, p revious line и n ext line соответственно, а перемещение по словам осуществляется при помощи Meta и тех же f и b.
Если Meta нет – не беда, вместо него можно использовать ESC, тогда команды удлинятся на одно нажатие. Большая часть команд Emacs – многосимвольные, начинаются они со специальных Ctrl-клавиш (самая частая – ^X ), после которых можно набирать что угодно – это будет управляющая последовательность. Чем реже команда требуется, тем она длиннее, это помогает соблюсти З. В составных командах тоже можно соблюдать Ctrl, какой – на Meta, а какой – на ^X.
Однако стройной системы в Emacs не получилось – прежде всего, по вине его главного достоинства: Emacs – легко расширяемый редактор. Дело в том, что весь редактор написан на диалекте LISP – одного из самых старых и самых теоретически продуманных языков программирования. LISP – интерпретатор, и вдобавок – язык высокого уровня, реализующий концепцию функционального программирования. Это, между прочим, означает, что дополнения к Emacs будут строго следовать З: максимум интеллектуальной работы, при небольшой длине
Vi называется экранным редактором, поскольку использует в качестве рабочего поля весь экран терминала, а не одну строку, как ed. Экран задействован большей частью для отображения редактируемого vi отводит для общения с пользователем в стиле ed. Помимо понятия текущей строки в vi появляется текущая позиция в строке, указателем на которую работает курсор (между прочим, до курсора создатели терминалов тоже додумались не сразу: ведь в пишущих машинках его не было). Все команды vi применяются к
Создатели vi не пошли на компромисс, а решились на смелый шаг: отказаться от традиционной концепции vi очень напоминает традиционную для того времени концепцию управления ed ). Этот шаг, пожалуй, самый трудный и при освоении vi. В vi предусмотрено три режима работы: ed,
Основной режим работы vi – командный, а не
Итак, в начале работы vi находится в x означает "поставить крест". Кстати, команда X удаляет символ перед курсором, т. е. x действует как Delete, а X – как Backspace.
Запомним
Для перехода в i ( i nsert) – для вставки a ( a ppend) – для вставки после курсора. Согласно правилу, A тоже переводит vi в I перед включением o ( o pen) – вставка O ведет себя так же, только строка добавляется перед текущей.
vi ) никаких команд перемещения по vi подражает терминальной линии: есть команды удаления только что введенного символа, слова и всей строки. Единственная дополнительная команда нужна, когда используется автоматическое добавление отступа (т. н. autoindent; при редактировании файла, размеченного отступами, – например, программы – без этого обходиться неудобно). Если vi добавил, скажем, 18 пробелов отступа, а вложенный блок ^D (автоматический отступ включается специальной переменной настройки vi: :set autoindent, а величина сдвига задается другой переменной: :set shiftwidth=6 ).
Для выхода из vi рекомендуется в случае потери ориентации немедленно жать на Esc: это приведет vi в исходный – командный – режим редактирования. Еще одна команда, ^C, вместо ожидаемого аварийного выхода из редактора вызовет только аварийный останов текущей команды: vi по-своему обрабатывает сигнал TERM.
Последнюю строку экрана :". Курсор переместится вниз экрана, и появится подсказка " :". Вводимое в режиме командной строки отображается на экране, и это правильно, потому что команды данного режима обычно довольно длинные: содержат имена файлов, регулярные выражения или цепочки команд редактора ex. Сигналом об окончании команды служит, как и в ed, перевод строки.
Редактором :". Если отредактированный vi не подчинится такой команде, сообщая, что файл изменен и не сохранен. Если сохранять исправления не нужно, можно усилить команду восклицательным знаком: :q!.
Таково правило усиления команд командной строки: если после файловой команды поставить " !", vi выполнит ее во что бы то ни стало. Помешать может только ограничение доступа или невозможное имя файла. На случай, когда вы совсем заредактировали :e!.
Для записи в файл используйте команду : w; этой команде можно задать vi сопротивляется – вникните в его аргументацию или используйте : w!. Можно редактировать несколько файлов по очереди, для этого надо запустить vi файл1 файл2... и использовать для переключения между ними команду : n ( n ext; с параметром–именем файла эта команда работает аналогично :e ) и :rew ( r ewind). Удобнее всего работать с двумя файлами, потому что специальное имя # обозначает предыдущий отредактированный файл, а :n#Enter имеет еще более короткое сокращение – ^^ в
Команд в Ctrl+буква. Даже для перемещения влево, вниз, вверх и вправо на одну позицию зарезервированы буквы hjkl. Это, конечно же, на случай, если клавиши-стрелки у терминала отсутствуют или выдают невесть что. Клавиши h и l означают соответственно "влево" и "вправо" (вместо них можно использовать привычные Backspace и пробел), клавишу j можно рассматривать как крючок вниз; тогда k не нуждается в объяснениях. В vi очень много команд перемещения по
Например, перемещение по словам – w (word, переход на начало следующего слова), b ( b ack word, на начало предыдущего слова) и e (end, на конец текущего слова) – стоит доверить vi. Словами в этом случае считаются цепочки букв, цифр и знаков " _ " (похоже на определение идентификатора в языке Си). Прописные W, B и E считают словами цепочки любых неразделителей (похоже на определение параметра в shell). Перемещать курсор можно по предложениям (команды " ) " и " ( "). Предложения заканчиваются соответствующим знаком препинания и разделителем после него. Перемещение по абзацам – команды " } " и " { "(абзацы разделяются пустой строкой; именно пустой: строка, содержащая одни только пробелы или табуляции, не подходит).
n ( n ext), а N.
vi может иметь 10x удалит десять символов справа от курсора, а команда 7+ переместит курсор на семь строк вперед (" + " и " - " – G ( G o) без 33G.
В любом случае пользователь волен экспериментировать с одной командой, как ему заблагорассудится: даже в самой ортодоксальной версии vi есть команда u – u ndo. Всякий может ошибиться: вместо 10 набрать 100, вместо z – x или неправильно составить шаблон для – современной версии vi, обладающей массой дополнительных возможностей, все-таки встроили бесконечный undo. На наш взгляд, это компромисс между дополнительным удобством и строгой дисциплиной.
Основные команды редактирования vi – гнездовые. vi применит действиеdw ( d elete w ord) состоит из действия d ( d elete) и команды w, в результате удалится одно слово. Другая c ( c d ; единственное отличие – после выполнения c редактор переходит в vi, потому что с ее помощью можно исключить одно неудобство, свойственное практически всем
Дело в том, что в типичном Del ), а затем в vi для замены слова на что угодно подается команда cw ( c vi поставит (временно) в конце заменяемой области символ $ и при наборе $ будет "заменяться" (на самом деле этот vi до поры не убирает его с экрана терминала), а после – вставляться. В такое свойство можно включить одним из значений настройки cpoptions, но по умолчанию он сразу удаляет заменяемый участок
Перемещением в w, а любая c/шаблон (изменить d100G (удалить строки от текущей до сотой). Между прочим, vi позволяет читать их полные имена: например, предыдущая команда читается delete 100 Go, а какая-нибудь c7w – change 7 words.
Остроумна vi передаст этой утилите и результат подставит вместо них. Так что отсортировать все строки до конца файла проще простого: достаточно ввести команду !Gsort. Есть > и <, которые сдвигают группу строк на один стандартный шаг ( vi -настройка shiftwidth ).
Виной тому особое умонастроение авторов vi или требования аппаратуры, но в этом редакторе все четыре принципа организации проективных систем соблюдаются безукоризненно.
Предполагается, что процесс редактирования будет проходить в полном соответствии с О и З: "Хорошо подумай, укрепи дух свой и нажми пару клавиш". В отношении О вообще все довольно строго. Например, одноуровневый откат ( u ). В соответствии с О, каждое изменение проекта должно быть обдуманным решением, по сценарию "подумал – сделал – оценил – (возможно) отменил". А для сценария "сделал – сделал – оценил – отменил – отменил – подумал" в проективных системах почти нет места, и в редакторе vi – тоже. Зачастую нажатия полудюжины клавиш достаточно для разительного изменения 1GdGZZ ( ОСТОРОЖНО! Эта команда удаляет весь
Каким образом соблюдать У в многофункциональной системе – вопрос сложный, однако, на наш взгляд, авторы сделали максимум возможного, чтобы устроить из множества команд подобие пирамиды, о которой говорилось в лекции 2. Показательно "краткое руководство по ex и vi", которое есть во всех BSD-системах (в FreeBSD – /usr/share/doc/usd/12.vi/summary.ascii.gz ): оно содержит 14 разделов, посвященных разным типам команд, в каждом из которых описано не больше дюжины операторов (три раздела совсем короткие). Введение
По части З авторы vi весьма пунктуальны, вплоть до экономии на нажатиях клавиш. Например, для замены одного символа другим есть специальная команда r ( r eplace). И действительно, в два раза быстрее набрать, допустим, ra ("заменить на a "), чем c aEsc (результат – тот же). X, как можно догадаться, введено вместо dh. А для последовательности команд :wEnter:qEnter (выход с сохранением) придумано аж два сокращения: во-первых, :xEnter (от exit), а во-вторых, совершенно неожиданное, но очень удобное ZZ (из
Неудивительно, что для оперативных изменений внутри строки было выдумано еще несколько n и N – по отношению к " / ". Если под курсором находится скобка – круглая, квадратная или фигурная, открывающая или закрывающая – команда % переместится на парную ей (учитывая вложенные скобки).
Побочным эффектом такой экономии движений оказывается то, что сокращенными командами действительно можно пользоваться! Достаточно подглядеть в упомянутое "краткое руководство" (оно отлично выглядит, распечатанное в три колонки и сложенное гармошкой) и почувствовать, что новый способ быстрее. Кажется, никто еще не проводил исследования, сколько действий при редактировании vi оказался бы чемпионом краткого управления.
Все dd удаляет текущую строку, а >> сдвигает ее вправо. Кстати, D и C работают как сокращения от d$ и c$. Экономия движений!
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.