Компания IBM
Опубликован: 22.06.2005 | Доступ: свободный | Студентов: 30368 / 6724 | Оценка: 4.27 / 3.93 | Длительность: 26:36:00
ISBN: 978-5-9556-0029-1
Лекция 9:

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

Работа с файлами

Редактируя текст в Vi, пользователь работает не непосредственно с файлом, а с буфером. Если открывается уже существующий файл, Vi копирует его содержимое в буфер и отображает буфер на экране. Все изменения, которые производит пользователь, происходят именно в содержимом буфера – открытый файл пока остается неизменным. Если же Vi вызван без параметра, то создается пустой буфер, который пока не связан ни с каким файлом 7В действительности содержимое буфера хранится в специальном временном файле (swap file). Если сеанс работы в редакторе по какой-то причине прервался, то этот временный файл не будет удален, и при следующей попытке продолжить незаконченную работу с файлом Vi предложит провести процедуру восстановления – на случай, если во временном файле остались несохраненные изменения..

Чтобы записать сделанные изменения в файл, используется команда " :wEnter " (чтобы ее отдать, нужно сначала перейти в командный режим). О том, что " w " – это сокращение от англ. " w rite", "записать", можно узнать, нажав Tab после " :w " – и Vim дополнит эту команду до " write ". Подобным образом можно поступить с большинством команд в командной строке Vim – в этом редакторе очень последовательно соблюдается принцип аббревиативности. Мефодий выполнил " write " и получил такое информационное сообщение:

Это файл для примеров.
Пример 1.
Моя первая строка в vi!
~
~
~
~
"textfile" 3L, 57C записано             3,24  Весь
Пример 9.4. Запись файла

Мефодий не указал, куда именно записать содержимое буфера, и по умолчанию оно было записано в тот файл, который он и открывал для редактирования: " textfile ". Однако команде " write " можно указать любое имя файла в качестве параметра – и тогда содержимое буфера будет записано в этот файл, а если такого файла нет, то он будет создан. Параметр " write " обязательно потребуется, если текст в буфере еще не записан ни в каком файле.

Наиболее важна для новичка команда выхода из Vi – " :qEnter " (сокращение от " q uit"). Пользователь, запустивший редактор в первый раз, нередко сталкивается с тем, что никак не может его закрыть: не работает ни один из привычных способов завершения программы, даже " ^C " Vi обрабатывает по-своему*. И " :w ", и " :q " – команды режима командной строки; в этот режим Vi переводится из командного режима с помощью " :", набираемого в начале команды.

Однако если в буфере есть изменения, которые еще не записаны ни в каком файле, то Vi откажется выполнять команду " :q ", предложив сначала сохранить эти изменения. Если вы не хотите сохранять изменения, нужно настоять на своем желании выйти из Vi, добавив к команде выхода восклицательный знак: " :q!". В этом случае все несохраненные изменения будут выброшены. Восклицательный знак можно добавить в конце любой файловой команды в командной строке Vi – в этом случае Vi будет без возражений выполнять команды.

В Vi предпринято множество усилий для экономии сил и времени пользователя, командующего редактором. Поэтому можно одним разом записать текст и выйти из редактора: командой " :wq " или аналогичной командой " :x ", просто нажав " ZZ " в командном режиме.

Перемещение по тексту

При редактировании в тексте всегда есть точка, в которой пользователь "находится" в данный момент: вводимые с клавиатуры символы появятся именно здесь, удаляться символы будут тоже отсюда, к этой точке будут применяться команды редактора и т. п. Обычно эта точка обозначается курсором, а в последней (информационной) строке экрана Vim указывает номера текущей строки и колонки (номер символа в строке), в которых находится курсор.

Для того чтобы выполнять редактирование текста, по нему необходимо перемещаться, т. е. перемещать курсор. Самый очевидный способ это делать – воспользоваться клавишами со стрелками. Нажатие на одну из этих клавиш обычно заставляет курсор перемещаться на один символ влево/вправо или на одну строку вверх/вниз. Трудно придумать более неэффективный и медленный способ перемещения, если нужно попасть на другой конец объемного текста, и даже простое перемещение к началу или концу строки может занять несколько секунд.

