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

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

Вход в 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 отдельный фрейм.

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

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

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

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

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

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

d
Установить флаг удаления для этого файла.
u
Убрать флаг удаления на этой строке.
DEL
Передвинуть точку на строку выше и убрать на этой строке флаг удаления.
x
Удалить файлы, помеченные флагом удаления.

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

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

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

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

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

#
Помечает флагом удаления все файлы, которые появились при самосохранении (файлы, чьи имена начинаются и кончаются на `#') (смотрите раздел Самосохранение: защита от гибели).
~
Помечает флагом удаления все резервные файлы (файлы, чьи имена кончаются на `~') (смотрите раздел Резервные файлы).
&
Помечает флагом удаления все файлы с определёнными типами имен, предполагающими, что вы легко сможете их снова создать.
. (Точка)
Помечает флагом удаления излишние резервные файлы. Сохраняются только несколько самых старых и самых новых резервных копий; промежуточные помечаются флагом.
% d регулярное-выражение RET
Помечает флагом удаления все файлы, чьи имена соответствуют регулярному-выражению.

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

& (dired-flag-garbage-files) устанавливает флаг удаления для файлов, чьи имена соответствуют регулярному выражению, заданному переменной dired-garbage-files-regexp. По умолчанию ей соответствуют определённые файлы, производимые TeX, и файлы `.orig' и `.rej', производимые программой patch.

# (dired-flag-auto-save-files) устанавливает флаг удаления для всех файлов, чьи имена выглядят как имена самосохраненных файлов (смотрите раздел Самосохранение: защита от гибели) -- это файлы с именами, начинающимися и заканчивающимися на `#'. ~ (dired-flag-backup-files) устанавливает флаг удаления для всех файлов, чьи имена говорят, что это резервные копии (смотрите раздел Резервные файлы) -- это файлы с именами, заканчивающимися на `~'.

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

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

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

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

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

f
Обращается к файлу, описанному на текущей строке; подобна вводу C-x C-f и заданию имени этого файла (dired-find-file). Смотрите раздел Обращение к файлам.
RET
Эквивалент f.
o
Как f, но использует для отображения буфера этого файла отдельное окно (dired-find-file-other-window). Буфер Dired остается видимым в первом окне. Это подобно использованию C-x 4 C-f для обращения к этому файлу. Смотрите раздел Множество окон.
C-o
Обращается к файлу, описанному на текущей строке, и отображает его буфер в отдельном окне, но не выбирает это окно (dired-display-file).
Mouse-2
Обращается к файлу в строке, на которой вы щёлкнули (dired-mouse-find-file-other-window). Эта команда использует для показа файла другое окно, как команда o.
v
Обращается к файлу, описанному на текущей строке, в режиме просмотра, как M-x view-file (dired-view-file). Просмотр файла похож на обращение к нему, но этот режим делает акцент на предоставление большего удобства для перемещения по файлу и не позволяет изменять его. Смотрите раздел Разнообразные действия над файлами.

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

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

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

m
* m
Помечает текущий файл звездочкой `*' (dired-mark). С числовым аргументом n, помечает следующие n файлов начиная от текущего. (Если n отрицателен, помечает -n предыдущих файлов.)
* *
Помечает все исполняемые файлы звездочкой `*' (dired-mark-executables). С числовым аргументом, убирает метки со всех таких файлов.
* @
Помечает все символьные ссылки звездочкой (dired-mark-symlinks). С числовым аргументом, убирает метки со всех таких файлов.
* /
Помечает звездочкой все файлы, которые являются в действительности каталогами, исключая `.' и `..' (dired-mark-directories). С числовым аргументом, убирает метки со всех этих файлов.
* s
Помечает все файлы в текущем подкаталоге, кроме `.' и `..' (dired-mark-subdir-files).
u
* u
Убирает любую метку на этой строке (dired-unmark).
DEL
* DEL
Перемещает точку на предыдущую строку и убирает любую метку на этой строке (dired-unmark-backward).
* !
Убирает все метки со всех файлов в этом буфере Dired (dired-unmark-all-files-no-query).
* ? знак-метки
Убирает все метки, использующие знак знак-метки (dired-unmark-all-files). Аргументом должен быть один знак --- не используете для его завершения RET. С числовым аргументом, эта команда запрашивает подтверждение на снятие метки для каждого помеченного файла. Вы можете ответить y для подтверждения, n для отказа или ! для снятия меток со всех остальных файлов без запроса о них.
* C-n
Перемещает вниз к следующему помеченному файлу (dired-next-marked-file). Файл считается "помеченным", если на нем есть метки любого вида.
* C-p
Перемещает вверх к предыдущему помеченному файлу (dired-prev-marked-file)
* t
Переключает все метки (dired-do-toggle): файлы, помеченные `*' становятся непомеченными, а непомеченные файлы метятся знаком `*'. Файлы, помеченные другим способом, не затрагиваются.
* c старый новый
Заменяет все метки, использующие знак старый на метки со знаком новый (dired-change-marks). Эта команда даёт основной метод создания или использования меток, отличных от `*' или `D'. Аргументами должны быть одиночные знаки -- не используйте RET для их завершения. С помощью этой команды вы можете использовать почти любой знак в качестве знака метки для разделения различных классов файлов. Если старый знак -- это пробел (` '), то эта команда действует на все непомеченные файлы; если новый знак является пробелом, эта команда убирает метку с файлов, на которые она действует. Чтобы продемонстрировать мощь этой команды, мы покажем способ установить метку `D' на все файлы, которые не были помечены, в то же время снимая метку со всех файлов, имевших метку `D':
* c D t * c SPC D * c t SPC
Здесь предполагается, что ни один из файлов не помечен флагом `t'.
% m regexp RET
* % regexp RET
Помечает (знаком `*') все файлы, чьи имена соответствуют регулярному выражению regexp (dired-mark-files-regexp). Эта команда похожа на % d, но она помечает файлы звездочкой `*', а не устанавливает флаг `D'. Смотрите раздел Установка флага на несколько файлов одновременно. Для поиска совпадений используется только та часть имени файла, которая не задаёт каталог. Для привязки регулярного выражения к началу или концу имени вы можете использовать `^' и `$'. Подкаталоги вы можете исключить, скрыв их (смотрите раздел Скрывание подкаталогов).
% g regexp RET
Помечает (знаком `*') все файлы, чье содержимое включает совпадения с регулярным выражением regexp (dired-mark-files-containing-regexp). Эта команда похожа на % m, но она просматривает содержимое файлов, а не их имена.
C-_
Отменяет изменения в буфере Dired, такие как добавление или снятие меток (dired-undo).

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

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

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

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

C новый RET
Копирует указанные файлы (dired-do-copy). Аргумент новый --- это каталог, в который нужно копировать, или (при копировании единственного файла) новое имя. Если dired-copy-preserve-time не равна nil, то при копировании с помощью этой команды время изменения нового файла устанавливается таким же, как у старого файла.
D
Удаляет указанные файлы (dired-do-delete). Подобно остальным командам в этом разделе, эта команда действует на помеченные файлы или на n следующих файлов. Напротив, x (dired-expunge) удаляет все файлы с установленным флагом.
R новый RET
Переименовывает указанные файлы (dired-do-rename). Аргумент новый -- это каталог, в который нужно переименовывать, или (при переименовании единственного файла) новое имя. Dired автоматически изменяет имена файлов, к которым вы обращаетесь, для связанных с этими переименованным файлами буферов так, чтобы они отражали новые имена.
H новый RET
Создает жесткие ссылки на указанные файлы (dired-do-hardlink). Аргумент новый -- это каталог, в котором нужно создавать ссылки, или (при создании ссылки на единственный файл) имя этой ссылки.
S новый RET
Создает символьные ссылки на указанные файлы (dired-do-symlink). Аргумент новый -- это каталог, в котором нужно создавать ссылки, или (при создании ссылки на единственный файл) имя этой ссылки.
M режим RET
Изменяет режим (также называемый "битами прав доступа") указанных файлов (dired-do-chmod). Эта команда использует программу chmod, потому режим может быть любым аргументом, который chmod способен обработать.
G новая-группа RET
Заменяет группу владельцев указанных файлов на новую-группу (dired-do-chgrp).
O новый-владелец RET
Заменяет владельца указанных файлов на нового-владельца (dired-do-chown). (На большинстве систем это может делать только привилегированный пользователь.) Переменная dired-chown-program задаёт имя программы, используемой для этих задач (различные системы помещают chown в разные места).
P команда RET
Печатает указанные файлы (dired-do-print). Вы должны указать команду печати, но в минибуфере сразу появляется подходящая предполагаемая строка, полученная с помощью переменных lpr-command и lpr-switches (эти же переменные использует lpr-buffer ; смотрите раздел Вывод твердой копии).
Z
Сжимает указанные файлы (dired-do-compress). Если оказывается, что какой-то файл уже сжат, эта команда наоборот раскрывает его.
L
Загружает указанные файлы Emacs Lisp (dired-do-load). Смотрите раздел Библиотеки Лисп-программ для Emacs.
B
Байт-компилирует указанные файлы на Emacs Lisp (dired-do-byte-compile). Смотрите раздел `Byte Compilation' в The Emacs Lisp Reference Manual.
A regexp RET
Производит поиск регулярного выражения regexp во всех указанных файлах (dired-do-search). Эта команда -- вариант команды tags-search. Поиск останавливается при первом найденном совпадении; чтобы продолжить поиск и найти следующее совпадение, нажмите M-,. Смотрите раздел Поиск и замена при помощи таблиц тегов.
Q старое RET новое RET
Производит query-replace-regexp в каждом из указанных файлов, заменяя совпадения старого (регулярного выражения) на строку новое (dired-do-query-replace). Эта команда -- вариант tags-query-replace. Если вы выйдите из цикла замены с подтверждением, вы можете использовать M-, для продолжения поиска и замены дальнейших совпадений. Смотрите раздел Поиск и замена при помощи таблиц тегов.

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

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

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

  • Если вы используете в команде оболочки `*', то эта команда запускается один раз, а `*' заменяется списком имён файлов. Имена файлов передаются в том же порядке, в каком они появляются в буфере Dired. Таким образом, ! tar cf foo.tar * RET запускает tar для всего списка имён файлов, помещая их все в один tar-файл `foo.tar'.
  • Если командная строка не содержит `*', она запускается один раз для каждого файла с добавленным в конце именем этого файла. Например, ! uudecode RET запускает для каждого файла команду uudecode.

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

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

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

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

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

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

% u
Изменяет имя каждого из выбранных файлов на имя, написанное заглавными буквами (dired-upcase). Если старыми именами файлов были `Foo' и `bar', то новыми будут `FOO' и `BAR'.
% l
Изменяет имя каждого из выбранных файлов на имя, написанное строчными буквами (dired-downcase). Если старыми именами файлов были `Foo' и `bar', то новыми будут `foo' и `bar'.
% R старое RET новое RET
% C старое RET новое RET
% H старое RET новое RET
% S старое RET новое RET
Эти четыре команды переименовывают, копируют, создают жесткие и символьные ссылки, вычисляя в каждом случае новое имя путем подстановки в регулярном выражении, задающем имя старого файла.

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

Эти команды сравнивают каждое "старое" имя файла с регулярным выражением старое и затем заменяют совпавшую часть на новое. Вы можете использовать в строке новое обозначения `\&' и `\цифра', чтобы сослаться на весь или на часть совпавшего образца в старом имени файла, как в replace-regexp (смотрите раздел Замена регулярных выражений). Если в имени файла есть более одного совпадения с регулярным выражением, заменяется только первое.

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

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

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

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

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

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

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

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

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

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

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

Применяйте команду i (dired-maybe-insert-subdir) на строке, описывающей файл, который является каталогом. Она вставляет содержимое этого каталога в этот же буфер Dired и перемещает к нему. Вставленное содержимое подкаталога следует после каталога верхнего уровня данного буфера Dired, как в выводе `ls -lR'.

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

В обоих случаях i до перемещения устанавливает метку Emacs, так что C-u C-SPC возвращает вас к предыдущей позиции в буфере (к строке, описывающей подкаталог).

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

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

Когда буфер 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-prev-dirline). Это строки, описывающие каталог как файл в его родительском каталоге.
>
Перемещает к следующей строке файла-каталога (dired-prev-dirline).

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

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

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

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

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

Обновление буфера 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 переключатели RET
Обновляет буфер Dired, используя переключатели в качестве dired-listing-switches.

Наберите 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-toggle-or-edit) переключает между этими двумя режимами сортировки. Строка режима в буфере Dired показывает, по какому признаку в данный момент отсортированы файлы: по имени или по дате.

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

Dired и find

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

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

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

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

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

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

Назад |  Вперед |  Содержание



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024