-
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 list
que 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 -aU
declara um parâmetro localSESSIONS
, que é uma matriz (a
) eU
manté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,
$SESSIONS
incluirá(dotfiles goodbye hello)
. Useprint -l $SESSIONS
para 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
space
outab
($'\t'
) - adicione esses elementos (
+=
) à matrizSESSIONS
- use apenas o segundo para o último elemento (
- finalmente, retorne a matriz
SESSIONS
classificada 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.