如何在 Windows 中更改 Git 终端的标题?

How to change title of Git terminal in Windows?

我在 Windows 10 工作,通常我最多打开 5 个 CMD windows。我这样工作是因为我需要 运行 具有不同数据的同一个应用程序,并在抛出任何异常时保持监控。

我设置了一个数字作为 window 的标题(使用 title 命令)而不是默认文本,以便轻松识别我正在工作的 window并能够使用 Alt+Tab (an example of how I work with my CMD windows)

识别它们并在它们之间进行更改

最近我开始使用 Git,我非常喜欢 Windows 的 Git Bash 终端。我想像使用 CMD windows 一样使用 Git Bash 终端,但我找不到任何方法来更改 window 标题。我搜索了一下,发现 these instructions 和其他一些(我无法粘贴,因为我还不允许 post 超过两个链接),但它似乎只能通过设置不同的默认标题。我想随时将 window 标题更改为我选择的任何自定义文本。

这可能吗?是否有像 title 这样的命令可用于 Git Bash?

你在 this link

的正确轨道上

如果你稍微修改一下 git-prompt.sh 脚本(对我来说,它位于 c:\Program Files (x86)\Git\etc\profile.d\git-prompt.sh),你可以随意设置标题。

注意:您需要 运行 VS Code、Notepad++ 或类似的管理员才能写回此目录。

先保存git-prompt.sh的备份(如git-prompt.backup.sh),然后修改git-prompt.sh的开头如下:

if test -z "$GITTITLEPREFIX" # if not empty
then
    GITTITLEPREFIX="Git-Bash => " # prefix that will have current pwd appended after it
fi

if test -f ~/.config/git/git-prompt.sh
then
    . ~/.config/git/git-prompt.sh
else
    if test -n "$GITTITLE"
    then   ##### Set window title directly to GITTITLE if not empty
        PS1='\[3]0;$GITTITLE[=10=]7\]' 
    else   ##### Set window title to GITTITLE PREFIX plus the PWD
        PS1='\[3]0;$GITTITLEPREFIX${PWD//]^[:ascii:]]/?}[=10=]7\]' 
    fi
fi
###### Leave the rest of the file the same
    PS1="$PS1"'\n'
    PS1="$PS1"'\[3[32m\]'
###### Etc.

这将首先检查 GITTITLEPREFIX 是否为空,如果不是,它将设置为 "Git-Bash => ",类似于链接文章中的内容。这将在其后附加当前路径,因此如果您想要“1:$PWD”,则将 GITTITLEPREFIX 设置为“1:”,如下所示:

GITTITLEPREFIX="1 : "

否则,您可以将 GITTITLE 设置为任何 non-empty 值,然后整个标题将完全设置为 GITTITLE 的内容(不附加 PWD),因此如果您只想要“1”,请使用这个:

GITTITLE="1"

然后运行脚本。在我的道路上,我是这样做的:

. "/c/Program Files (x86)/Git/etc/profile.d/git-prompt.sh"

并且标题应该更改。当然,您可以为其添加别名或在路径中的某个位置创建一个单独的脚本,这样 运行 就简单多了,标题可以只是一个参数。我将把它留作 reader...

的练习

我只对脚本做了很少的修改就解决了我的问题。 第一个,为了传递我想要的 window 名称,我添加了变量 name= 并将其设置在标题变量中:

name=
PS1='\[3]0;$name[=10=]7\]' # set window title

第二个,推荐here,我评论下几行:

#PS1="$PS1"'\[3[35m\]'       # change to purple
#PS1="$PS1"'$MSYSTEM '          # show MSYSTEM

最终代码如下:

if test -f /etc/profile.d/git-sdk.sh
then
    TITLEPREFIX=SDK-${MSYSTEM#MINGW}
else
    TITLEPREFIX=$MSYSTEM
fi
name=
PS1='\[3]0;$name[=12=]7\]' # set window title
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'\[3[32m\]'       # change to green
PS1="$PS1"'\u@\h '             # user@host<space>
#PS1="$PS1"'\[3[35m\]'       # change to purple
#PS1="$PS1"'$MSYSTEM '          # show MSYSTEM
PS1="$PS1"'\[3[33m\]'       # change to brownish yellow
PS1="$PS1"'\w'                 # current working directory
if test -z "$WINELOADERNOEXEC"
then
    GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
    COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
    COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
    COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
    if test -f "$COMPLETION_PATH/git-prompt.sh"
    then
        . "$COMPLETION_PATH/git-completion.bash"
        . "$COMPLETION_PATH/git-prompt.sh"
        PS1="$PS1"'\[3[36m\]'  # change color to cyan
        PS1="$PS1"'`__git_ps1`'   # bash function
    fi
fi
PS1="$PS1"'\[3[0m\]'        # change color
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'$ '                 # prompt: always $
MSYS2_PS1="$PS1"               # for detection by MSYS2 SDK's bash.basrc

我暂时把脚本复制了一份,贴在了C盘,方便每次需要改标题的时候执行,按照我的路径,如下: $ . /c/changename.sh

我仍在学习脚本编写,因此我可以设置别名。正如@LightCC 所说,"I'll leave that as an exercise for the reader..."

这个帖子已经有几个月了。但我认为替代方案会有所帮助

您可以将以下行添加到您的用户配置文件文件夹中的 .bashrc 文件

export TITLEPREFIX="Git Bash"

您希望 Git bash 成为标题前缀的地方。这是用户特定的更改。所以如果一台机器被多个用户使用各自的登录名,每个人都可以自定义自己的标题。

一个简单的选项是 echo -ne "\e]0;YOUR TITLE HERE\a"

在 JSON 设置中写入 Git 控制台:

"name": "Git Bash",
"tabTitle": "Git Bash",
"suppressApplicationTitle": true

你可以使用

export MYTITLE=abcd; export PS1=$(echo $PS1 | sed -r "s/(0;).*?(\\007)/$MYTITLE/")

它找到标题的正则表达式并将其替换为$MYTITLE。 我可能是错的,但我假设标题在 $PS1 中介于 0;[=14=]7 之间。它对我有用。

或者您可以将下一个函数添加到您的 .bashrc(或 .bash_profile

ttt() {
        # change title in gitbash
        export PS1=$(echo $PS1 | sed -r "s/(0;).*?(\\007)//")
}

然后随时使用 ttt "new title"