ghq 관리 외부에서도 fzf로 편안하게 CD하고 싶습니다.
7259 단어 ShellScript
동기 부여
ghq 을 fzf (또는 peco 등)과 조합하는 궁리를 하고 있는 분은 많은 것이 아닐까요.
나도 아래와 같은 설정으로 ghq 관리하의 리포지토리에의 쾌적한 이동을 실현하고 있었습니다.
.zshrcfunction 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-1
child-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
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
간단한 쉘 스크립트를 준비했습니다.
그런 다음 조금 멋지게 "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-1
child-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
Reference
이 문제에 관하여(ghq 관리 외부에서도 fzf로 편안하게 CD하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jiroshin/items/b7be60334191ac36b814텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)