Этого можно добиться, отредактировав функцию завершения zsh для rm
в соответствии с желаемым поведением.
Все функции завершения Z-shell определены где-то в вашей системе. В OSX он находится под /usr/local/zsh/5.0.2/share/zsh/functions
. В Linux, вероятно, есть что-то подобное.
Функция завершения для rm
определена в файле с именем _rm
. Он довольно маленький. (Если вам интересно, завершение для rmdir
определено в _directories
).
Чтобы установить завершение для rm -r
, нам нужно изменить строку, которая выглядит примерно так:
'(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]'
Добавляем в конец этой строки, внутри цитаты:
:*:file:_directories
Я почти уверен, что это информирует zsh
о том, что завершение при задании аргумента -r
должно состоять из files
, и мы получаем эти files
с помощью функции _directories
(которая возвращает только каталоги).
(Я не уверен на 100%, потому что zsh
— зверь, над которым я все еще думаю).
Вот пример использования:
Вот разница изменений, чтобы было понятнее :)
< '(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]:*:file:_directories'
---
> '(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]'
person
simont
schedule
21.09.2013
rmdir
удаляет только пустые каталоги, а это не та функциональность, которую предоставляетrm -r
. - person mschilli   schedule 22.09.2013