zsh
fornece uma grande quantidade de cabos, uma parte da qual é a característica _user_expand
para fornecer as chamadas "expansões de usuários" de entradas aleatórias para saídas aleatórias. Por exemplo.
# turn on completion system
autoload -U compinit
compinit
# how to mangle inputs; this is a hash or "associative array" of terms
declare -A manglements
manglements=( fn function )
# register mangler and enable _user_expand
zstyle ':completion:*:user-expand:*' user-expand '$manglements'
zstyle ':completion:*' completer _user_expand _complete _ignored
Com isto configurado em .zshrc
ou algo assim, digitar fn
guia espaço deve substituir esse texto por function
(ou pelo menos por mim introduzindo as linhas acima no zsh 5.3.1, execute como zsh -f
para evitar conflitos com qualquer configuração existente. Para reduzir a entrada para apenas fn
guia , defina a configuração add-space
zstyle ':completion:*:user-expand:*' add-space 1
mas se você realmente quer um espaço mágico de espaço ao invés de tab , isto requer que a barra de espaço tenha um widget ligado a ele, o que é um pouco mais significativo ( e perigosa) mudança.
declare -A manglements
manglements=( fn function )
function magic-space-bar {
local -a le_vlapoi
# split on words, see zshexpn(1)
le_vlapoi=(${(z)BUFFER})
# only mangle the first word, not surprisingly in middle of some
# "echo blah fn ..." sequence (this is the same as the 'alias -g'
# rake problem waiting to whap you in the face)
if [[ $#le_vlapoi -eq 1 ]]; then
local romoi
romoi=$manglements[$le_vlapoi[-1]]
if [[ -n $romoi ]]; then
le_vlapoi[-1]=$romoi
BUFFER="$le_vlapoi"
fi
fi
# ensure the typed space happens regardless
BUFFER="$BUFFER ";
CURSOR=$#BUFFER
}
zle -N magic-space-bar
autoload -U compinit
compinit
bindkey ' ' magic-space-bar
bindkey -M isearch ' ' self-insert