OK, um pouco de experiência: uso um Mac e faço o máximo possível na CLI.
Em particular, eu freqüentemente coloco um pendrive cp
ou mv
um arquivo e, em seguida, desejo imediatamente ejetar (desmontar e desconectar). Isso geralmente pode ser realizado com algumas teclas, exceto para desmontá-lo, o que requer (na versão 10.7) ir para um espaço vazio na área de trabalho (geralmente a pelo menos dois espaços), selecionar o disco e pressionar "command-e". Francamente, esse procedimento de desmontagem é, por várias ordens de magnitude, a parte mais demorada e tediosa do processo.
Seria muito mais natural e eficiente simplesmente digitar, digamos:
ej<tab> J<tab>
Digamos que meu pendrive seja montado em / Volumes / Jefferson. O que eu esperaria obter das minhas 6 teclas é o seguinte:
eject /Volumes/Jefferson
Isso deve executar o comando:
diskutil unmount /Volumes/Jefferson
Então, eu escrevi uma pequena função agradável:
eject() {
diskutil unmount /Volumes/$1
}
E uma função de conclusão para acompanhar:
compdef '_files -g "/Volumes/*"' eject
Há um problema com isso, no entanto. A _files
função gera caminhos completos. Agora, eu poderia alterar a linha na minha função "ejetar" para diskutil unmount $1
e as coisas funcionariam, mas não tenho a capacidade de digitar a primeira letra do nome do ponto de montagem, pois o caminho começa com / Volumes /. Por exemplo, se eu digitar J<tab
, receberei o preenchimento automático dos arquivos no PWD. Eu teria que digitar /Volumes/J<tab>
para obter a conclusão desejada.
Então, existe uma função de conclusão que captura nomes de arquivos de um local específico predefinido, em vez de gerar caminhos completos?
Eu realmente gostaria de reduzir isso para 6 teclas.
fonte
compdef
linha no arquivo_eject
localizado no meu fpath. Eu tentei com e sem uma linha de carregamento automático. Eu olhei para vários guias sobre funções de conclusão e ninguém abordou como fazer um exemplo realmente simples como esse, e nada que eu tentei com base em nenhum dos exemplos funcionou.#compdef eject
como primeira linha do arquivo e depois o código real. Veja em arquivos carregados automaticamente no manual. Se você não adicionou a linha primeiro, pode ser necessário excluir o cache~/.zcompdump
e reiniciar o zsh.~/.zcompdump
fez o truque. Obrigado novamente!