Dired,  редактор каталогов

Dired создает буфер Emacs, содержащий  распечатку каталога и, возможно, некоторых его подкаталогов. Вы можете использовать обычные команды Emacs, чтобы передвигаться по этому буферу, и специальные команды Dired, чтобы производить различные действия над файлами.

28.1  Вход  в Dired

Чтобы запустить Dired, выполните C-x d или M-x dired. Эта команда считывает имя каталога или шаблон имени файла как аргумент минибуфера, чтобы определить, какие файлы нужно перечислить. Команда dired отличается от list-directory тем, что она переводит  буфер в режим Dired, так что в нем становятся доступными специальные команды Dired.

Переменная dired-listing-switches задает ключи для передачи ls при создании распечатки каталога; эта строка должна содержать ‘-l’.   Если вы используете с командой dired числовой аргумент, вы можете  указать в минибуфере ключи для ls до того, как введете имя каталога.

Чтобы показать  буфер Dired в другом окне, а не в выбранном, вместо C-x d используется C-x 4 d (dired-other-window). C-x 5 d (dired-other-frame) использует для показа буфера Dired отдельный фрейм.

28.2  Команды, действующие в буфере Dired

Буфер Dired помечен как “предназначенный  только для чтения”,  и вставлять в него текст бесполезно, так что обычные печатные знаки, такие как d и x, используются для команд Dired. Одни команды Dired устанавливают флаг на текущем файле (это файл на текущей строке) или помечают его; другие команды выполняют действия над помеченными файлами или файлами с установленным флагом.

Все обычные команды движения курсора в Emacs доступны и в буферах Dired. Также предусмотрены некоторые специальные команды. Ключи C-n и С-p переопределены так, что  они устанавливают курсор в начало имени файла на строке,  а не  в начало самой строки.

Для большего удобства, hSPCи n в Dired эквивалентны C-n. p эквивалентен C-p. (Движение по строкам делается  в Dired настолько часто, что оно заслуживает того,  чтобы набор его был облегчен.) hDELi  (передвинуться вверх и убрать флаг) часто бывает полезным просто для движения вверх.

28.3  Удаление файлов с помощью Dired

Прежде всего Dired используется, чтобы установить флаг для удаления на некоторых файлах, а потом удалить файлы, ранее помеченные флагом.

d                Установить флаг удаления для этого файла.

u                Убрать флаг удаления на этой строке.

hDELi              Передвинуть точку на строку выше и убрать на этой строке флаг удаления.

x                 Удалить файлы, помеченные флагом удаления.

Вы можете установить на файле флаг, переместившись  на строку, описывающую файл, и набрав на ней d (dired-flag-file-deletion). Флаг удаления выглядит как ‘D’ в начале строки.   Эта команда передвигает точку  в начало следующей  строки,  таким  образом,

повторение  команды d помечает для удаления последующие файлы. Числовой аргумент служит в качестве счетчика повторов.

