输入【Git】命令行中敲入git checkout 很麻烦

如果经常使用Git命令,不能使用分支名称或命令的Tab补完可能会让人感到有些不方便。

特别是每次切换到一个新的分支时,要完整地输入它的名称真的很麻烦。

在这篇文章中,我们将具体介绍解决这种不便的方法。

目录

    1. 下载所需文件

 

    1. 在.zshrc文件中添加设置项

 

    1. 创建原始的提示符设计

 

    1. 遇到的问题

 

    参考资料

下载所需文件。

首先,需要下载必要的文件群。

mkdir ~/.zsh
cd ~/.zsh
curl -o git-prompt.sh https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
curl -o git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
curl -o _git https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh

在.zshrc文件中添加配置项

接下来,我们要在.zshrc文件中添加配置。

# ~/.zsh/git-prompt.sh をソースファイルとして読み込む
source ~/.zsh/git-prompt.sh

# fpathに~/.zshディレクトリを追加
fpath=(~/.zsh $fpath)

# Gitのコマンド補完スクリプトの場所を指定
zstyle ':completion:*:*:git:*' script ~/.zsh/git-completion.bash

# zshのコマンド補完を初期化
autoload -Uz compinit && compinit -u

# Gitのプロンプトに変更がある場合に表示する設定
GIT_PS1_SHOWDIRTYSTATE=true

# プロンプトの文字列が実行時に評価されるように設定
setopt PROMPT_SUBST

创建原始的提示设计

接下来,我们要设计自己喜欢的提示符。下面是一个示例,显示当前目录和Git分支名称。

# git_prompt関数を定義。現在のGitブランチ名を取得して、それをプロンプトに表示するための文字列を返す。
git_prompt() {
    # __git_ps1はGitのプロンプトスクリプトによって提供される関数。"%s"を渡すと現在のブランチ名のみを返す。
    local branch_name="$(__git_ps1 "%s")"

    # ブランチ名が空でない場合(Gitリポジトリ内である場合)、" on [ブランチ名]"という形式の文字列をechoする。
    if [[ -n $branch_name ]]; then
        echo " on $branch_name"
    else
        # Gitリポジトリ外である場合は、空の文字列をechoする。
        echo " "
    fi
}

# プロンプトの見た目を設定。カレントディレクトリをシアン色で、git_prompt関数の結果(ブランチ名)を赤色で表示する。
PS1='%F{cyan}%~%f%F{red}$(git_prompt)%f\$ '

结果就是这样的感觉。

スクリーンショット 2023-10-26 7.16.18.png

很方便使用,能够有效地补充分支。

スクリーンショット 2023-10-26 7.16.30.png

迷上了追溯

在定制提示时,遇到了一个问题。

在使用__git_ps1函数(定义在git-prompt.sh中)时,它与我先前创建的别名发生了冲突。具体原因是以下的别名:

alias test="some process sample_test.out"

通过这个别名,显示了以下类似的错误信息。

dyld[58984]: Symbol not found: __ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13get_allocatorEv                                                                                                 
  Referenced from: <EE118444-4D57-3565-AE96-6323D4C54F0A> /usr/local/bin/sample_test.out
  Expected in:     <3F5CB4D5-26D1-3E43-B241-2688FF0A67BD> /usr/lib/libstdc++.6.dylib
dyld[58985

文献引用

    • 【zsh】絶対やるべき!ターミナルでgitのブランチ名を表示&補完【git-prompt / git-completion】

 

    【2ステップ】Gitコマンドでtab補完を有効にする
广告
将在 10 秒后关闭
bannerAds