Zsh의 물고기 스타일 약어

2700 단어 zshfishabbreviations
몇 년 전에 Friendly Interactive SHell을 기본 쉘로 사용해 보았습니다.

명령줄에서 구문 강조 표시, 위쪽/아래쪽 화살표를 눌러 역 이력 검색 및 몇 가지 더 많은 것과 같은 좋은 것들이 많이 있지만 POSIX와 호환되지 않는다는 잘못된 방식으로 계속 문지르고 있습니다( bash 또는 zsh ), 그래서 결국 zsh로 돌아갔습니다.

그러나 나는 몇 가지 기능이 훌륭하기 때문에 몇 가지 기능을 가져 왔으며 약어가 그 기능 중 하나입니다. 그것들은 일종의 별칭과 비슷하지만 적어도 제 생각에는 더 좋습니다.

약어와 별칭



모든 쉘에는 별명이라는 것이 있습니다.
별칭은 다음과 같이 작동하며 alias gst="git status" 와 같은 별칭을 정의합니다. 그런 다음 터미널에 gst를 입력하고 Enter 키를 누르면 터미널이 git status 명령을 실행하고 예상대로 출력을 표시합니다.

물고기에서는 다음과 같이 약어를 정의할 수도 있습니다.

abbr -a -g gst git status


별칭과 거의 동일한 방식으로 작동하지만 한 가지 매우 중요한 예외가 있습니다. 터미널에 gst를 입력하고 공백을 누르면 터미널이 약어를 확장합니다. 공백 대신 Enter 키를 누르면 약어가 확장되고 명령이 실행됩니다.

즉, git status 대신 gst 로 기록을 보고 여러 줄을 보면 실행된 명령을 더 쉽게 볼 수 있으며 터미널에서 직접 실행한 명령을 복사할 수도 있습니다. , 동료에게 보내고 원하는 경우 직접 붙여넣고 실행할 수 있습니다. 그들은 내 셸 구성에 어떤 별칭이 있는지 알 필요가 없습니다.

Zsh에서 이것을 얻는 방법?



~/.zshrc에 이러한 기능을 추가하기만 하면 약어 나열을 시작할 수 있습니다.

# declare a list of expandable aliases to fill up later
typeset -a ealiases
ealiases=()

# write a function for adding an alias to the list mentioned above
function abbrev-alias() {
    alias $1
    ealiases+=(${1%%\=*})
}

# expand any aliases in the current line buffer
function expand-ealias() {
    if [[ $LBUFFER =~ "\<(${(j:|:)ealiases})\$" ]]; then
        zle _expand_alias
        zle expand-word
    fi
    zle magic-space
}
zle -N expand-ealias

# Bind the space key to the expand-alias function above, so that space will expand any expandable aliases
bindkey ' '        expand-ealias
bindkey '^ '       magic-space     # control-space to bypass completion
bindkey -M isearch " "      magic-space     # normal space during searches

# A function for expanding any aliases before accepting the line as is and executing the entered command
expand-alias-and-accept-line() {
    expand-ealias
    zle .backward-delete-char
    zle .accept-line
}
zle -N accept-line expand-alias-and-accept-line


그런 다음 다음과 같이 약어를 추가할 수 있습니다.

abbrev-alias g="git"
abbrev-alias gst="git status"
abbrev-alias gcb="git checkout --branch"
abbrev-alias ll="ls -l"

좋은 웹페이지 즐겨찾기