Файлы помечаются для удаления, а не удаляются  немедленно, чтобы уменьшить опасность случайного удаления файла. До тех пор, пока вы прямо не укажете Dired удалить помеченный файл, вы можете  убрать флаги, используя команды u или hDELi.   u (diredunmark работает точно так же,  как d, но удаляет флаги, а не создает их.  hDELi  (diredunmark-backward) двигается вверх, убирая флаги; это подобно u с аргументом ?1.

Чтобы удалить файлы с установленным флагом, наберите  x (dired-expunge).    Эта команда покажет сначала список всех имен файлов, помеченных для удаления, и потребует подтверждения вводом yes.  Если вы подтверждаете,  то все помеченные флагом файлы уничтожаются и их строки удаляются из текста буфера Dired. Сокращенный  буфер Dired остается выбранным.

Если при запросе  подтверждения вы ответите  no или выйдите  с помощью C-g, вы немедленно вернетесь в Dired; все флаги удаления останутся в буфере, и файлы не будут удалены.

28.4  Установка флага на несколько файлов одновременно

#                Помечает флагом удаления все файлы, которые появились при самосохранении (файлы, чьи имена начинаются и кончаются на ‘#’) (см.  Раздел 14.5 [Самосохранение], с. 114).

~                Помечает флагом удаления все резервные файлы (файлы, чьи имена кончаются на ‘~’) (см. Раздел 14.3.1 [Резервные файлы], с. 110).

&                  Помечает  флагом  удаления  все файлы с определенными типами имен, предпо-

лагающими, что вы легко сможете их снова создать.

. (Точка)   Помечает флагом удаления излишние резервные файлы.   Сохраняются только несколько самых старых и самых новых резервных копий; промежуточные помечаются флагом.

%  d регулярноевыражение hRETi

Помечает флагом удаления все файлы, чьи имена соответствуют заданному

регулярномувыражению.

Команды #, ~, & и . устанавливают флаг для нескольких файлов, основываясь на их именах. Эти команды полезны именно потому, что сами по себе они не удаляют файлы; вы можете  убрать флаги удаления с любых помеченных  файлов, которые вы в действительности хотите сохранить.

&  (dired-flag-garbage-files) устанавливает флаг удаления для файлов,  чьи имена соответствуют регулярному выражению, заданному переменной  dired-garbage-filesregexp.   По умолчанию ей соответствуют определенные  файлы, производимые  TEX,  и

файлы ‘.orig’ и ‘.rej’, производимые программой patch.

# (dired-flag-auto-save-files) устанавливает флаг удаления для всех файлов, чьи имена выглядят как имена самосохраненных  файлов (см.  Раздел 14.5 [Самосохранение], с. 114) — это файлы с именами, начинающимися  и заканчивающимися на ‘#’.  ~ (diredflag-backup-files) устанавливает флаг удаления для всех файлов, чьи имена говорят, что это резервные копии (см.  Раздел 14.3.1 [Резервные файлы], с. 110) — это файлы с именами, заканчивающимися на ‘~’.

. (точка, dired-clean-directory) устанавливает флаг удаления лишь для некоторых резервных копий: для всех, кроме самых старых и самых новых резервных копий одного файла. Обычно dired-kept-versions (не kept-new-versions; эта переменная применяется при сохранении) задает число самых новых сохраняемых версий каждого файла, а keptold-versions задает число самых старых сохраняемых версий.

Точка с положительным числовым аргументом, как в C-u 3 ., указывает число оставляемых новых версий, перекрывая значение dired-kept-versions. Отрицательный числовой аргумент перекрывает kept-old-versions, используя число, противоположное заданному, для указания числа оставляемых старых версий каждого файла.

Команда %  d устанавливает флаг удаления для всех файлов, чьи имена соответствуют заданному регулярному выражению (dired-flag-files-regexp). При поиске используется имя файла с исключенной частью, определяющей  каталог.   Для привязки регулярного выражения к началу или концу имени вы можете использовать ‘^’ и ‘$’.  Подкаталоги вы можете исключить, скрыв их (см. Раздел 28.13 [Скрывание подкаталогов], с. 299).

28.5  Обращение к файлам в Dired

Есть несколько команд Dired для обращения к файлам, перечисленным  в буфере Dired, или просмотра их содержимого. Все они применяются к файлу на текущей строке;  если этот файл на самом деле является каталогом, эти команды вызывают в нем Dired (создавая отдельный  буфер Dired).

f         Обращается к файлу, описанному на текущей строке; подобна вводу C-x C-f  и заданию имени этого файла (dired-find-file).  См. Раздел 14.2 [Обращение], с. 106.

hRETi             Эквивалент f.

o                Как  f,  но использует для отображения буфера  этого файла  отдельное  окно (dired-find-file-other-window).  Буфер Dired остается  видимым в первом окне.   Это подобно использованию C-x 4 C-f  для  обращения к  этому файлу. См. Глава 16 [Окна], с. 141.

C-o            Обращается к файлу, описанному на текущей строке, и отображает его буфер в отдельном окне, но не выбирает это окно (dired-display-file).

Mouse-2    Обращается к файлу в строке,  на которой вы щелкнули  (dired-mouse-findfile-other-window).  Эта команда использует для показа файла другое окно, как команда o.

v                 Обращается к файлу, описанному на текущей строке, в режиме просмотра, как

M-x view-file (dired-view-file).

Просмотр файла похож на обращение к нему, но этот режим делает акцент на предоставление большего удобства для перемещения по файлу и не позволяет изменять его. См. Раздел 14.10 [Просмотр файла], с. 132.

28.6  Пометки Dired  vs. флаги

Вместо установки для файла флага с помощью ‘D’ вы можете установить на этом файле метку с помощью какого-либо другого знака (обычно ‘*’). Большинство команд Dired для работы с файлами, кроме “вычеркивания” (x), действуют на файлы, помеченные звездочкой

‘*’.

Вот некоторые команды для пометки с помощью ‘*’, для снятия метки или для произведения каких-либо действий над метками.  (См.  Раздел 28.3 [Удаление в Dired], с. 291, для получения информации о командах для установки и снятия флагов на файлах.)

m

* m                      Помечает текущий файл звездочкой ‘*’ (dired-mark). С числовым аргументом n, помечает следующие n файлов начиная от текущего. (Если n отрицателен, помечает ?n предыдущих файлов.)

* *          Помечает все исполняемые файлы звездочкой ‘*’ (dired-mark-executables). С

числовым аргументом, убирает метки со всех таких файлов.

* @                           Помечает все символьные ссылки звездочкой (dired-mark-symlinks). С число-

вым аргументом, убирает метки со всех таких файлов.

* /        Помечает звездочкой все файлы, которые являются в действительности каталогами, исключая ‘.’ и ‘..’ (dired-mark-directories).  С числовым аргументом, убирает метки со всех этих файлов.

* s             Помечает все файлы в текущем подкаталоге,  кроме  ‘.’  и ‘..’  (dired-marksubdir-files).

u

* u             Убирает любую метку на этой строке (dired-unmark).

hDELi

* hDELi          Перемещает  точку  на предыдущую строку и убирает любую  метку на этой строке (dired-unmark-backward).

* !        Убирает все метки со всех файлов в этом буфере  Dired  (dired-unmark-allfiles-no-query).

* ? знакметки

Убирает все метки, использующие знак знакметки (dired-unmark-all-files). Аргументом  должен быть один знак — не  используете  для его завершения hRETi.

С числовым аргументом, эта команда запрашивает подтверждение на снятие метки для каждого помеченного файла. Вы можете  ответить y для подтверждения, n для отказа или ! для снятия меток со всех остальных файлов без запроса о них.

* C-n         Перемещает вниз к  следующему  помеченному файлу  (dired-next-markedfile). Файл считается “помеченным”, если на нем есть метки любого вида.

* C-p         Перемещает вверх к предыдущему  помеченному файлу  (dired-prev-markedfile)

* t        Переключает  все метки (dired-do-toggle): файлы, помеченные ‘*’ становятся непомеченными, а непомеченные файлы метятся знаком ‘*’.  Файлы,  помеченные другим способом, не затрагиваются.

* c старый новый

Заменяет все метки, использующие  знак старый на метки со знаком новый (dired-change-marks). Эта команда дает основной метод создания или использования меток, отличных от ‘*’ или ‘D’. Аргументами должны быть одиночные знаки — не используйте hRETдля их завершения.

С помощью этой команды вы можете использовать почти любой знак в качестве знака метки для разделения  различных классов файлов. Если старый знак

— это пробел (‘ ’),  то эта команда действует на все непомеченные  файлы; если новый знак является пробелом, эта команда убирает метку с файлов, на которые она действует.

Чтобы продемонстрировать мощь этой команды, мы покажем способ установить метку ‘D’ на все файлы, которые не были помечены, в то же время снимая метку со всех файлов, имевших метку ‘D’:

* c D  t  * c SPC  D     * c t SPC

Здесь предполагается,  что ни один из файлов не помечен флагом ‘t’.

% m  regexp hRETi

* %  regexp hRETi

Помечает (знаком ‘*’) все файлы, чьи имена соответствуют регулярному выражению regexp (dired-mark-files-regexp). Эта команда похожа на %  d, но она помечает файлы звездочкой ‘*’, а не устанавливает  флаг ‘D’.  См. Раздел 28.4 [Установка флага на несколько файлов], с. 292.

Для поиска совпадений используется  только та часть имени файла, которая не задает каталог.  Для привязки регулярного выражения к началу или концу имени вы можете использовать ‘^’  и ‘$’.  Подкаталоги вы можете исключить, скрыв их (см. Раздел 28.13 [Скрывание подкаталогов], с. 299).

%  g regexp hRETi

Помечает (знаком ‘*’) все файлы, чье содержимое включает совпадения с регулярным выражением regexp (dired-mark-files-containing-regexp).   Эта команда похожа на %  m,  но она просматривает содержимое  файлов, а не  их имена.

C-_            Отменяет изменения в буфере Dired, такие как добавление или снятие меток

(dired-undo).

28.7  Действия над файлами

Этот раздел описывает основные команды Dired для произведения различных действий над несколькими файлами. Все эти команды являются заглавными буквами; все они используют минибуфер, либо для считывания аргументов, либо для запрашивания подтверждения перед совершением  действий.  Все они дают вам некоторые способы указания, какие файлы должны быть обработаны:

Если вы даете команде числовой аргумент n, она действует на n следующих файлов, начиная с текущего. (Если n отрицательно, то эта команда действует на ?n файлов, предшествующих текущей строке.)

Иначе, если какие-то файлы помечены с помощью ‘*’, команда действует на все эти файлы.

Иначе эта команда действует только на текущий файл.

Вот команды для манипуляций над файлами, действующие  таким способом.  (Некоторые другие команды Dired, такие как ! и ‘%’, также придерживаются этих соглашений для принятия решения о выборе файлов для работы.)

C новый hRETi

Копирует указанные файлы (dired-do-copy).  Аргумент  новый — это каталог, в который нужно копировать, или (при копировании единственного файла) новое имя.

Если dired-copy-preserve-time не равна nil, то при копировании с помощью этой команды время изменения нового файла устанавливается  таким же, как у старого файла.

D                       Удаляет указанные файлы (dired-do-delete). Подобно остальным командам в этом разделе, эта команда действует на помеченные файлы или на n следующих файлов. Напротив, x (dired-expunge) удаляет все файлы с  установленным флагом.

R новый hRETi

Переименовывает  указанные файлы (dired-do-rename).   Аргумент  новый — это каталог,  в который  нужно  переименовывать,  или (при  переименовании единственного файла) новое имя.

Dired автоматически изменяет имена файлов, к которым вы обращаетесь, для связанных с этими переименованным  файлами буферов так,  чтобы они отражали новые имена.

H новый hRETi

Создает жесткие ссылки на указанные файлы (dired-do-hardlink). Аргумент новый — это каталог, в котором нужно создавать ссылки, или (при создании ссылки на единственный файл) имя этой ссылки.

S новый hRETi

Создает символьные ссылки на указанные файлы (dired-do-symlink).   Аргумент новый — это каталог, в котором нужно создавать ссылки, или (при создании ссылки на единственный файл) имя этой ссылки.

M режим hRETi

Изменяет режим (также называемый “битами прав доступа”) указанных файлов (dired-do-chmod).  Эта команда использует программу chmod, потому режим может быть любым аргументом, который chmod способен обработать.

G новаягруппа hRETi

Заменяет группу  владельцев указанных файлов на новуюгруппу (dired-dochgrp).

O новыйвладелец hRETi

Заменяет владельца указанных файлов на новоговладельца (dired-do-chown). (На большинстве систем это может делать только привилегированный пользователь.)

Переменная  dired-chown-program задает имя программы, используемой для этих задач (различные системы помещают chown в разные места).

P команда hRETi

Печатает указанные файлы (dired-do-print).  Вы должны указать команду печати, но в минибуфере сразу появляется подходящая  предполагаемая строка, полученная с помощью переменных lpr-command и lpr-switches  (эти же переменные использует lpr-buffer ; см. Раздел 30.4 [Распечатка], с. 331).

Z                Сжимает  указанные файлы (dired-do-compress).    Если  оказывается, что какой-то файл уже сжат, эта команда наоборот раскрывает его.

L                Загружает указанные файлы Emacs Lisp (dired-do-load).   См.   Раздел 23.7 [Библиотеки Лиспа], с. 253.

B                     Байт-компилирует указанные файлы на Emacs Lisp (dired-do-byte-compile).

См. раздел “Byte Compilation” в The Emacs Lisp Reference Manual.

A regexp  hRETi

Производит поиск регулярного выражения regexp во всех указанных файлах

(dired-do-search).

Эта команда — вариант команды tags-search.  Поиск останавливается при первом найденном  совпадении;  чтобы продолжить поиск и найти следующее совпадение, нажмите M-,. См. Раздел 22.13.5 [Поиск с помощью тегов], с. 229.

Q старое hRETновое hRETi

Производит query-replace-regexp в каждом из указанных файлов, заменяя совпадения старого  (регулярного  выражения) на  строку  новое (dired-doquery-replace).

Эта команда — вариант tags-query-replace. Если вы выйдите из цикла замены с подтверждением, вы можете использовать M-, для продолжения поиска и замены дальнейших совпадений. См. Раздел 22.13.5 [Поиск с помощью тегов], с. 229.

Одна особая команда для работы с файлами — это + (dired-create-directory). Она считывает имя каталога и создает его, если каталог с таким именем еще не существует.

28.8  Команды оболочки в Dired

Команда Dired ! (dired-do-shell-command) считывает в минибуфере командную строку оболочки и запускает эту команду оболочки для всех указанных файлов. Вы можете задать обрабатываемые файлы обычными методами, как для команд Dired (см. Раздел 28.7 [Действия над файлами], с. 295). Есть два способа применить  команду оболочки к нескольким файлам:

Если вы используете в команде оболочки ‘*’, то эта команда запускается один раз, а

‘*’ заменяется списком имен файлов. Имена файлов передаются  в том же порядке,  в каком они появляются в буфере Dired.

Таким образом, ! tar cf foo.tar * hRETзапускает tar для всего списка имен файлов,

помещая их все в один tar-файл ‘foo.tar’.

Если командная строка не содержит ‘*’, она запускается один раз для каждого файла

с добавленным в конце именем этого файла.

Например, ! uudecode hRETзапускает для каждого файла команду uudecode.

Что если вы хотите  выполнить команду оболочки один раз для каждого файла, но с именем файла, вставленным  в середине?  Или если вы хотите использовать имена файлов более сложным образом? Используйте циклы оболочки. Например, такая команда оболочки запустила бы uuencode для каждого заданного файла, записывая вывод в соответствующий

‘.uu’-файл:

for file in *; do uuencode $file $file >$file.uu; done

Рабочим каталогом команды оболочки служит каталог верхнего уровня буфера Dired.

Команда ! не пытается обновить буфер Dired, чтобы показать новые или измененные файлы, потому что на самом деле  она не понимает команд оболочки и не знает, какие имена изменились.  Для обновления буфера Dired используйте команду g (см. Раздел 28.14 [Обновление в Dired], с. 300).

28.9  Преобразование имен файлов в Dired

Вот команды, которые изменяют имена файлов систематическим  образом:

%  u             Изменяет имя каждого из выбранных файлов на имя, написанное заглавными буквами (dired-upcase). Если старыми именами файлов были ‘Foo’ и ‘bar’, то новыми будут ‘FOO’ и ‘BAR’.

%  l     Изменяет имя каждого из выбранных файлов на имя, написанное  строчными буквами (dired-downcase).  Если старыми именами файлов были ‘Foo’ и ‘bar’, то новыми будут ‘foo’  и ‘bar’.

% R  старое hRETновое hRETi

% C  старое hRETновое hRETi

% H  старое hRETновое hRETi

%  S старое  hRETновое hRETi

Эти  четыре команды переименовывают,  копируют,  создают жесткие и символьные ссылки, вычисляя в каждом случае новое имя путем подстановки в регулярном выражении, задающем имя старого файла.

Эти четыре команды подстановки в регулярном выражении в действительности производят поиск и замену в именах выбранных файлов в буфере Dired.  Они принимают два аргумента: регулярное выражение старое и образец подстановки  новое.

Эти команды сравнивают каждое “старое” имя файла с регулярным выражением старое и затем заменяют совпавшую часть на новое. Вы можете использовать в строке новое обозначения ‘\&’  и ‘\цифра’,  чтобы сослаться на весь или на часть совпавшего образца в старом имени файла, как  в replace-regexp (см.   Раздел 12.7.2 [Замена регулярного выражения], с. 96). Если в имени файла есть более одного совпадения с регулярным выражением, заменяется только первое.

Например, % R  ^.*$ hRETx-\&  hRETпереименовывает каждый выбранный  файл, добавляя ‘x-’  в начало имени.  Обратная процедура,  удаление ‘x-’  из начала каждого имени файла, также возможна: один способ — набрать % R  ^x-\(.*\)$ hRET\1 hRETi; другой — это % R  ^x hRETi hRETi.  (Используйте ‘^’ и ‘$’ для привязки регулярных выражений к началу или концу имени.)

Обычно при замене не затрагиваются имена каталогов, которым принадлежат файлы; обрабатываются только файлы в этом каталоге.   Если вы зададите числовой аргумент, равный нулю, при замене будут обрабатываться  полные абсолютные имена файлов, включая имена каталогов.

Часто вы можете  захотеть выбрать набор обрабатываемых  файлов с помощью того же  регулярного выражения regexp, что будет использоваться для их обработки.  Чтобы сделать так,  пометьте  эти файлы командой % m  regexp hRETi,  а затем примените  это же регулярное выражение в команде  обработки. Для облегчения этого, команды обработки файлов, начинающиеся  на %, используют по умолчанию последнее регулярное  выражение, заданное любой команде %.

28.10  Сравнение файлов в Dired

В Dired есть две команды, которые сравнивают заданные файлы с помощью программы

diff.

=                Сравнивает текущий файл (файл в позиции точки)  с другим файлом (файлом в позиции метки), используя программу diff (dired-diff).   Файл в позиции метки — это первый аргумент diff, а файл в позиции точки — второй.

M-=            Сравнивает текущий файл с его последней резервной  копией  (dired-backupdiff).   Если текущий файл сам является  резервной копией,  сравнивает его с оригиналом; таким образом вы можете сравнить файл с любой его резервной версией по вашему выбору.

Первым аргументом diff передается резервная копия.

28.11  Подкаталоги в Dired

В обычном случае буфер Dired показывает только один каталог; но вы также можете включить в список и его подкаталоги.

Простейший способ включить несколько подкаталогов в один буфер Dired — задать для запуска ls ключи ‘-lR’.  (Если при вызове Dired вы зададите числовой аргумент, вы сможете  написать эти ключи  в минибуфере.) Это произведет рекурсивный список каталога, показывающий  все подкаталоги всех уровней.

Но обычно всех подкаталогов бывает слишком много; чаще вы предпочли бы включить только конкретные подкаталоги. Вы можете сделать это с помощью команды i:

i       Вставляет содержимое подкаталога ниже в этом буфере.

Применяйте  команду i (dired-maybe-insert-subdir) на строке,  описывающей файл,

который является каталогом. Она вставляет содержимое этого каталога в этот же буфер

Dired и перемещает к нему. Вставленное содержимое подкаталога следует после каталога верхнего уровня данного буфера Dired, как в выводе ‘ls -lR’.

Если содержимое подкаталога уже находится в этом буфере, команда i просто переме-

щает к нему.

В обоих случаях i до перемещения устанавливает метку Emacs, так  что C-u C-hSPCi

возвращает вас к предыдущей позиции в буфере (к строке, описывающей подкаталог).

Используйте  команду l (dired-do-redisplay) для обновления  содержимого подкаталога.  Для удаления подкаталога вы можете  применить команду k.   См.   Раздел 28.14 [Обновление в Dired], с. 300.

28.12  Перемещение по подкаталогам

Когда буфер Dired перечисляет подкаталоги, вы можете использовать команды переме-

щения по страницам C-x [ и C-x ] для перехода через целые каталоги.

Следующие команды передвигают в пределах одного уровня, вверх или вниз по дереву каталогов в одном буфере Dired.  Они перемещают к строкам заголовков каталогов; это строки, сообщающие имя каталога, они выводятся  перед его содержимым.

C-M-n        Переходит к строке заголовка следующего подкаталога,  независимо от его уров-

ня (dired-next-subdir).

C-M-p        Переходит к  строке  заголовка предыдущего подкаталога,  независимо  от его уровня (dired-prev-subdir).

C-M-u        Переходит к строке заголовка родительского подкаталога (dired-tree-up).

C-M-d        Переходит вниз по дереву каталогов, к строке заголовка первого подкаталога

(dired-tree-down).

<                Перемещает вверх  к   предыдущей  строке   файла-каталога   (dired-prevdirline).   Это строки,  описывающие  каталог как  файл в его  родительском каталоге.

>                Перемещает к следующей строке файла-каталога (dired-prev-dirline).

28.13  Скрывание подкаталогов

Скрыть  подкаталог — значит сделать невидимым его содержимое,  за исключением строки заголовка, средствами выборочного показа (см.  Раздел 11.4 [Выборочный показ], с. 83).

$                Скрывает или открывает подкаталог, на котором находится точка, и перемещает точку к следующему подкаталогу (dired-hide-subdir). Числовой аргумент служит в качестве счетчика повторов.

M-$            Скрывает все подкаталоги в этом буфере  Dired, оставляя только  их строки заголовков (dired-hide-all).  Или, если какой-нибудь подкаталог уже скрыт, делает все подкаталоги снова видимыми. Вы можете использовать эту команду, чтобы получить обзор очень глубоких деревьев каталогов или чтобы быстро переместиться к далеким подкаталогам.

Обычные команды Dired никогда не затрагивают файлы в скрытых подкаталогах. Например, команды, работающие с помеченными  файлами, игнорируют файлы в скрытых каталогах, даже если они помечены. Следовательно, вы можете использовать скрывание, чтобы временно исключить подкаталоги из области действия различных операций, не убирая при этом метки.

Команды скрывания подкаталогов переключают; это значит, что они скрывают то, что было видимо, и показывают то, что было скрыто.

28.14  Обновление буфера Dired

Этот раздел описывает команды для обновления буфера Dired, чтобы он отражал внешние (сделанные не в Dired) изменения в буферах и файлах, и для удаления части буфера Dired.

g                Обновляет  все содержимое  буфера Dired (revert-buffer).

l       Обновляет указанные файлы (dired-do-redisplay).

k                 Удаляет заданные строки  файлов — не сами файлы, а только строки в буфере

(dired-do-kill-lines).

s                 Переключает между  сортировкой в алфавитном  порядке  и по дате/времени

(dired-sort-toggle-or-edit).

C-u s переключатели hRETi

Обновляет  буфер Dired, используя переключатели в качестве dired-listingswitches.

Наберите g (revert-buffer), чтобы содержимое  буфера Dired обновилось, основываясь на сделанных в перечисленных файлах и каталогах изменениях. Эта команда сохраняет все метки, кроме меток, стоявших на удаленных файлах. Скрытые подкаталоги обновляются, но остаются скрытыми.

Чтобы обновить только некоторые файлы, наберите l (dired-do-redisplay). Эта команда применяется к следующим n файлам, или к помеченным  файлам, если такие есть, или к текущему файлу. Обновление их означает считывание нового статуса из файловой системы и обновление буфера для правильного отображения состояния этих файлов.

Если вы примените l на строке заголовка подкаталога, она обновит содержимое этого подкаталога.

Чтобы удалить заданные строки  файлов — не сами файлы, только их строки — напечатайте k (dired-do-kill-lines). Запущенная с числовым аргументом n, эта команда применяется к следующим n файлам; иначе она применяется к помеченным файлам.

Если вы уничтожите  строку  для файла, являющегося  каталогом, содержимое  этого каталога также  будет удалено из буфера. Другой способ удалить подкаталог из буфера Dired — набрать C-u k на строке заголовка этого подкаталога.

Команда g возвращает все строки, уничтоженные таким методом, но не возвращает подкаталоги — вы должны использовать i, чтобы снова вставить каждый подкаталог.

Файлы в буферах Dired обычно перечисляются в алфавитном порядке по именам. Или Dired может отсортировать их по дате и времени. Команда Dired s (dired-sort-toggleor-edit) переключает между этими двумя режимами сортировки. Строка режима в буфере Dired показывает, по какому признаку в данный момент отсортированы файлы: по имени или по дате.

C-u s переключатели hRETi  позволяет вам задать новое значение для dired-listingswitches.

28.15  Dired  и find

Вы можете  задать набор файлов  для показа в буфере  Dired более  гибким способом,

используя для выбора файлов утилиту find.

Чтобы найти все файлы,  чьи имена соответствуют заданному шаблону, запустите M-x find-name-dired.  Эта команда считывает аргументы каталог и образец и выбирает все файлы в каталоге или его подкаталогах, чьи имена соответствуют образцу.

Выбранные таким способом файлы отображаются  в буфере Dired, в котором доступны обычные команды Dired.

Если вы  хотите  проверять содержимое файлов, а  не  их  имена, используйте  M-x find-grep-dired.   Эта команда считывает в минибуфере два аргумента, каталог и regexp; она выбирает  все файлы в каталоге или его подкаталогах, которые содержат совпадения с регулярным выражением regexp. Для этого она запускает программы find и grep. Смотрите  также  M-x grep-find, раздел Раздел 23.1 [Компиляция], с. 247. Помните,  что регулярное выражение задается для grep, а не для Emacs.

Наиболее общая команда в этой серии — команда M-x find-dired,  которая позволяет вам указать любое условие, которое может проверить find.  Эта команда принимает два аргумента минибуфера, каталог и аргументы-find; она запускает find в каталоге,  передавая аргументы-find, чтобы сообщить, какие условия должна проверить find.   Чтобы использовать эту команду, вы должны уметь пользоваться программой find.

Формат распечатки, производимой этими командами, управляется переменной findls-option; ее значение  по умолчанию велит использовать для ls ключи ‘-ld’. Если ваши распечатки повреждены, вам может понадобиться изменить значение этой переменной.

Источник: Ричард Столмен, Руководство по GNU Emacs

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий