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

7259 단어 ShellScript

동기 부여



ghq 을 fzf (또는 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


좋은 웹페이지 즐겨찾기