Это может быть достигнуто путем редактирования функции завершения zsh для rm
с желаемым поведением.
Функции завершения Z-оболочки определены где-то в вашей системе. В 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]'
Я не гуру, но я Отметим, что rmdir уже настроен таким образом в zsh. :-) – mjk
@mjk: но AFIAK 'rmdir' удаляет только пустые каталоги, которые не являются теми же функциями, что и' rm -r'. – mschilli