【zsh】global alias를 전개하는 함수를 만든다(만들었다)
친애하는
zsh의 global alias에 대해 가볍게 설명하면
일반 alias와 달리 명령 이외의 위치에서도 배포되는 alias입니다.
대체로 파이프와 함께 정의되는 경우가 많습니다.
alias 이름에는 특별히 명확하지 않지만 global alias 이름은 대문자로 정의하는 것이 일반적입니다.
예
alias -g G='| grep'
alias -g H='| head'
alias -g L='| less'
이렇게 정의하면 명령이 실행될 때 확장됩니다.
$ cat log H -n2
# => cat log | head -n2
그대로 사용해도 편리합니다만, 커멘드 라인 조작중에 자동으로 전개하면 개인적으로 스마트군요. 이력에도 전개 후의 커맨드로서 남기 때문에
alias 전개 함수는 언젠가의 기사에서 소개되고 있습니다만
같은 것이 개인적으로 원했기 때문에 공부를 하고 만든
만든
그런 함수가 여기
expand-alias-widget
#!/usr/bin/env zsh
function main() {
emulate -L zsh
setopt aliases
local -a global_aliases=(${(@f)"$(alias -g)"})
local -a characters=(${global_aliases%%\=*})
if (($characters[(I)${(q)LBUFFER##* }])); then
zle _expand_alias
zle expand-word
fi
zle self-insert
}
main
취미 기법이므로 함수로 둘러싸지 않아도 좋고, shebang도 필요하지 않을지도 모릅니다.
여기를 fpath가 통과 한 디렉토리에 두고 bindkey를 할당하면 사용할 수 있습니다.
.zshrc
autoload -Uz expand-alias-widget
zle -N expand-alias-widget
bindkey ' ' expand-alias-widget
해설
shellscript 내에서도 alias를 사용할 수 있도록
데포라면 사용할 수 없습니다. 그래서 옵션을 지정해 준다
함수 내에서 옵션을 만질 때는
local_options
또는 emulate -L zsh
합시다.
setopt aliases
미리 정의된 전역 별칭 목록 정렬
alias -g
에 정의 된 전역 별칭을 출력 할 수 있습니다.출력은 개행이므로
f
플래그로 개행 문자 단락으로 단어 전개@
플래그로 개별 요소를 별도의 요소로 확장 (필요하지 않을 수 있음)local -a global_aliases=(${(@f)"$(alias -g)"})
배열에서 alias 이름만 검색
L='| less'
에서 L
를 추출합니다. ${*name*%%*pattern*}
기법서두의 예라고 이 시점에서 characters의 내용은
(G H L)
이런 느낌이 된다local -a characters=(${global_aliases%%\=*})
커서 왼쪽 문자열이 alias 이름 배열에 포함되어 있는지 확인
if (( ${array[(I)pattern]} ))
에서 배열에 특정 요소가 포함되어 있는지 확인할 수 있습니다.if (($characters[(I)${(q)LBUFFER##* }]))
${(q)LBUFFER##* }
커서 왼쪽에 공백으로 구분 된 끝 문자를 가져옵니다.(q)
${LBUFFER##* }
에는 *
또는 ?
가 전개될 수도 있으므로패턴 매치로 조건식이 의도하지 않고 참이 되어 버립니다.
그래서 q 플래그로 메타 문자를 백 슬래시로 인용하여 방지합니다.
zle의 내장 위젯
alias를 배포하기만 하면 기존에 widget이 준비되어 있다
그것
_expand_alias
expand-word
는 셸 배포 (명령 배포 또는 글로브 배포) 요약
그래? 「변수 전개라든지 플래그가 너무 많아 모르겠어~ 」라고?
정리했다
h tps://의st.魏 튜 b. 작은 m/쇼 t/d9cdf8271b3에 7C4238739 그림 523490542
Reference
이 문제에 관하여(【zsh】global alias를 전개하는 함수를 만든다(만들었다)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sho-t/items/13f185539b3cb6c8c6ad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)