Заметим, что в процессе редактирования текста обычно возникает необходимость перемещаться не в произвольную точку, а в некоторые ключевые: начало и конец строки, слова, предложения, абзаца, выражения, заключенного в скобки, целого текста. Особенно это заметно, если требуется редактировать структурированный текст: программу (например, сценарий), конфигурационный файл и т. п. В Vi для каждого такого перемещения предусмотрены специальные команды, обычно состоящие в нажатии одной клавиши в командном режиме. Используя их, можно не только нажав одну кнопку переместиться на любое расстояние в тексте, но и двигаться по структурным элементам, переходя к предыдущему/следующему слову, предложению, абзацу, скобке и т. д. 8Прежде чем начинать экспериментировать с перемещением, нужно перейти в командный режим.

Итак, передвинуть курсор на начало текущей строки можно командой " 0 ", на первый непробельный символ в строке – " ^ ", в конец строки – " $ ". 9Символами " ^ " и " $ " в Linux повсеместно обозначаются начало и конец строки, в частности, в регулярных выражениях . Абзацами Vi считает фрагменты текста, разделенные пустой строкой, к началу предыдущего/следующего абзаца можно попасть командами " { " и " } " соответственно. Очень распространенная задача – необходимость попасть в самый конец файла: для этого служит команда " G " (" G o"), в самое начало – " gg ".

Передвинуть курсор вперед на начало следующего слова можно командой " w " (от "word", слово), на начало предыдущего – " b " (от " b ackward", назад). К началу предыдущего/следующего предложений можно переместиться командами " ( " и " ) " соответственно. Нужно учитывать, что границы слов и предложений Vi находит по формальным признакам (руководствуясь специально определенными регулярными выражениями ), поэтому решение Vi может иногда не совпадать с представлениями пользователя о границах слов и предложений. Однако пользователь всегда властен изменить соответствующие регулярные выражения, подробности – в документации по Vim.

В Vim никогда не следует вручную повторять одну и ту же команду: если нужно перейти на три слова вперед, не следует трижды нажимать " w " – для повторения команды используется множитель. Множитель – это любое число, набранное перед командой Vi: команда будет повторена соответствующее число раз. Например, " 3w " – означает "трижды переместить курсор на слово вперед", иначе говоря, переместить курсор на три слова вперед. Обратите внимание, что множители могут применяться не только с командами перемещения, но и с любыми командами Vi. Аналогично можно переместить курсор на 10 абзацев вперед командой " 10} ".

Множитель. Число, предшествующее команде Vim и означающее, что данную команду следует выполнить указанное число раз.

Не сразу очевидно, что поиск шаблона в тексте (строки или регулярного выражения ) – это тоже команда перемещения. Как и любое перемещение, поиск осуществляется в командном режиме: прежде всего, нужно нажать " / ": в последней строке появится символ " / ". Далее следует ввести шаблон для поиска – он будет отображаться в этой строке, его можно редактировать. Обычно Vi настроен таким образом, что шаблон для поиска интерпретируется как регулярное выражение, где ряд символов имеет специальное значение, эту настройку можно отключить (" :set nomagic "). После того, как введен шаблон, следует нажать Enter – курсор переместится к ближайшему (далее по тексту) совпадению с шаблоном. Поиск в обратном направлении (к предыдущему совпадению) следует начинать с команды " ?".

Совсем просто перейти к следующему употреблению в тексте того слова, на котором стоит курсор: для этого нужно просто нажать " * " в командном режиме. Аналогичная команда поиска слова в обратном направлении – " # ". Можно специально отметить в тексте точку и затем в любой момент возвращаться к ней, как к закладке. Одну закладку определяет сам Vi – " `` ", место в тексте, где было сделано последнее изменение. Подробно об этих и других командах перемещения можно прочесть в руководстве по Vim по команде " :help usr_03.txt ".

Тимур Булатов
Тимур Булатов

С момента выхода курса прошло достаточно много времени, и хотелось бы понимать, насколько курс является актуальным на сегодняшний день.

дмитрий шремзер
дмитрий шремзер

В поле PPID (" p arent p rocess id entificator") указан идентификатор родительского процесса, т. е. процессапородившего данный. Для ps это – bash, а для bash, очевидно, login

А что тогда находится в поле CMD?