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'. Если ваши распечатки повреждены, вам может понадобиться изменить значение этой переменной.