Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
28
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@mollifier

zsh で Git リポジトリのトップレベル ディレクトリに cd するプラグイン

Git リポジトリの中にいるときに、トップレベルのディレクトリに移動したくなることがある。それを1回のコマンドで簡単にできるようなプラグインを作ったので紹介する。

このプラグインでできること

cd-gitroot というプラグインを作った。これをインストールすれば cd-gitroot というコマンドが使えるようになる。

使っている様子はこんな感じ。

# こんな感じで Git リポジトリの中にディレクトリがあったとする
# doc/
# src/
#   |-scripts/
#   `-web/

% cd /home/mollifier/git_repo
% cd src/web
% pwd
/home/mollifier/git_repo/src/web
# リポジトリの奥の方にいる時でも、すぐにトップに移動できる
% cd-gitroot
% pwd
/home/mollifier/git_repo

# 引数を指定するとリポジトリトップからの相対的なパスに移動できる
% cd-gitroot src/scripts
% pwd
/home/mollifier/git_repo/src/scripts

# タブで相対的なパスが補完できる
% cd-gitroot [TAB]
doc/  src/
% cd-gitroot src/[TAB]
scripts/  web/

インストール

まず https://github.com/mollifier/cd-gitroot から cd-gitroot, _cd-gitroot と2つファイルを取ってきて $fpath の通ったところに配置する。その後に .zshrcautoload すれば OK。

例えば $HOME/zsh/functions/cd-gitroot の下に配置したい場合はこんな感じ。

% cd $HOME/zsh/functions
% git clone https://github.com/mollifier/cd-gitroot.git cd-gitroot

# または $HOME/zsh/functions/cd-gitroot ディレクトリを作成して、
# その下に cd-gitroot, _cd-gitroot を置く

~/.zshrc にこんな感じで書く。

.zshrc
fpath=($HOME/zsh/functions/cd-gitroot(N-/) $fpath)

autoload -Uz cd-gitroot
alias cdu='cd-gitroot'

最後の alias は必須じゃないけど設定しておくと便利(元の名前が長いので)。好きな名前で alias を貼っておこう。

注意としては、fpath を設定するところは autoload -Uz compinit とやってるとこより前に書くこと。そうじゃないとこのプラグインの補完がうまく動かなくなる。

使い方

Git リポジトリの中に入って cd-gitroot と打てばリポジトリのトップに移動できる。
引数を指定したらリポジトリトップからの相対的なパスに移動する。
引数のディレクトリはタブで補完できるので、リポジトリの奥の方にいる時でも簡単に他の場所に移動できる。

謝辞

このプラグインの元ネタは id:hitode909 さんのブログ記事です。

Gitのリポジトリのトップレベルにcdするコマンド

タブで補完できたらもっと便利になると思ったので改めてプラグインとして書きました。hitode909 さん、ありがとうございました!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
28
Help us understand the problem. What are the problem?