ZSH에서 물고기까지

9917 단어 terminalzshfishshell
ZSH는 수년 동안 내 기본 셸이었습니다. 다양한 Linux 배포판에서 수정하고 이동했습니다.zshrc. 최근에 저는 ZSH를 기본 셸로 사용하는 MacBook Pro 작업을 시작했습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다.
  • 새 셸을 시작할 때 사용할 수 있기 전에 약간의 지연이 있었습니다. 이러한 지연은 크지 않았지만 MacOS에서 점점 더 많이 인식하기 시작했습니다. 우리는 faster feedbacks을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다.
  • .zshrc 구성에는 Fish 셸이 대부분 기본적으로 제공하는 oh-my-zsh의 일부 플러그인과 구성이 있습니다.

  • 이를 염두에 두고 현재.zshrc를 변환하는 동안 얼마나 빨리 Fish shell로 마이그레이션할 수 있는지 알고 싶었습니다.

    생선 껍질 🐠



    준비하기



    .zshrc 구성은 다음과 같습니다.

    # ---- ZSH ---- #
    export ADOTDIR="$HOME/.antigen"
    # Source antigen zsh plugin manager
    source $HOME/.antigenrc
    antigen init
    # Autosuggestion color highlight
    export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#F2F0F6,underline"
    export ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=30
    # History settings.
    export HISTSIZE=1000000
    export HISTCONTROL='ignoreboth'
    export HISTORY_IGNORE="(clear|history)"
    SAVEHIST=$HISTSIZE
    # Add wisely, as too many plugins slow down shell startup.
    plugins=(copyfile
             extract
             git-extras 
             git-flow-avh 
             zsh-autosuggestions 
             zsh-completions
             zsh-syntax-highlighting 
             colored-man-pages
             z)
    
    # ------------- #
    
    # ---- User Configuration ---- #
    ## Nix specific
    export NIX_PATH=darwin-config=$HOME/.nixpkgs/darwin-configuration.nix:$HOME/.nix-defexpr/channels${NIX_PATH:+:}$NIX_PATH
    source $HOME/.nix-profile/etc/profile.d/hm-session-vars.sh
    source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
    
    eval "$(starship init zsh)"
    # Leave less preview on screen when quit
    export LESS="-RX"
    export EDITOR='nvim'
    export LESS_TERMCAP_md="${yellow}"
    # ---------------------------- #
    
    
    # ---- Alias ---- #
    alias vim="nvim"
    alias l="exa --long --header --all"
    alias ls="exa --long --header"
    alias tree="exa --tree --level=2"
    alias cat="bat"
    alias ping="ping -c 3"
    # Add verbose output on these commands
    alias rm="rm -v"
    alias mkdir="mkdir -v"
    alias mv="mv -v"
    alias cp="cp -v"
    # --------------- #
    
    #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
    export SDKMAN_DIR="$HOME/.sdkman"
    [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
    


    설정



    Fish 및 Fisher(Fish용 플러그인 관리자) 설치:

    brew install fish fisher
    


    물고기 구성은 ~/.config/fish에 있습니다. 이제 fish 명령을 사용하여 생선 껍질을 활성화하여 시작할 수 있습니다.

    별명



    별칭을 변환하려면 별칭을 붙여넣고 funcsave를 사용하여 ~/.config/fish/functions에 저장합니다.

    alias cp="cp -v"
    alias mv="mv -v"
    ...
    funcsave cp mv ...
    


    ENV 변수



    용도Universal Variables :

    set -Ux EDITOR "nvim"
    ...
    


    플러그인



    Fisher를 사용하여 몇 가지 유용한 플러그인을 설치합니다.:

    fisher install jethrokuan/z             # Jump around the folders
    fisher install decors/fish-colored-man
    fisher install oh-my-fish/plugin-peco    # Ctrl + R for searching history
    fisher install oh-my-fish/plugin-extract
    


    일부 Fish 플러그인은 기본적으로 활성화되어 있으며 ZSH에서와 같이 설정할 필요가 없습니다.

    또한 내.zshrc를 변환하는 동안 유용한 아래 플러그인을 찾았습니다(필요하지 않을 수도 있음).

    fisher install reitzig/sdkman-for-fish
    fisher install lilyball/nix-env.fish
    fisher install jorgebucaran/nvm.fish
    


    즉각적인



    Starship에 대한 구성이 자동으로 적용되도록 "Cross-Shell Prompt"인 Starship을 사용합니다. 활성화하려면 다음을 사용하십시오.

    echo "starship init fish | source" >> $HOME/.config/fish/config.fish
    


    결과



    벤치마크



    처음 실행 시 초미세를 사용하여 Fish가 ZSH보다 어느 정도 빠르다는 것을 알았습니다.



    두 쉘이 시작하는 데 왜 그렇게 많은 시간이 걸리는지 궁금했습니다. 두 셸을 모두 프로파일링한 결과 SDKMan 활성화(NVM과 유사한 여러 Java 배포판 관리)로 인해 둘 다 성능 저하가 있음을 알아냈습니다.

    두 셸 모두에서 SDKMan이 제거되면 벤치마크를 다시 실행했습니다.



    내 설정에서 두 셸이 거의 비슷하기 때문에 Fish 셸은 ZSH보다 3배 빠르게 실행되었습니다.

    이익



    이제 Fish를 사용하여 쉘 구성이 더 체계적으로 구성되어 있습니다. Fish 스크립트의 구문은 ZSH/Bash 스크립트에 비해 훨씬 더 읽기 쉽습니다. 유용하다고 생각되는 다른 눈에 띄는 기능:
  • 명령 완료 자동 제안( fish_update_completions )
  • CTRL + R 페코로 간편하게 히스토리 검색
  • 훌륭한 플러그인
  • 내 ZSH
  • 에 비해 빠름

    잡았다



    구성 변환이 매우 빠르긴 했지만 다음 작업에 많은 시간을 할애했습니다.
  • 몇 년 전의 ZSH 기록 백업을 보관합니다. 변환하는 도구가 있지만ZSH history to Fish 실행 타임스탬프를 유지하지 않았습니다. 또한 일부 여러 줄 명령
    (예: curl ) 파산 fish_history 파일. 이 도구는 작동하지만 수동으로 오류를 수정해야 할 수 있습니다.
  • 시 완성은 errors을 생산합니다. Fish로 인한 오류인 줄 알았는데 나중에 수정된다는 것을 알았습니다.
  • 일부 빌드 스크립트(Makefiles, builds tasks...)가 export를 사용하여 특정 ENV 변수를 내보냈기 때문에 Fish와 함께 실행하면 오류가 발생했습니다.

  • 결론



    이 상태에서 저는 ZSH에서 Fish로 정말 빠르게 마이그레이션했고 동일한 구성을 유지하면서 기본 셸로 설정했습니다. 내가 부딪힌 문제 없이 변환 시간은 10분 미만이었습니다. 새 플러그인과 Fish가 기본적으로 제공하는 다른 플러그인을 사용하여 이제 쉘이 훨씬 빨라졌습니다.

    마지막으로 해보시길 권합니다. 작동하지 않으면 언제든지 이전 구성으로 돌아갈 수 있습니다.

    좋은 웹페이지 즐겨찾기