2016-12-01 20 views
3

Много раз я в конечном итоге сочинительство функции обертки вокруг существующих, например:Zsh функция: вперед завершение к подфункции

function gl { 
    some_computed_stuff=... 
    git --no-pager log --reverse $some_computed_stuff "[email protected]" 
} 
function m { 
    make "[email protected]" && notify-send success || notify-send failed 
} 

Я знаю, что псевдонимы держать автодополнение, но иногда функции необходимы, и в этом случае автодополнении теряются , Например, здесь я хотел бы сохранить git log завершение для моей функции gl или make завершение для m.

Я попытался добавить compctl -K _git gl, но никаких предложений не сделано. Это не будет работать в любом случае, так как я должен как-то найти, как обеспечить log аргумент для _git автозавершения скрипт, так что мой вопрос:

Есть ли способ сделать ЗШ (но и Баш) понять, что набрав gl является точный эквивалент git log? Нечто подобное (только для ZSH):

compctl 'git log' gl 
compctl 'make' m 

ответ

5

Для Zsh, вы можете создать новое завершение с compdef функции.

В базовой форме он связывает функцию завершения со словом. При условии, что zsh поставляется с большим количеством уже завершенных дополнений, можно просто повторно использовать их. Например, для m функции от вопроса:

$ compdef _make m 

В соответствии с документацией, вы можете также определить завершение для конкретной услуги, если она определена в функции завершения. Опять же, как ЗШ приходит с _git завершения, и это уже определяет git-log обслуживания, gl функции от вопроса может быть автоматически появившейся с:

$ compdef _git gl=git-log 

На Linux, вы можете увидеть существующие реализации завершающих в /usr/share/zsh/functions/Completion/Unix/. Вы можете прочитать реализации завершения, чтобы узнать, какие службы они определяют.