cd 기록을 저장하고 peco 또는 fzf를 사용하여 디렉토리 이동

4691 단어 ShellScriptfzfZshPeco
이런 느낌



무엇을 하고 있는가


  • auto_cd 또는 일반 cd에서도 디렉토리 이동 중에 해당 디렉토리의 로그를 수집합니다
  • .
  • 인수없이 Enter를 누르면 로그를 기반으로 선택적 인터페이스를 사용하여 대상을 제출
  • 일반 CD처럼 사용할 수 있습니다

  • 위의 gif에서는 fzf를 사용합니다. 또한 powered_cdc로 별칭합니다.
    로그에 대해서는, 같은 디렉토리는 2개 이상 모이지 않게 되어 있어, 새로운 순서로부터 서제스트 되기 때문에 별로 낭비는 없다고 생각합니다.

    코드



    다음을 .zshrc 라든지에 복사해 주면 움직인다고 생각합니다.

    .zshrc
    function chpwd() {
      powered_cd_add_log
    }
    
    function powered_cd_add_log() {
      local i=0
      cat ~/.powered_cd.log | while read line; do
        (( i++ ))
        if [ i = 30 ]; then
          sed -i -e "30,30d" ~/.powered_cd.log
        elif [ "$line" = "$PWD" ]; then
          sed -i -e "${i},${i}d" ~/.powered_cd.log 
        fi
      done
      echo "$PWD" >> ~/.powered_cd.log
    }
    
    function powered_cd() {
      if [ $# = 0 ]; then
        cd $(gtac ~/.powered_cd.log | fzf)
      elif [ $# = 1 ]; then
        cd $1
      else
        echo "powered_cd: too many arguments"
      fi
    }
    
    _powered_cd() {
      _files -/
    }
    
    compdef _powered_cd powered_cd
    
    [ -e ~/.powered_cd.log ] || touch ~/.powered_cd.log
    
    
    fzf 곳은 사용하고 있는 것(peco라든지 percol라든지)로 바꾸어 주세요.
    그리고 gtactac의 GNU 버전으로, OS X에는 기본적으로 gtac가 들어 있기 때문에 gtac로하고 있습니다. 다른 OS의 경우 tac로 설정하십시오.

    나중에 c 라든지 짧은 명령에 별칭하면 편리합니다 (또는 필수)

    .zshrc
    alias c="powered_cd"
    

    또한 원래
  • 터미널 디렉터리 이동을 가속화

  • 이 기사에 피쳐된 것입니다. 링크 대상enhancd이 이 기사의 것보다 고기능입니다. 하지만, zsh 유저라면 누구나 사용하고 있을 것이다 auto_cd 에 로그 추가가 반응하지 않거나, cd - 를 치는 것은 조금 번거로운 (물론 powered_cd 쪽이 치는 것은 귀찮습니다만 별칭 에서 어떻게든 할 수 있다) 1 이 명령을 만들었습니다.



    enhancd도 `alias c="__enhancd::cd -"로 명령 타입 수를 줄일 수 있습니다

    좋은 웹페이지 즐겨찾기