gitbranch 在 VIM 窗口中显示我的分支名称,而不是在当前的 iterm2 窗口中

Leo*_*ban 7 git git-branch

不知道为什么会发生这种情况。

我使用 iterm2,并且有 .zshrc bash

当我跑步时git branch

它“在新窗口中”显示我的分支有没有办法解决这个问题?

在此输入图像描述

我的配置:

alias projects="cd ~/Projects"


# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH
export PATH=~/.node/bin:$PATH

# Path to your oh-my-zsh installation.
export ZSH="/Users/lgaban/.oh-my-zsh"

# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="robbyrussell"

# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME=random will cause zsh to load
# a theme from this variable instead of looking in $ZSH/themes/
# If set to an empty array, this variable will have no effect.
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )

# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"

# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"

# Uncomment the following line to disable bi-weekly auto-update checks.
# DISABLE_AUTO_UPDATE="true"

# Uncomment the following line to automatically update without prompting.
# DISABLE_UPDATE_PROMPT="true"

# Uncomment the following line to change how often to auto-update (in days).
# export UPDATE_ZSH_DAYS=13

# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS="true"

# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"

# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"

# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"

# Uncomment the following line to display red dots whilst waiting for completion.
# Caution: this setting can cause issues with multiline prompts (zsh 5.7.1 and newer seem to work)
# See https://github.com/ohmyzsh/ohmyzsh/issues/5765
# COMPLETION_WAITING_DOTS="true"

# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"

# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
# HIST_STAMPS="mm/dd/yyyy"

# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder

# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git)

source $ZSH/oh-my-zsh.sh

# User configuration

# export MANPATH="/usr/local/man:$MANPATH"

# You may need to manually set your language environment
# export LANG=en_US.UTF-8

# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
#   export EDITOR='vim'
# else
#   export EDITOR='mvim'
# fi

# Compilation flags
# export ARCHFLAGS="-arch x86_64"

# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
Run Code Online (Sandbox Code Playgroud)

tor*_*rek 14

这实际上不是一个窗口,也不是 vim:它是less,它是许多系统(包括您的系统)上的默认分页器。该git branch命令现在默认使用分页器(从 Git 2.16 开始);特别是看到这个Git分支命令的答案表现得像 'less'

\n

值得注意的是,这里还有一个更糟糕的交互,它会影响那些使用的人,zsh但不会影响那些使用 的人bash,至少对于这些 shell 中包含的许多不同的默认值来说是这样。解释正在发生的事情需要一些背景知识,尽管标准修复很容易列出:

\n
 export LESS=FRX\n
Run Code Online (Sandbox Code Playgroud)\n

在你的.zshrc(注意:有些人更喜欢FRSX)。

\n

背景

\n

在“玻璃蒂斯”维基百科)的旧时代,只有屏幕。如果你清除了屏幕,那就很清楚了。如果你向它写了文字,它就会有该文字。这些东西只是模拟打印机,不使用纸张。但他们获得了新的功能,例如突出显示、粗体或下划线的文本、奇特的光标寻址系统等等。

\n

某些终端需要特殊的“启用光标移动”设置操作才能进行精美的屏幕绘制。(不太清楚为什么:他们认为有人会错误地启动光标寻址模式吗?但他们确实这样做了。)所以使用这些东西的早期软件有一个功能:它会发送一个“初始化”序列。

\n

