Dired создает буфер Emacs, содержащий распечатку каталога и, возможно, некоторых его подкаталогов. Вы можете использовать обычные команды Emacs, чтобы передвигаться по этому буферу, и специальные команды 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 помечен как "предназначенный только для чтения", и вставлять в него текст бесполезно, так что обычные печатные знаки, такие как d и x, используются для команд Dired. Одни команды Dired устанавливают флаг на текущем файле (это файл на текущей строке) или помечают его; другие команды выполняют действия над помеченными файлами или файлами с установленным флагом.
Все обычные команды движения курсора в Emacs доступны и в буферах Dired. Также предусмотрены некоторые специальные команды. Ключи C-n и С-p переопределены так, что они устанавливают курсор в начало имени файла на строке, а не в начало самой строки.
Для большего удобства, SPC и n в Dired эквивалентны C-n. p эквивалентен C-p. (Движение по строкам делается в Dired настолько часто, что оно заслуживает того, чтобы набор его был облегчен.) DEL (передвинуться вверх и убрать флаг) часто бывает полезным просто для движения вверх.
Прежде всего Dired используется, чтобы установить флаг для удаления на некоторых файлах, а потом удалить файлы, ранее помеченные флагом.
Вы можете установить на файле флаг, переместившись на строку,
описывающую файл, и набрав на ней 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; все флаги удаления останутся в буфере, и файлы не будут удалены.
Команды #, ~, & и . устанавливают флаг для нескольких файлов, основываясь на их именах. Эти команды полезны именно потому, что сами по себе они не удаляют файлы; вы можете убрать флаги удаления с любых помеченных файлов, которые вы в действительности хотите сохранить.
& (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-find-file
).
Смотрите раздел Обращение к файлам.
dired-find-file-other-window
). Буфер Dired остается
видимым в первом окне. Это подобно использованию C-x 4 C-f для
обращения к этому файлу. Смотрите раздел Множество окон.
dired-display-file
).
dired-mouse-find-file-other-window
). Эта команда использует для
показа файла другое окно, как команда o.
dired-view-file
).
Просмотр файла похож на обращение к нему, но этот режим делает акцент на
предоставление большего удобства для перемещения по файлу и не позволяет
изменять его. Смотрите раздел Разнообразные действия над файлами.
Вместо установки для файла флага с помощью `D' вы можете установить на этом файле метку с помощью какого-либо другого знака (обычно `*'). Большинство команд Dired для работы с файлами, кроме "вычеркивания" (x), действуют на файлы, помеченные звездочкой `*'.
Вот некоторые команды для пометки с помощью `*', для снятия метки или для произведения каких-либо действий над метками. (Смотрите раздел Удаление файлов с помощью Dired, для получения информации о командах для установки и снятия флагов на файлах.)
dired-mark
). С
числовым аргументом n, помечает следующие n файлов начиная
от текущего. (Если n отрицателен, помечает -n
предыдущих файлов.)
dired-mark-executables
). С числовым аргументом, убирает метки
со всех таких файлов.
dired-mark-symlinks
).
С числовым аргументом, убирает метки со всех таких файлов.
dired-mark-directories
). С числовым аргументом, убирает метки
со всех этих файлов.
dired-mark-subdir-files
).
dired-unmark
).
dired-unmark-backward
).
dired-unmark-all-files-no-query
).
dired-unmark-all-files
). Аргументом должен быть один знак ---
не используете для его завершения RET.
С числовым аргументом, эта команда запрашивает подтверждение на снятие
метки для каждого помеченного файла. Вы можете ответить y для
подтверждения, n для отказа или ! для снятия меток со всех
остальных файлов без запроса о них.
dired-next-marked-file
). Файл считается "помеченным", если на
нем есть метки любого вида.
dired-prev-marked-file
)
dired-do-toggle
): файлы, помеченные
`*' становятся непомеченными, а непомеченные файлы метятся знаком
`*'. Файлы, помеченные другим способом, не затрагиваются.
dired-change-marks
). Эта команда дает основной
метод создания или использования меток, отличных от `*' или
`D'. Аргументами должны быть одиночные знаки -- не используйте
RET для их завершения.
С помощью этой команды вы можете использовать почти любой знак в
качестве знака метки для разделения различных классов файлов. Если
старый знак -- это пробел (` '), то эта команда действует на
все непомеченные файлы; если новый знак является пробелом, эта
команда убирает метку с файлов, на которые она действует.
Чтобы продемонстрировать мощь этой команды, мы покажем способ установить
метку `D' на все файлы, которые не были помечены, в то же время
снимая метку со всех файлов, имевших метку `D':
* c D t * c SPC D * c t SPCЗдесь предполагается, что ни один из файлов не помечен флагом `t'.
dired-mark-files-regexp
).
Эта команда похожа на % d, но она помечает файлы звездочкой
`*', а не устанавливает флаг `D'. Смотрите раздел Установка флага на несколько файлов одновременно.
Для поиска совпадений используется только та часть имени файла, которая
не задает каталог. Для привязки регулярного выражения к началу или
концу имени вы можете использовать `^' и `$'. Подкаталоги вы
можете исключить, скрыв их (смотрите раздел Скрывание подкаталогов).
dired-mark-files-containing-regexp
). Эта команда похожа на
% m, но она просматривает содержимое файлов, а не их имена.
dired-undo
).
Этот раздел описывает основные команды Dired для произведения различных действий над несколькими файлами. Все эти команды являются заглавными буквами; все они используют минибуфер, либо для считывания аргументов, либо для запрашивания подтверждения перед совершением действий. Все они дают вам некоторые способы указания, какие файлы должны быть обработаны:
Вот команды для манипуляций над файлами, действующие таким способом. (Некоторые другие команды Dired, такие как ! и `%', также придерживаются этих соглашений для принятия решения о выборе файлов для работы.)
dired-do-copy
). Аргумент новый
--- это каталог, в который нужно копировать, или (при копировании
единственного файла) новое имя.
Если dired-copy-preserve-time
не равна nil
, то при
копировании с помощью этой команды время изменения нового файла
устанавливается таким же, как у старого файла.
dired-do-delete
). Подобно остальным
командам в этом разделе, эта команда действует на помеченные
файлы или на n следующих файлов. Напротив, x
(dired-expunge
) удаляет все файлы с установленным флагом.
dired-do-rename
). Аргумент
новый -- это каталог, в который нужно переименовывать, или (при
переименовании единственного файла) новое имя.
Dired автоматически изменяет имена файлов, к которым вы обращаетесь, для
связанных с этими переименованным файлами буферов так, чтобы они
отражали новые имена.
dired-do-hardlink
).
Аргумент новый -- это каталог, в котором нужно создавать ссылки,
или (при создании ссылки на единственный файл) имя этой ссылки.
dired-do-symlink
).
Аргумент новый -- это каталог, в котором нужно создавать ссылки,
или (при создании ссылки на единственный файл) имя этой ссылки.
dired-do-chmod
). Эта команда использует программу
chmod
, потому режим может быть любым аргументом, который
chmod
способен обработать.
dired-do-chgrp
).
dired-do-chown
). (На большинстве систем это может делать только
привилегированный пользователь.)
Переменная dired-chown-program
задает имя программы, используемой
для этих задач (различные системы помещают chown
в разные
места).
dired-do-print
). Вы должны указать
команду печати, но в минибуфере сразу появляется подходящая
предполагаемая строка, полученная с помощью переменных
lpr-command
и lpr-switches
(эти же переменные использует
lpr-buffer
; смотрите раздел Вывод твердой копии).
dired-do-compress
). Если оказывается,
что какой-то файл уже сжат, эта команда наоборот раскрывает его.
dired-do-load
).
Смотрите раздел Библиотеки Лисп-программ для Emacs.
dired-do-byte-compile
). Смотрите раздел `Byte Compilation' в The Emacs Lisp Reference Manual.
dired-do-search
).
Эта команда -- вариант команды tags-search
. Поиск
останавливается при первом найденном совпадении; чтобы продолжить поиск
и найти следующее совпадение, нажмите M-,. Смотрите раздел Поиск и замена при помощи таблиц тегов.
query-replace-regexp
в каждом из указанных файлов,
заменяя совпадения старого (регулярного выражения) на строку
новое (dired-do-query-replace
).
Эта команда -- вариант tags-query-replace
. Если вы выйдите из
цикла замены с подтверждением, вы можете использовать M-, для
продолжения поиска и замены дальнейших совпадений. Смотрите раздел Поиск и замена при помощи таблиц тегов.
Одна особая команда для работы с файлами -- это +
(dired-create-directory
). Она считывает имя каталога и создает
его, если каталог с таким именем еще не существует.
Команда Dired ! (dired-do-shell-command
) считывает в
минибуфере командную строку оболочки и запускает эту команду оболочки
для всех указанных файлов. Вы можете задать обрабатываемые файлы
обычными методами, как для команд Dired (смотрите раздел Действия над файлами).
Есть два способа применить команду оболочки к нескольким файлам:
tar
для всего списка имен файлов, помещая их все в один
tar-файл `foo.tar'.
uudecode
.
Что если вы хотите выполнить команду оболочки один раз для каждого
файла, но с именем файла, вставленным в середине? Или если вы хотите
использовать имена файлов более сложным образом? Используйте циклы
оболочки. Например, такая команда оболочки запустила бы
uuencode
для каждого заданного файла, записывая вывод в
соответствующий `.uu'-файл:
for file in *; do uuencode $file $file >$file.uu; done
Рабочим каталогом команды оболочки служит каталог верхнего уровня буфера Dired.
Команда ! не пытается обновить буфер Dired, чтобы показать новые или измененные файлы, потому что на самом деле она не понимает команд оболочки и не знает, какие имена изменились. Для обновления буфера Dired используйте команду g (смотрите раздел Обновление буфера Dired).
Вот команды, которые изменяют имена файлов систематическим образом:
dired-upcase
). Если старыми именами файлов были
`Foo' и `bar', то новыми будут `FOO' и `BAR'.
dired-downcase
). Если старыми именами файлов были
`Foo' и `bar', то новыми будут `foo' и `bar'.
Эти четыре команды подстановки в регулярном выражении в действительности производят поиск и замену в именах выбранных файлов в буфере Dired. Они принимают два аргумента: регулярное выражение старое и образец подстановки новое.
Эти команды сравнивают каждое "старое" имя файла с регулярным
выражением старое и затем заменяют совпавшую часть на новое.
Вы можете использовать в строке новое обозначения `\&' и
`\цифра', чтобы сослаться на весь или на часть совпавшего
образца в старом имени файла, как в replace-regexp
(смотрите раздел Замена регулярных выражений). Если в имени файла есть более одного
совпадения с регулярным выражением, заменяется только первое.
Например, % R ^.*$ RET x-\& RET переименовывает каждый выбранный файл, добавляя `x-' в начало имени. Обратная процедура, удаление `x-' из начала каждого имени файла, также возможна: один способ -- набрать % R ^x-\(.*\)$ RET \1 RET; другой -- это % R ^x- RET RET. (Используйте `^' и `$' для привязки регулярных выражений к началу или концу имени.)
Обычно при замене не затрагиваются имена каталогов, которым принадлежат файлы; обрабатываются только файлы в этом каталоге. Если вы зададите числовой аргумент, равный нулю, при замене будут обрабатываться полные абсолютные имена файлов, включая имена каталогов.
Часто вы можете захотеть выбрать набор обрабатываемых файлов с помощью того же регулярного выражения regexp, что будет использоваться для их обработки. Чтобы сделать так, пометьте эти файлы командой % m regexp RET, а затем примените это же регулярное выражение в команде обработки. Для облегчения этого, команды обработки файлов, начинающиеся на %, используют по умолчанию последнее регулярное выражение, заданное любой команде %.
В Dired есть две команды, которые сравнивают заданные файлы с помощью
программы diff
.
diff
(dired-diff
).
Файл в позиции метки -- это первый аргумент diff
, а файл в
позиции точки -- второй.
dired-backup-diff
). Если текущий файл сам является резервной
копией, сравнивает его с оригиналом; таким образом вы можете сравнить
файл с любой его резервной версией по вашему выбору.
Первым аргументом diff
передается резервная копия.
В обычном случае буфер Dired показывает только один каталог; но вы также можете включить в список и его подкаталоги.
Простейший способ включить несколько подкаталогов в один буфер Dired
--- задать для запуска ls
ключи `-lR'. (Если при вызове
Dired вы зададите числовой аргумент, вы сможете написать эти ключи в
минибуфере.) Это произведет рекурсивный список каталога, показывающий
все подкаталоги всех уровней.
Но обычно всех подкаталогов бывает слишком много; чаще вы предпочли бы включить только конкретные подкаталоги. Вы можете сделать это с помощью команды 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. Они перемещают к строкам заголовков каталогов; это строки, сообщающие имя каталога, они выводятся перед его содержимым.
dired-next-subdir
).
dired-prev-subdir
).
dired-tree-up
).
dired-tree-down
).
dired-prev-dirline
). Это строки, описывающие каталог как файл в
его родительском каталоге.
dired-prev-dirline
).
Скрыть подкаталог -- значит сделать невидимым его содержимое, за исключением строки заголовка, средствами выборочного показа (смотрите раздел Выборочный показ).
dired-hide-subdir
).
Числовой аргумент служит в качестве счетчика повторов.
dired-hide-all
). Или, если какой-нибудь подкаталог
уже скрыт, делает все подкаталоги снова видимыми. Вы можете
использовать эту команду, чтобы получить обзор очень глубоких деревьев
каталогов или чтобы быстро переместиться к далеким подкаталогам.
Обычные команды Dired никогда не затрагивают файлы в скрытых подкаталогах. Например, команды, работающие с помеченными файлами, игнорируют файлы в скрытых каталогах, даже если они помечены. Следовательно, вы можете использовать скрывание, чтобы временно исключить подкаталоги из области действия различных операций, не убирая при этом метки.
Команды скрывания подкаталогов переключают; это значит, что они скрывают то, что было видимо, и показывают то, что было скрыто.
Этот раздел описывает команды для обновления буфера Dired, чтобы он отражал внешние (сделанные не в Dired) изменения в буферах и файлах, и для удаления части буфера Dired.
revert-buffer
).
dired-do-redisplay
).
dired-do-kill-lines
).
dired-sort-toggle-or-edit
).
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
.
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'. Если ваши распечатки
повреждены, вам может понадобиться изменить значение этой переменной.