Команды, которые уничтожают текст вперед от точки, добавляют уничтоженное в конец предыдущего уничтоженного текста. Команды, которые уничтожают назад от точки, добавляют это в начало. Таким образом, любая последовательность смешанных команд уничтожения перед точкой и после нее объединяет весь уничтоженный текст в один элемент без переупорядочения. Числовой аргумент не прерывает последовательность добавления уничтожений. Например, предположим, что буфер содержит такой текст:
Это пример строки ?с образцом текста.
с точкой, показанной как ?. Если вы наберете M-d M-hDELi M-d M-hDELi, уничтожая по очереди вперед и назад, то в конце получите ‘пример строки с образцом’ в качестве одного вхождения в списке уничтожений и ‘Это текста.’ в буфере. (Обратите внимание на двойной пробел, который вы можете очистить с помощью M-hSPCi или M-q.)
Другой способ уничтожить тот же текст — переместиться назад на два слова с помощью M-b M-b и уничтожить все четыре слова вперед командой C-u M-d. Это дает такой же результат в буфере и в списке уничтожений. M-f M-f C-u M-hDELi уничтожает тот же текст, проходя все время назад; и опять результат будет тем же. Текст в элементе списка уничтожений всегда имеет тот же порядок, что он имел в буфере до того, как вы его уничтожили.
Если команда уничтожения отделена от предыдущей другими командами (не просто числовым аргументом), то она начинает новый элемент в списке уничтожений. Но вы можете заставить эту команду уничтожения добавлять текст к предыдущему элементу, набрав перед ней команду C-M-w (append-next-kill). C-M-w приказывает следующей команде, если это команда уничтожения, добавить уничтоженный ею текст к последнему уничтоженному тексту вместо того, чтобы начинать новый элемент. С помощью C-M-w вы можете уничтожить несколько отдельных кусков текста и накопить их для дальнейшего восстановления в одном месте.
Команда уничтожения, следующая после M-w, не добавляет к тексту, который M-w ско-
пировала в список уничтожений.
9.2.3 Восстановление ранее уничтоженного
Для того чтобы вернуть уничтоженный текст, который уже не является последним уничтоженным, используйте команду M-y (yank-pop). Она берет прежде восстановленный текст, и заменяет его текстом более раннего уничтожения. Так, чтобы вернуть текст, предшествующий последнему уничтоженному, сначала используйте C-y, чтобы восстановить последнее уничтожение, а затем M-y, чтобы заменить его предыдущим. M-y может использоваться только после C-y или другой M-y.
M-y можно понимать в терминах указателя на “последнее восстановление”, который указывает на элемент в списке уничтожения. Каждый раз, когда вы уничтожаете, указатель на “последнее восстановление” передвигается в последний созданный элемент в начале списка. C-y восстанавливает элемент, на который ссылается указатель “последнего восстановления”. M-y двигает указатель на “последнее восстановление” к другому элементу, и текст в буфере соответственно изменяется. Достаточное количество команд M-y может переместить указатель к любому элементу в списке, таким образом, вы можете получить
любой элемент в буфере. Когда наконец указатель достигает последнего элемента списка,
следующая команда M-y снова помещает его на первый элемент.
M-y двигает указатель на “последнее восстановление” по списку, но это не меняет порядок элементов, которые всегда идут от самого последнего уничтожения до самого старого, которое еще хранится.
M-y может получить числовой аргумент, который говорит, на сколько элементов вперед продвинуть указатель на “последнее восстановление”. Отрицательный аргумент двигает этот указатель по направлению к началу списка; от начала списка он двигает к последнему элементу и продолжает движение вперед оттуда.
Как только искомый текст помещен в буфер, вы можете прекратить запускать команды M-y, и текст останется там. Это просто копия элемента списка уничтожения, поэтому редактирование его в буфере не изменяет содержимое этого списка. До тех пор, пока не делается новое уничтожение, указатель на “последнее восстановление” остается в том же самом месте в списке уничтожений, таким образом, повторение C-y восстановит еще одну копию того же самого старого уничтожения.
Если вы знаете, сколько команд M-y необходимо набрать, чтобы найти интересующий вас текст, вы можете восстановить этот текст за один шаг, используя C-y с числовым аргументом. C-y с аргументом восстанавливает текст, записанный в списке уничтожения на заданное число элементов назад. Таким образом, C-u 2 C-y достает следующий за последним блок уничтоженного текста. Это эквивалентно C-y M-y. C-y c числовым аргументом начинает подсчет от указателя на “последнее восстановление” и устанавливает этот указатель на элемент, который эта команда восстанавливает.
Длина списка уничтожений управляется переменной kill-ring-max; не может быть записано больше блоков текста, чем определено этой величиной.
Действительное содержимое списка уничтожений хранится в переменной kill-ring; вы можете просмотреть все содержимое списка уничтожений с помощью команды C-h v kill-ring.
9.3 Накопление текста
Обычно мы копируем или переносим текст путем его уничтожения и восстановления, но существуют и другие способы, удобные для копирования одного блока текста во многие места или для копирования многих рассеянных блоков текста в одно место. Чтобы скопировать один блок во много мест, запишите его в регистр (см. Глава 10 [Регистры], с. 77). Здесь мы описываем команды для накопления разбросанных кусков текста в буфер или в файл.
M-x append-to-buffer
Добавить область в заданный буфер после точки.
M-x prepend-to-buffer
Добавить область в заданный буфер перед точкой.
M-x copy-to-buffer
Копировать область в заданный буфер, удаляя старое содержимое буфера.
M-x insert-buffer
Вставить содержимое заданного буфера в текущий буфер в точке.
M-x append-to-file
Добавить область в конец заданного файла.
Для накопления текста в буфере используется M-x append-to-buffer. Она считывает имя буфера, а затем вставляет в этот буфер копию области. Если буфер с таким именем не существует, то append-to-buffer создаст его. Текст вставляется в то место в этом
буфере, где находится точка. Если вы использовали этот буфер для редактирования,
скопированный текст вставляется в середину текста, где оказалась точка.
Точка в этом буфере остается в конце копируемого текста, таким образом, последовательное использование append-to-buffer накапливает текст в заданном буфере в том же самом порядке, в котором части были скопированы. Строго говоря, append-to-buffer не всегда добавляет к тексту, уже находящемуся в буфере — она добавляет, если точка находится в конце этого буфера. Однако, если append-to-buffer является единственной командой, которую вы используете для изменения буфера, точка всегда расположена в конце.
M-x prepend-to-buffer подобна append-to-buffer за исключением того, что точка в другом буфере остается перед скопированным текстом, таким образом, последовательное применение этой команды добавляет текст в обратном порядке. M-x copy-to-buffer действует так же, за исключением того, что любой существующий текст в другом буфере удаляется, так что в буфере остается лишь вновь скопированный текст.
Чтобы вернуть накопленный текст из другого буфера, используйте команду M-x insert-buffer; она также принимает имя буфера как аргумент. Эта команда вставляет копию текста из буфера с заданным именем в выбранный буфер. Или вы можете выбрать другой буфер для редактирования, возможно, перемещая впоследствии текст из него путем уничтожения. См. Глава 15 [Буферы], с. 135, для получения базовой информации о буферах.
Вместо накопления текста внутри буфера Emacs вы можете добавить текст непосредственно в файл с помощью команды M-x append-to-file, которая использует имя файла в качестве аргумента. Она добавляет текст области в конец заданного файла. Файл на диске изменяется сразу.
Вы должны использовать append-to-file только с файлами, к которым вы не обращаетесь из Emacs. Использование этой команды для файла, к которому обратились из Emacs, может изменить файл без ведома Emacs, что может привести к потере некоторых результатов вашего редактирования.
9.4 Прямоугольники
Команды для прямоугольников работают с прямоугольными областями текста: всеми знаками между определенной парой столбцов в определенном диапазоне строк. Эти команды предназначены для уничтожения прямоугольников, восстановления уничтоженных прямоугольников, их очистки, заполнения пробелами или текстом, или удаления. Команды для прямоугольников полезны для работы с текстом в многоколоночных форматах и для приведения текста к такому формату или извлечения из него.
Когда вам нужно задать прямоугольник для команды, которая будет с ним работать, вы делаете это, устанавливая метку в одном углу и точку в противоположном. Прямоугольник, описанный таким образом, называется областью–прямоугольником, так как вы управляете им почти так же, как и областью. Но помните, что данная комбинация значений точки и метки может быть интерпретирована и как область, и как прямоугольник в зависимости от команды, которая их использует.
Если точка и метка находятся на одном столбце, то прямоугольник, который они ограничивают, пуст. Если они находятся на одной строке, то прямоугольник имеет высоту в одну строку. Эта несимметричность между строками и столбцами происходит из того, что точка (и метка) располагается между двух столбцов, но внутри строки.
C-x r k Уничтожить текст области-прямоугольника, сохраняя его содержимое в каче-
стве “последнего уничтоженного прямоугольника” (kill-rectangle).
C-x r d Удалить текст области-прямоугольника (delete-rectangle).
C-x r y Восстановить последний уничтоженный прямоугольник, помещая его верхний левый угол в точке (yank-rectangle).
C-x r o Вставить пустое место, заполняя пространство области-прямоугольника (open-rectangle). Предыдущее содержимое области-прямоугольника выталкивается вправо.
M-x clear-rectangle
Очистить область-прямоугольник, заменяя ее содержимое пробелами.
M-x delete-whitespace-rectangle
Удалить пробельные знаки в каждой строке заданного прямоугольника, начи-
ная с его самого левого столбца.
C-x r t строка hRETi
Вставить строку в каждую строку области-прямоугольника (stringrectangle).
Операции, работающие с прямоугольниками, делятся на два класса: команды удаления и вставки прямоугольников и команды для пустых прямоугольников.
Существует два способа избавиться от текста в прямоугольнике: вы можете сбросить (удалить) его или записать его как “последний уничтоженный” прямоугольник. Для этого используются две команды C-x r d (delete-rectangle) и C-x r k (kill-rectangle). В обоих случаях часть каждой строки, которая попала внутрь границ прямоугольника, удаляется, заставляя последующий текст в строке (если он существует) сдвигаться влево.
Заметьте, что “уничтожение” прямоугольника не есть уничтожение в обычном понимании; этот прямоугольник хранится не в списке уничтожений, а в специальном месте, которое в состоянии записать только самое последнее уничтожение прямоугольника. Это происходит из-за того, что восстановление прямоугольника настолько отличается от восстановления линейного текста, что для этого должны использоваться другие команды восстановления, и в этом случае трудно приписать смысл команде, выдающей более ранние уничтожения.
Чтобы вставить последний уничтоженный прямоугольник, наберите C-x r y (yankrectangle). Восстановление прямоугольника — это противоположность уничтожения. Левый верхний угол задается положением точки. Туда помещается первая строка прямоугольника, вторая строка прямоугольника помещается в позиции точки, но строкой ниже, и так далее. Число затронутых строк определяется высотой записанного прямоугольника.
Вы можете превратить списки из одной колонки в списки из двух колонок, используя уничтожение и восстановление прямоугольников; уничтожьте вторую половину списка как прямоугольник и затем восстановите его рядом с первой строчкой списка. См. Раздел 30.9 [Two-Column], с. 336, другой способ редактировать двухколоночный текст.
Прямоугольники также могут быть скопированы в регистры и из регистров с помощью
C-x r r r и C-x r i r . См. Раздел 10.3 [Регистры для прямоугольников], с. 78.
Есть две команды для работы с пустыми прямоугольниками: M-x clear-rectangle, чтобы расписать пробелами существующий текст, и C-x r o (open-rectangle), чтобы вставить пустой прямоугольник. Очистка прямоугольника эквивалентна его удалению с последующей вставкой на его место пустого прямоугольника такого же размера.
Команда M-x delete-whitespace-rectangle удаляет горизонтальное пустое пространство, начиная с определенного столбца. Это относится к каждой строке в прямоугольнике, а столбец задается левым краем прямоугольника. Правый край прямоугольника не имеет значения для этой команды.
Команда C-x r t (M-x string-rectangle) замещает прямоугольник заданной строкой (вставляя ее один раз в каждую строку). Ширина строки не обязана совпадать с шириной прямоугольника. Если ширина строки меньше, текст после прямоугольника смещается влево; если строка шире прямоугольника, текст после него смещается вправо.
10 Регистры
Регистры Emacs — это места, куда вы можете записать текст или позиции для дальнейшего использования. Текст или прямоугольник, однажды записанный в регистр, может быть скопирован в буфер один или несколько раз; позицию, записанную в регистр, можно один или несколько раз использовать для передвижения к ней точки.
Каждый регистр имеет имя, состоящее из одиночного знака. Регистр может хранить кусок текста, позицию, прямоугольник, конфигурацию окна или имя файла, но только чтото одно из перечисленного в каждый конкретный момент. Всякий раз, когда вы сохраняете что-то в регистре, оно остается там до тех пор, пока вы не поместите в этот регистр что-то еще. Чтобы узнать, что содержит регистр r, используйте M-x view-register.
M-x view-register hRETi r
Выдать описание того, что содержит регистр r.
10.1 Запись позиций в регистры
Сохранение позиции записывает местоположение в буфере, так что вы можете вернуться туда позже. Перенос в записанную позицию заново выбирает буфер и передвигает точку в это место.
C-x r hSPCi r
Записать положение точки в регистр r (point-to-register).
C-x r j r Перейти в позицию, записанную в регистре r (jump-to-register).
Чтобы записать текущее положение точки в регистр, выберите имя r и наберите C-x r hSPCi r . Регистр r сохраняет записанное таким образом положение до тех пор, пока вы не запишете в этот регистр что-то другое.
Команда C-x j r передвигает точку в позицию, записанную в регистре r. Регистр не затрагивается, он продолжает хранить ту же самую позицию. Вы можете перейти в одну и ту же позицию, используя один и тот же регистр, любое число раз.
Если вы используете C-x r j для перехода к записанной позиции, но буфер, в котором она была записана, уже уничтожен, C-x r j пытается снова создать буфер, обращаясь к тому же файлу. Конечно, это работает только для буферов, которые обращались к файлам.
10.2 Запись текста в регистры
Если вы захотите вставить копию одного и того же куска текста несколько раз, использование списка уничтожений может оказаться неудобным, так как каждое последующее уничтожение сдвигает кусок текста все дальше вглубь списка. Альтернативой этому методу является сохранение текста в регистре с последующим его восстановлением.
C-x r s r Копировать область в регистр r (copy-to-register).
C-x r i r Вставить текст из регистра r (insert-register).
C-x r s r записывает копию текста области в регистр с именем r. Запущенная с число-
вым аргументом, C-x r s r кроме того удаляет текст из буфера.
C-x r i r вставляет в буфер текст из регистра r. Обычно эта команда оставляет точку перед текстом, а метку располагает после него, но с числовым аргументом (C-u), наоборот, точку ставит после текста, а метку перед ним.
10.3 Запись прямоугольников в регистры
Регистр может содержать вместо линейного текста прямоугольник. Прямоугольники представляются в виде списка строк. См. Раздел 9.4 [Прямоугольники], с. 74, для получения основной информации по прямоугольникам и о том, как они определяются в буфере.
C-x r r r Копирует область-прямоугольник в регистр r (copy-region-to-rectangle). С
числовым аргументом еще и удаляет его.
C-x r i r Вставляет прямоугольник, который записан в регистре r (если тот содержит прямоугольник) (insert-register).
Команда C-x r i r вставляет строку текста, если регистр содержит строку, и вставляет прямоугольник, если регистр содержит прямоугольник.
Смотрите также команду sort-columns, которую можно рассматривать как команду сортировки прямоугольника. См. Раздел 30.7 [Сортировка], с. 333.
10.4 Запись конфигурации окон в регистры
Вы можете записать в регистр конфигурацию окон в выбранном фрейме или даже кон-
фигурацию всех окон во всех фреймах и позднее восстановить эту конфигурацию.
C-x r w r Записать состояние окон выбранного фрейма в регистр r (windowconfiguration-to-register).
C-x r f r Записать состояние всех фреймов, включая все их окна, в регистр r (frame configuration-to-register).
Используйте C-x r j r для восстановления конфигурации окон или фреймов. Это та же команда, что используется для восстановления позиции курсора. Когда вы восстанавливаете конфигурацию фреймов, все существующие фреймы, не входящие в эту конфигурацию, становятся невидимыми. Если вы вместо этого хотите удалить эти фреймы, используйте C-u C-x r j r .
10.5 Хранение чисел в регистрах
Существуют команды для записи числа в регистр, вставки его в буфер в десятичном виде и для увеличения этого числа. Эти команды могут быть полезны в макросах клавиатуры (см. Раздел 31.3 [Макросы клавиатуры], с. 353).
C-u число C-x r n рег
Записать число в регистр рег (number-to-register).
C-u число C-x r + рег
Увеличить число в регистре рег на заданное число (increment-register).
C-x r g рег
Вставить число из регистра рег в буфер.
C-x r g — это та же команда, что используется для вставки в буфер содержимого регистров другого типа.
10.6 Запись имен файлов в регистры
Если вы часто обращаетесь к определенным именам файлов, вам будет удобно поместить эти имена в регистры. Вот код на Лиспе, используемый для записи имени файла в регистр:
(set-register ?r ’(file . имя))
Например,
(set-register ?z ’(file . "/gd/gnu/emacs/19.0/src/ChangeLog"))
помещает показанное имя файла в регистр ‘z’.
Чтобы обратиться к файлу, чье имя находится в регистре r, наберите C-x r j r . (Это та же команда, что используется для перехода к записанной позиции или восстановления конфигурации фреймов.)
10.7 Закладки
Закладки отчасти похожи на регистры тем, что они записывают позиции, к которым вы можете перейти. В отличие от регистров, они имеют длинные имена и сохраняются автоматически от одного сеанса Emacs до другого. Шаблонное применение закладок — запись места “где вы читали” в различных файлах.
C-x r m hRETi
Заложить закладку в текущем файле в позиции точки.
C-x r m закладка hRETi
Заложить в точке закладку с именем закладка (bookmark-set).
C-x r b закладка hRETi
Перейти к закладке с именем закладка (bookmark-jump).
C-x r l Перечислить все закладки (list-bookmarks).
M-x bookmark-save
Сохранить все текущие значения закладок в файле закладок, используемом по умолчанию.
Как правило закладки используются для записи одной текущей позиции в каждом из нескольких файлов. Таким образом, команда C-x r m, устанавливающая закладку, по умолчанию использует в качестве имени закладки имя файла, к которому вы обращаетесь в данный момент. Если вы называете каждую закладку по имени файла, на который она указывает, то сможете удобно повторно обратиться к любому из этих файлов с помощью C-x r b и в то же время переместиться к позиции закладки.
Чтобы отобразить список всех ваших закладок в отдельном буфере, наберите C-x r l (list-bookmarks). Если вы переключитесь в этот буфер, вы сможете отредактировать определения закладок или дать им описания. Наберите в этом буфере C-h m для получения более подробных сведений о специальных командах редактирования в нем.
Когда вы уничтожаете Emacs, он предложит вам сохранить значения закладок в вашем файле закладок по умолчанию, ‘~/.emacs.bmk’, если вы изменяли какие-либо из этих значений. Вы также можете сохранить закладки в любое время с помощью команды M-x bookmark-save. Команды, работающие с закладками, автоматически загружают ваш файл закладок по умолчанию. Благодаря этим сохранениям и загрузкам закладки переходят от одного сеанса Emacs к другому.
Если вы установите переменную bookmark-save-flag в значение 1, то каждая команда, устанавливающая закладку, также будет записывать ваши закладки; при этом вы не потеряете значения закладок, даже если Emacs останавливается аварийно. (Это значение, если оно является числом, говорит, сколько изменений закладок проходит между сохранениями.)
Значения позиций в закладках сохраняются вместе с окружающим контекстом, так что bookmark-jump может найти правильную позицию, даже если файл был слегка изменен. Переменная bookmark-search-size говорит, сколько знаков контекста по обе стороны от позиции закладки нужно записывать.
Вот несколько дополнительных команд для работы с закладками:
M-x bookmark-load hRETi имя–файла hRETi
Загрузить файл с именем имя–файла, содержащий список значений закладок. Вы можете использовать эту команду, как и команду bookmark-write, для работы с другими файлами закладок помимо вашего файла закладок по умолчанию.
M-x bookmark-write hRETi имя–файла hRETi
Сохранить все текущие значения закладок в файле имя–файла.
M-x bookmark-delete hRETi закладка hRETi
Удалить закладку с именем закладка.
M-x bookmark-insert-location hRETi закладка hRETi
Вставить в буфер имя файла, на который указывает закладка закладка.
M-x bookmark-insert hRETi закладка hRETi
Вставить в буфер содержимое файла, на который указывает закладка заклад–
ка.
Источник: Ричард Столмен, Руководство по GNU Emacs

March 27th, 2012
admin
Опубликовано в рубрике
Метки: