-
Para rastrear o atraso, você pode usar o comando incorporado
time, que pode listar as contribuições de todos os comandos em um canal:zsh% time sleep 2 | date | sleep 1 sleep 2 0.00s user 0.00s system 0% cpu 2.003 total date 0.00s user 0.00s system 0% cpu 0.004 total sleep 1 0.00s user 0.00s system 0% cpu 1.004 total -
Enquanto (de acordo com o seu comentário) é o comando externo
tmuxinator listque causa o atraso perceptível, você pode, no entanto, otimizar sua função de conclusão. Você usou muitos comandos externos (sed,cut, ...) para analisar a saída. Aqui mostrarei uma abordagem que usa apenas os recursos internos do zsh.tmux-list-sessions-autofill() { local -aU SESSIONS SESSIONS=("${(@)${(f)$(tmux list-sessions)}/:*/}") SESSIONS+=("${(@)${(f)$(tmuxinator list-sessions)}[2,-1]/[ $'\t']*/}") reply=(${(i)SESSIONS}) }Isso pode parecer complicado à primeira vista, mas uma vez que você se acostumar com isso, a expansão de parâmetros do zsh é muito poderosa. De cima para baixo:
-
local -aUdeclara um parâmetro localSESSIONS, que é uma matriz (a) eUmantém valores de matriz exclusivos . + - primeiro, obtenha as sessões de
tmux list-sessions, explicadas de dentro para fora:-
$(tmux list-sessions)obtém a saída do comando externo -
${(f)$(tmux list-sessions)}divide o resultado em\n -
${(@)${(f)$(tmux list-sessions)}/:*/}opera em todos os elementos da matriz ((@)) e faz uma pesquisa & substitua/from/to, ou seja, remover everthing depois de incluir os primeiros dois pontos. - Agora,
$SESSIONSincluirá(dotfiles goodbye hello). Useprint -l $SESSIONSpara imprimir todos os elementos da matriz em uma única linha.
-
- em seguida, quase o mesmo procedimento para
tmuxinator list, com estas adições:- use apenas o segundo para o último elemento (
[2,-1]) - apaga tudo depois (e incluindo) um caractere
spaceoutab($'\t') - adicione esses elementos (
+=) à matrizSESSIONS
- use apenas o segundo para o último elemento (
- finalmente, retorne a matriz
SESSIONSclassificada sem distinção entre maiúsculas e minúsculas(i)
-
Todas essas expansões usam a forma geral mais longa de ${parameter} em vez da notação abreviada $parameter . Veja man zshexpn para uma explicação muito melhor da sintaxe e dos chamados Flags de Expansão de Parâmetros (como (f) ).
+ De acordo com Bart Schaefer , o U sinalizador não é necessário, porque o código de conclusão torna sua lista interna de conclusões exclusiva,
por isso não ajuda realmente a remover as entradas redundantes de matrizes
com antecedência, quando usá-los apenas para conclusão.