一小部分终端增加了备用屏幕。VT100及后续产品使用转义序列 ,进入备用屏幕模式,并使用ESC [ ? 4 7 h相同但以小写 L ( l) 结尾而不是h, 退出该模式。备用屏幕的字面意思是:切换到它会给你一个不同的屏幕,切换回来会让你的旧屏幕内容恢复原样。

\n

随着窗口系统变得普遍,在伪终端上运行的终端仿真器取代了旧的“玻璃终端”。您可以打开许多新窗口并拥有许多单独的迷你屏幕。每一个都可以模拟一些最喜欢的现有物理终端,例如 VT100 或 VT220。这些特定的转义序列甚至已经标准化(ANSI X3.64、ISO/IEC 6429),并具有各种扩展。

\n

这些变成了xterm,用圣经术语来说,产生了(至少间接地)iTerm 和 iTerm2 等。唉,有人认为这是初始化xterm时的一个好主意,进入光标定位屏幕编辑器模式,这应该包括“切换到备用屏幕”序列。退出此模式会切换回来。结果是您的编辑器会话不会干扰任何正在进行的命令会话\xe2\x80\x94,有些人觉得不错,我猜\xe2\x80\x94,但这个决定的额外后果是,当less发送相同的初始化序列时,这个也会翻转到备用屏幕。现在转义序列有时略有不同,1但其根本问题是相同的。

\n

就我而言,这整个事情首先就是一个可怕的想法(另请参阅这个 superuser.com 问题这个网站)。如果您可以像在 xterm\xe2\x80\x94 中那样完全关闭备用屏幕\xe2\x80\x94,那就是最终的解决办法。唉,现在你常常做不到。我使用的另一种方法是修改 termcap 或 terminfo 以删除替代屏幕转义序列。这在许多系统上有点棘手。

\n
\n

1我不知道为什么。如果有人知道,这可能会成为有趣的传说。

\n
\n

这让我们看到lessGit

\n

less 程序有自己的解决交替屏幕忧郁症的方法:-X命令行选项告诉less 不要发出初始化序列。这是一把相当大的锤子,但效果很好。

\n

Git 有一个编译好的默认分页器,由构建 Git 发行版的人设置。通常的默认值为less.

\n

为了less方便使用,在启动时less读取环境变量 LESS。默认情况下,将应用此处设置的任何选项,除非您在命令行上覆盖它们。因此,您可以设置FRS和/或X\xe2\x80\x94,所有这些都是常用选项 \xe2\x80\x94 $LESS,并将less使用这些设置。

\n

如果环境中没有设置,LESSGit自动将其设置为FRX. 再说一次,这实际上是一个编译的 default,但“默认的 default”是LESS=FRX LV=-c。(LV用于lv命令。)

\n

奇怪的是,一些与zsh 一起分发的标准 zshrc显然做了一个export LESS=R. 这意味着LESSnow在环境中设置,Git 小心地不会打扰它:Git 假定您打算以这种方式设置它。当你切换到 bash 并且你的 bashrc 没有设置LESS,Git 会为你设置;当您切换到 zsh 并且您的 zshrc设置时LESS,Git 不会覆盖它。

\n

那么,解决方法是设置(并导出)LESS您想要的设置,假设您将继续使用less. GIT_PAGER请注意,您可以使用或在 Git 本身中配置分页器core.pager;请参阅顶级git命令文档。您也可以在那里设置选项;这些将覆盖LESS设置。例如,您可以设置core.pagerless -FRSX仅在 Git 中获取这四个选项,同时保留$LESS设置为 just R,以便在您自己运行时仅获取该选项less

\n

这四个选项的含义如下

\n
    \n
  • F: 的缩写--quit-if-one-screen,这会less立即退出,而不显示(END)或类似。这对于短git branch输出非常有用。

    \n
  • \n
  • R: 的缩写--RAW_CONTROL_CHARS,这使得less识别 ANSI 颜色转义序列,以便git branch可以以绿色显示当前分支,或者显示彩色git diff输出。

    \n
  • \n
  • S: 的缩写--chop-long-lines,这会less截断长行,需要“横向滚动”。 S确实代表了横向卷轴,至少在我自己的脑海中是这样。默认情况下,不带-S,是换行长行,这样就不需要横向滚动。1

    \n
  • \n
  • X: 的缩写--no-init,这会抑制初始化(和最终取消初始化)序列,这在 iTerm2 中是导致git branch退出寻呼机时输出消失的原因。

    \n
  • \n
\n

请注意,如果您愿意,您可以完全禁用 Git 的分页器,并使用终端的向后滚动功能。

\n
\n

1我自己几乎喜欢这个S设置,除了一个缺陷:没有迹象表明长行被截断并且需要滚动。因此,某人可以通过将秘密消息放在每行右侧的远处来隐藏秘密消息。在实践中,这意味着某些git diff输出有时会被切断,无论这种情况多么罕见,它都足以让我-S在大多数时间无法进行设置,这很烦人。

\n

不过这里有一个秘密:您可以在内部less打开和关闭这些选项!如果您有长行换行,并且现在最好启用侧向滚动,只需将其打开即可。在冒号提示符处键入并按- SRETURNENTER关闭和打开设置。

\n


jth*_*ill 6

我可以得到非常相似的结果LESS= git branch。说git help config并查看结果/pager,还有控制分页器行为的各种(特定于 git 的和非)环境变量、环境 git 和它调用的分页器正在运行,使分页器即使在简短的结果上也能给出完整的行为。

告诉 Git 始终使用它通常仅在没有默认选项时提供的选项的最简单选项是

git config core.pager 'less -FRX'
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您可以更精细地控制它,请参阅文档。