zsh
내 컴퓨터에서 실행 중 입니다 . 쉘에서 텍스트 교체가 가능한지 궁금합니다. 예를 들어 fn[SPACE/TAB]
는 function
키보드 OSX
단축키에 대한 옵션이 있지만 chrome
또는 에서는 작동 하지 않습니다 shell
. 운영 체제를 fn
그렇게 해석하도록 조정하는 방법이 있습니까 function
?
이것이 달성될 수 있다면 정말 놀랍습니다.
답변1
zsh
많은 로프가 제공되며, 그 중 일부는 _user_expand
임의의 출력에 임의의 입력을 제공하는 소위 "사용자 확장" 기능입니다. 예를 들어.
# 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
이 설정 .zshrc
또는 이와 유사한 설정을 사용하면 fn
tabspace해당 텍스트를 입력해야 합니다 function
(또는 적어도 저에게는 zsh -f
기존 구성과의 충돌을 피하기 위해 위의 줄을 zsh 5.3.1 실행에 입력해야 합니다). 입력을 줄이고 설정만 하면 됩니다 fn
tab.add-space
zstyle ':completion:*:user-expand:*' add-space 1
그러나 스페이스바를 눌러 위젯을 바인딩해야 하는 완료 space보다 마법을 정말로 원한다면 이는 약간 더 중요하고 위험한 변경입니다.tab
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