Como posso expandir todas as variáveis na linha de comando do Zsh?

1

Em uma pergunta anterior, específica do bash, eu perguntei Como posso expandir um caminho relativo na linha de comando, com a conclusão da tabulação?

Eu gostei da resposta do @ Mikel que mencionou usando Ctrl + Alt + e para expandir todas as variáveis e eu usei muito isso.

Desde então eu mudei para zsh e enquanto eu posso digitar $PWD e pressione Tab para expandir o caminho do diretório atual, se eu digitar algo como $PWD/.profile e pressione Tab não é expandido.

Eu li sobre questões similares e vi respostas sobre aliases de expansão, bem como expandir variáveis digitando-as e pressionando Tab , mas nada que fosse o mesmo que pressionar Ctrl + Alt + e em bash .

Existe alguma maneira de permitir uma sequência de escape como Ctrl + Alt + e para expandir todas as variáveis na linha de comando que é sendo digitado em zsh ?

    
por cwd 04.12.2014 / 02:17

2 respostas

1

Você pode configurar o compinit para expandir os parâmetros no seu ~/.zshrc :

zstyle ':completion:*' completer _expand _complete
autoload -Uz compinit
compinit

Esta é uma configuração mínima, se você tiver compinit já habilitado, deve ser suficiente adicionar _expand às configurações de completer

Existe também o item expand-word que está por padrão ligado a ^X* ( Ctrl + x * ) que essencialmente faz o mesmo que a mesma ligação no bash.

Nota: Ambos os métodos funcionam apenas na palavra atual.

Como alternativa, em zsh você pode realmente fazer o que pediu em sua pergunta original: transformar um caminho relativo em um caminho absoluto. Este é um exemplo ligeiramente modificado da% man_de% manpage:

# load necessary utility function
autoload -Uz modify-current-argument

# define helper function for actual work
expand-and-abspath () {
    # expand the path (for example '~' -> '/home/youruser')
    REPLY=${~1}
    # transform into absolute path (use ':A' if you want to resolve symlinks)
    REPLY=${REPLY:a}
}

# actual widget function
abspath-word() {
    # use helper function on current word
    modify-current-argument expand-and-abspath
}

# create zle widget 'abspath-word' (with function of the same name)
zle -N abspath-word

# bind widget to "Ctrl+x p"
bindkey '^Xp' abspath-word

Isso define o widget zshcontrib(1) , que substitui a palavra atual por uma representação de caminho absoluto e a vincula a Ctrl + x p .

    
por 04.12.2014 / 13:04
2

Para expandir as substituições de parâmetro, aritmética e comando (e não aliases e outras formas de expansão), você poderia fazer:

my-expand() BUFFER=${(e)BUFFER} CURSOR=$#BUFFER
zle -N my-expand
bindkey '\e^E' my-expand

(teria limitações semelhantes e poderia ser quase tão perigoso quanto o bash ).

    
por 04.12.2014 / 13:47