ghq 관리 외부에서도 fzf로 편안하게 CD하고 싶습니다.

7259 단어 ShellScript

동기 부여



ghqfzf (또는 peco 등)과 조합하는 궁리를 하고 있는 분은 많은 것이 아닐까요.

나도 아래와 같은 설정으로 ghq 관리하의 리포지토리에의 쾌적한 이동을 실현하고 있었습니다.

.zshrc
function cd_ghq_list() {
  local destination_dir="$(ghq list | fzf)"
  if [ -n "$destination_dir" ]; then
    BUFFER="cd $destination_dir"
    zle accept-line
  fi
  zle clear-screen
}
zle -N cd_ghq_list
bindkey '^]' cd_ghq_list

여기서는 구체적으로 shift+]에서 "ghq list 명령의 출력 결과를 fzf로 필터링하여 cd 명령에 전달"하는 것을하고 있습니다.

이 편리한 설정에 빠져버린 나는 😌 『이젠 이 방법으로 밖에 cd하고 싶지 않다』라고 생각하게 되었습니다.

평소에 나는 ~/memo/ 에 적당한 메모를 써 놓고 있습니다.
또한 docker-compose.yml 등 가끔 사용하는 설정 파일을 ~/Dev/ 에 두고 있습니다.
이동은 매번 cd ~/memo cd ~/Dev 하고 있습니다. 이것은 귀찮습니다.
해결책으로서 「특정 디크레토리에의 cd 커멘드를 앨리어스(alias)로 해 둔다」 「모두. 는 원격 저장소와 일치시키고 싶습니다.

그렇다면 쉘 스크립트를 작성하기로 결정했습니다.

Starting-Directory-List



간단한 쉘 스크립트를 준비했습니다.

그런 다음 조금 멋지게 "Starting-Directory-List"라는 이름을 붙여 ghq/라는 명령으로했습니다.

개념



하고 있는 것은 관리하고 싶은 디렉토리군에의 패스 일람을 출력하는 것입니다.

관리 대상의 디렉토리 군은 환경 변수 sdl 로 지정한 디렉토리 부하에 두는 것을 상정하고 있습니다.

예를 들어 다음과 같은 디렉토리 구조가 있다고 가정합니다. 여기에서는 SDL_ROOT 로 설정하고 있습니다.
$ tree ~/sdl-root/
~/sdl-root/
├── category1
│   ├── child-category1-1
│   │   ├── child-category-1-1-1
│   │   │   └── avocado.text
│   │   ├── mango.text
│   │   └── melon.text
│   ├── child-category1-2
│   │   └── cherry.text
│   └── orange.text
└── category2
    ├── apple.text
    └── child-category2-1
        └── peach.text

여기서 명령을 실행하면 다음과 같이 디렉토리군에의 경로 일람이 출력됩니다.
$ sdl
~/sdl-root/category1/
~/sdl-root/category2/
~/sdl-root/category1/child-category1-1/
~/sdl-root/category1/child-category1-2/
~/sdl-root/category2/child-category2-1/

출력 대상은 $SDL_ROOT="~/sdl-root/ 바로 아래의 SDL_ROOT category1 , 게다가 그 아래의 category2 child-category1-1child-category1-2 바로 아래의 2계층은 네임스페이스로서 이용하면 편리합니다.

fzf와 함께 편안하게 CD



ghq list와 같은 방식으로 fzf와 결합합니다.
가장 간단한 예는 다음과 같은 별칭을 설정하는 것입니다.

.zshrc(패턴①)
 export SDL_ROOT=$HOME/Dev
 alias dev='cd $(sdl | fzf)'

ghq와 함께 사용하고 싶은 경우에는 다음과 같은 설정이 편리합니다.

.zshrc(패턴②)
function cd_ghq_and_sdl() {
  local destination_dir=$(echo "$(ghq list --full-path) $(sdl)" | fzf)
  if [ -n "$destination_dir" ]; then
    BUFFER="cd $destination_dir"
    zle accept-line
  fi
  zle clear-screen
}
zle -N cd_ghq_and_sdl
bindkey '^]' cd_ghq_and_sdl

😔 "매번 명령을 실행하고 싶지 않아"라고 하는 경우는 아래와 같이 sdl의 실행을 쉘 로그인시에만 해도 좋을지도 모릅니다.

.zprofile(패턴③)
export ENV_CACHE_SDL=$(sdl)

.zshrc(패턴③)

function cd_ghq_and_sdl() {
  local destination_dir=$(echo "$(ghq list --full-path) $ENV_CACHE_SDL" | fzf)
  if [ -n "$destination_dir" ]; then
    BUFFER="cd $destination_dir"
    zle accept-line
  fi
  zle clear-screen
}
zle -N cd_ghq_and_sdl
bindkey '^]' cd_ghq_and_sdl

요약



쉘 스크립트를 작성함으로써 ghq 관리 외부 디렉토리에도 쾌적하게 cd 할 수 있게 되었습니다.

우선 child-category2-1 해 두면 대략의 목적지에 도착할 수 있게 되어 나는 만족합니다 😌

공지



이 기사를 읽고 「재미있었다」 「배우고 있었다」라고 생각해 주신 분, 좋으면 Twitter나 facebook, 하테나 북마크에서 코멘트를 부탁합니다!
DeNA 공식 Twitter 계정 @DeNAxTech 에서는, Blog 기사 뿐만이 아니라 다양한 공부회에서의 등단 자료도 발신하고 있습니다. 꼭 팔로우하세요!
Follow @DeNAxTech


좋은 웹페이지 즐겨찾기