git 分支在 VIM window 中显示我的分支名称,而不是在我当前的 iterm2 window 中
git branch displays my branch names in a VIM window, instead of in my current iterm2 window
不确定为什么会这样。
我用的是iterm2,还有.zshrc bash
当我运行git branch
它“在新 window 中显示我的分支”有没有办法解决这个问题?
我的配置:
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"
我可以得到与 LESS= git branch
非常相似的结果。说 git help config
并查看 /pager
结果,还有控制寻呼机行为的各种(git 特定和非)环境变量,环境 git 和寻呼机它调用 运行 使寻呼机即使在短结果时也能提供完整的行为。
告诉 Git 仅当您 没有 默认值时始终使用它通常提供的选项的最简单选项是
git config core.pager 'less -FRX'
如果您愿意,您可以更精细地控制它,请参阅文档。
这实际上不是 new window,也不是 vim:它是 less
,这是默认值寻呼机在很多系统上,包括你的系统。 git branch
命令现在默认使用寻呼机(从 Git 2.16 开始);具体参见 to .
这里还有一个更糟糕的交互,值得注意的是,它会影响那些使用 zsh
但不会影响那些使用 bash
的人,至少对于许多包含在这些贝壳。解释发生了什么需要一些背景知识,尽管标准修复很容易列出:
export LESS=FRX
在你的 .zshrc
中(注意:有些人更喜欢 FRSX
)。
背景
在 "glass ttys" (Wikipedia) 的旧时代,只有 屏幕 。如果您清除了 The Screen,它就很清楚了。如果你给它写了文字,它就有那个文字。这些东西只是模拟打印机,不使用纸张。但他们获得了新功能,例如突出显示或加粗或加下划线的文本、奇特的光标寻址系统等。
一些终端需要特殊的“启用光标移动”设置操作才能进行精美的屏幕绘制。 (还不是很清楚为什么:他们认为有人会错误地启动光标寻址模式吗?但他们确实这样做了。)因此 使用 这个东西的早期软件有一个特点:它会发送一个“初始化”序列。
一小部分终端增加了备用屏幕。 VT100 和后续使用转义序列,ESC [ ? 4 7 h,进入Alternate Screen模式,同理但以小写L结尾(l
) 而不是 h
,以退出它。备用屏幕的字面意思是:切换到它会给你一个不同的屏幕,然后切换回来让你的旧屏幕内容恢复原状。
随着 windowing 系统变得司空见惯,terminal emulators running on pseudo-terminals 取代了旧的“玻璃 ttys”。您可以打开很多新的 windows 并拥有很多单独的迷你屏幕。每一个都可以模拟一些最喜欢的现有物理终端,例如 VT100 或 VT220。这些特殊的转义序列甚至被标准化(ANSI X3.64,ISO/IEC 6429),具有各种扩展。
这些变成了 xterm
,用圣经的术语来说,它们产生了(至少间接地)了 iTerm 和 iTerm2 等。唉,有人 认为这是在 xterm 的 初始化 中进入光标定位屏幕编辑器模式的好主意,这应该包括“切换到备用屏幕”序列。退出此模式会切换回来。结果是您的编辑器会话不会打扰任何正在进行的命令会话——我猜有些人觉得这很好——但是这个决定的 附加结果 是当 less
发送同样的初始化序列,这个 也 翻转到备用屏幕。现在转义序列有时略有不同,1 但这是相同的潜在问题。
就我而言,这整个事情首先是一个可怕的想法(另见 this superuser.com question and this web site)。如果您可以像在 xterm 中那样完全关闭备用屏幕,那就是最终的解决方法。唉,现在你经常做不到。我使用的另一种方法是修改 termcap 或 terminfo 以删除 alt-screen 转义序列。这在许多系统上有点棘手。
1我不知道为什么。如果有人知道,那可能会成为有趣的传说。
这将我们带到 less
和 Git
less
程序有自己的治疗交替屏幕蓝调的方法:-X
命令行选项告诉less
不发出初始化序列。这是一把相当大的锤子,但效果很好。
Git 有一个内置的默认寻呼机,由构建您的 Git 发行版的人设置。通常的默认值是 less
.
为了less
本身方便使用,less
在启动时读取environment variableLESS
。默认情况下应用此处设置的任何选项,除非您在命令行上覆盖它们。因此,您可以设置 F
、R
、S
、and/or X
——所有这些都是通常需要的选项——在 $LESS
和 less
将使用这些设置。
Git会,如果LESS
在环境中没有设置,自动设置为FRX
。同样,this is actually a compiled-in default, but the "default default" is LESS=FRX LV=-c
. (LV
is for the lv
command。)
奇怪的是,一些标准的 zshrc,分发 with zsh,显然做了一个 export LESS=R
。这意味着 LESS
现在 是 在环境中设置的,并且 Git 小心地 不 打扰它: Git 假定您 的意思是 以这种方式设置它。当您切换到 bash 并且您的 bashrc 会 而不是 设置 LESS
,Git 会为您设置它;当你切换到 zsh 并且你的 zshrc does set LESS
, Git 不会覆盖它。
然后,解决方法是设置(并导出)您想要的 LESS
设置,假设您将继续使用 less
。请注意,您可以使用 GIT_PAGER
或 core.pager
在 Git 中配置寻呼机;参见 the top level git
command documentation。您也可以在那里设置选项;这些将覆盖 LESS
设置。例如,您可以将 core.pager
设置为 less -FRSX
以仅在 Git 中获得这四个选项,同时将 $LESS
设置为 R
,以便当您 运行 less
自己时,只有一个选项。
这里是四个选项的意思:
F
:--quit-if-one-screen
的缩写,这使得less
立即退出,而不显示(END)
或类似的。这对于短 git branch
输出非常有用。
R
:--RAW_CONTROL_CHARS
的缩写,这使得 less
识别 ANSI 颜色转义序列,以便 git branch
可以显示 current 例如,绿色分支,或显示彩色 git diff
输出。
S
:--chop-long-lines
的缩写,这使得less
t运行cate 长行,需要“横向滚动”。 S
确实代表 Side Scroll,至少在我自己看来是这样。默认情况下,没有 -S
是换行长行,因此不需要横向滚动。1
X
:--no-init
的缩写,这会抑制初始化(和最终的取消初始化)序列,这在 iTerm2 中是使您的 git branch
退出寻呼机时输出消失。
请注意,如果您愿意,您可以完全禁用 Git 的寻呼机,并使用终端的回滚功能。
1我几乎喜欢我自己的S
设置,除了一个缺陷:没有迹象表明排长队得到 t运行cated 并且需要滚动。所以有人可以,例如,通过将秘密消息放在每行的右侧来隐藏它。在实践中,这意味着某些 git diff
输出有时会被切断,无论这种情况多么罕见,它 只是 烦人到足以阻止我设置 -S
大多数时候。
这里有一个秘密:您可以在 内部 less
本身 中打开和关闭这些选项!如果你有很长的行,现在打开横向滚动会很好,只需打开它。键入 - S 并按 RETURN 或 ENTER 在冒号提示符下关闭和打开设置。
不确定为什么会这样。
我用的是iterm2,还有.zshrc bash
当我运行git branch
它“在新 window 中显示我的分支”有没有办法解决这个问题?
我的配置:
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"
我可以得到与 LESS= git branch
非常相似的结果。说 git help config
并查看 /pager
结果,还有控制寻呼机行为的各种(git 特定和非)环境变量,环境 git 和寻呼机它调用 运行 使寻呼机即使在短结果时也能提供完整的行为。
告诉 Git 仅当您 没有 默认值时始终使用它通常提供的选项的最简单选项是
git config core.pager 'less -FRX'
如果您愿意,您可以更精细地控制它,请参阅文档。
这实际上不是 new window,也不是 vim:它是 less
,这是默认值寻呼机在很多系统上,包括你的系统。 git branch
命令现在默认使用寻呼机(从 Git 2.16 开始);具体参见
这里还有一个更糟糕的交互,值得注意的是,它会影响那些使用 zsh
但不会影响那些使用 bash
的人,至少对于许多包含在这些贝壳。解释发生了什么需要一些背景知识,尽管标准修复很容易列出:
export LESS=FRX
在你的 .zshrc
中(注意:有些人更喜欢 FRSX
)。
背景
在 "glass ttys" (Wikipedia) 的旧时代,只有 屏幕 。如果您清除了 The Screen,它就很清楚了。如果你给它写了文字,它就有那个文字。这些东西只是模拟打印机,不使用纸张。但他们获得了新功能,例如突出显示或加粗或加下划线的文本、奇特的光标寻址系统等。
一些终端需要特殊的“启用光标移动”设置操作才能进行精美的屏幕绘制。 (还不是很清楚为什么:他们认为有人会错误地启动光标寻址模式吗?但他们确实这样做了。)因此 使用 这个东西的早期软件有一个特点:它会发送一个“初始化”序列。
一小部分终端增加了备用屏幕。 VT100 和后续使用转义序列,ESC [ ? 4 7 h,进入Alternate Screen模式,同理但以小写L结尾(l
) 而不是 h
,以退出它。备用屏幕的字面意思是:切换到它会给你一个不同的屏幕,然后切换回来让你的旧屏幕内容恢复原状。
随着 windowing 系统变得司空见惯,terminal emulators running on pseudo-terminals 取代了旧的“玻璃 ttys”。您可以打开很多新的 windows 并拥有很多单独的迷你屏幕。每一个都可以模拟一些最喜欢的现有物理终端,例如 VT100 或 VT220。这些特殊的转义序列甚至被标准化(ANSI X3.64,ISO/IEC 6429),具有各种扩展。
这些变成了 xterm
,用圣经的术语来说,它们产生了(至少间接地)了 iTerm 和 iTerm2 等。唉,有人 认为这是在 xterm 的 初始化 中进入光标定位屏幕编辑器模式的好主意,这应该包括“切换到备用屏幕”序列。退出此模式会切换回来。结果是您的编辑器会话不会打扰任何正在进行的命令会话——我猜有些人觉得这很好——但是这个决定的 附加结果 是当 less
发送同样的初始化序列,这个 也 翻转到备用屏幕。现在转义序列有时略有不同,1 但这是相同的潜在问题。
就我而言,这整个事情首先是一个可怕的想法(另见 this superuser.com question and this web site)。如果您可以像在 xterm 中那样完全关闭备用屏幕,那就是最终的解决方法。唉,现在你经常做不到。我使用的另一种方法是修改 termcap 或 terminfo 以删除 alt-screen 转义序列。这在许多系统上有点棘手。
1我不知道为什么。如果有人知道,那可能会成为有趣的传说。
这将我们带到 less
和 Git
less
程序有自己的治疗交替屏幕蓝调的方法:-X
命令行选项告诉less
不发出初始化序列。这是一把相当大的锤子,但效果很好。
Git 有一个内置的默认寻呼机,由构建您的 Git 发行版的人设置。通常的默认值是 less
.
为了less
本身方便使用,less
在启动时读取environment variableLESS
。默认情况下应用此处设置的任何选项,除非您在命令行上覆盖它们。因此,您可以设置 F
、R
、S
、and/or X
——所有这些都是通常需要的选项——在 $LESS
和 less
将使用这些设置。
Git会,如果LESS
在环境中没有设置,自动设置为FRX
。同样,this is actually a compiled-in default, but the "default default" is LESS=FRX LV=-c
. (LV
is for the lv
command。)
奇怪的是,一些标准的 zshrc,分发 with zsh,显然做了一个 export LESS=R
。这意味着 LESS
现在 是 在环境中设置的,并且 Git 小心地 不 打扰它: Git 假定您 的意思是 以这种方式设置它。当您切换到 bash 并且您的 bashrc 会 而不是 设置 LESS
,Git 会为您设置它;当你切换到 zsh 并且你的 zshrc does set LESS
, Git 不会覆盖它。
然后,解决方法是设置(并导出)您想要的 LESS
设置,假设您将继续使用 less
。请注意,您可以使用 GIT_PAGER
或 core.pager
在 Git 中配置寻呼机;参见 the top level git
command documentation。您也可以在那里设置选项;这些将覆盖 LESS
设置。例如,您可以将 core.pager
设置为 less -FRSX
以仅在 Git 中获得这四个选项,同时将 $LESS
设置为 R
,以便当您 运行 less
自己时,只有一个选项。
这里是四个选项的意思:
F
:--quit-if-one-screen
的缩写,这使得less
立即退出,而不显示(END)
或类似的。这对于短git branch
输出非常有用。R
:--RAW_CONTROL_CHARS
的缩写,这使得less
识别 ANSI 颜色转义序列,以便git branch
可以显示 current 例如,绿色分支,或显示彩色git diff
输出。S
:--chop-long-lines
的缩写,这使得less
t运行cate 长行,需要“横向滚动”。S
确实代表 Side Scroll,至少在我自己看来是这样。默认情况下,没有-S
是换行长行,因此不需要横向滚动。1X
:--no-init
的缩写,这会抑制初始化(和最终的取消初始化)序列,这在 iTerm2 中是使您的git branch
退出寻呼机时输出消失。
请注意,如果您愿意,您可以完全禁用 Git 的寻呼机,并使用终端的回滚功能。
1我几乎喜欢我自己的S
设置,除了一个缺陷:没有迹象表明排长队得到 t运行cated 并且需要滚动。所以有人可以,例如,通过将秘密消息放在每行的右侧来隐藏它。在实践中,这意味着某些 git diff
输出有时会被切断,无论这种情况多么罕见,它 只是 烦人到足以阻止我设置 -S
大多数时候。
这里有一个秘密:您可以在 内部 less
本身 中打开和关闭这些选项!如果你有很长的行,现在打开横向滚动会很好,只需打开它。键入 - S 并按 RETURN 或 ENTER 在冒号提示符下关闭和打开设置。