我单独运行以下代码,因为我的提示在.zshrc中失败.这表明我显然没有一个名为__git_ps1的程序.它不在MacPorts中.
PROMPT="$(__git_ps1 " \[\033[1;32m\] (%s)\[\033[0m\]")\$"$
Run Code Online (Sandbox Code Playgroud)
PROMPT="$(__git_ps1 " (%s)")\$"$
Run Code Online (Sandbox Code Playgroud)
# Get the name of the branch we are on
git_prompt_info() {
branch_prompt=$(__git_ps1)
if [ -n "$branch_prompt" ]; then
status_icon=$(git_status)
echo $branch_prompt $status_icon
fi
}
# Show character if changes are pending
git_status() {
if current_git_status=$(git status | grep 'added to commit' 2> /dev/null); then
echo "?"
fi
}
autoload -U colors
colors
setopt prompt_subst
PROMPT='
%~%{$fg_bold[black]%}$(git_prompt_info)
? %{$reset_color%}'
Run Code Online (Sandbox Code Playgroud)
你怎么能得到一个显示Git分支名称的提示?
我正在构建一个程序,通过定义每个项目的别名和函数,根据他正在处理的项目添加到当前用户的shell.这些别名和函数可能并且肯定会具有相同的名称,例如cdproj
,cd
项目的根目录.
我想在更改项目时删除先前定义的别名和函数(在(重新)定义另一个项目的别名和函数之前.我知道我可以unalias
在bash和zsh中删除别名,但是我如何为a做同样的事情功能?
这很奇怪.我在下面定义了以下提示zsh
:
local user_host='%{$terminfo[bold]$fg[green]%}%n @ %m%{$reset_color%}'
local current_dir='%{$terminfo[bold]$fg[blue]%} %~%{$reset_color%}'
local git_branch='$(git_prompt_info)%{$reset_color%}'
local return_code="%(?..%{$fg[red]%}%? ?%{$reset_color%})"
PROMPT="??${user_host} %D{[%a, %b %d %I:%M:%S]} ${current_dir} ${git_branch}
??%B$%b "
RPS1="${return_code}"
Run Code Online (Sandbox Code Playgroud)
它在Emacs()gnome-terminal
中的ansi-term
终端以及终端中运行良好M-x ansi-term
- 请参阅下面的示例:
但是,它multi-term
在Emacs 下运行不正常,如下所示:
我认为multi-term
能够解释终端喜欢gnome-terminal
或ansi-term
做的同一组转义字符 .为什么不git-prompt_info
正确解释由其他人返回的转义字符?
我也尝试过:
set-terminal-coding-system
并将其设置为 utf-8-unix
TERM=eterm-color
在多学期终端内,或在致电Emacs之前,等等.TERM=
在多学期终端内,或在致电Emacs之前,等等.export TERM
我的.zshrc
到目前为止,最好的解决方案似乎是执行以下操作:
TERM=xterm-256color
但是导致我在这里报告的另一个问题:在Emacs中将转义序列传递给ansi-term中的shell.
标题应该说明一切.我正在寻找与${BASH_SOURCE[0]}
zsh 相当的东西.
注意:我一直在互联网上找到" $0
等同于${BASH_SOURCE[0]}
",但这似乎是错误的:$0
似乎是执行命令的名称.(这是argv[0]
,这是有道理的.)在我的剧本呼应$ 0( .zshrc
)给出zsh
的$0
,这是不一样的东西${BASH_SOURCE[0]}
是.事实上,除了内部文件之外,${BASH_SOURCE[0]}
似乎可以工作.zsh
.zshrc
我真正在做什么.zshrc
(那是行不通的):
echo ${BASH_SOURCE[0]}
source `dirname $0`/common-shell-rc.sh
Run Code Online (Sandbox Code Playgroud)
源失败($0
是zsh
),echo
输出为空行.
编辑: 显然,为了除非你设置$0
工作,我需要选项FUNCTION_ARGZERO
选项集.有没有办法测试是否在脚本中设置了这个?(所以我可以暂时设置它)nofunction_argzero
,它显然是打开的,它在我的shell中.仍然无济于事$0
.(我想b/c我不是一个功能.)
我已经安装了Miniconda,并已将环境变量添加export PATH="/home/username/miniconda3/bin:$PATH"
到我的.bachrc
,.bash_profile
但仍然无法在我的终端中运行任何conda命令.
我错过了另一个设置吗?我顺便使用zsh.
我有多个.zcompdump*
.
.rw-r--r-- 47k myuser 13 Jul 10:02 .zcompdump
.rw-r--r-- 47k myuser 14 Jul 16:52 .zcompdump-MacBook Pro (2)-5.7.1
.rw-r--r-- 47k myuser 4 Jun 9:32 .zcompdump-MacBook Pro-5.7.1
.rw-r--r-- 36k myuser 3 Jul 11:07 .zcompdump.macbook-pro-2.lan.54221
Run Code Online (Sandbox Code Playgroud)
其中哪一个zsh
实际使用?我可以清除其中一些吗?
我有一个函数输出许多行,我想在列中格式化.问题是任何特定的"单元格"(如果我可能使用该术语)的数据的宽度是可变的,所以将它管道化为像awk这样的东西并没有给我我想要的东西.
功能是"键"(不重要),我正在尝试这样的事情:
$ keys | awk '{ print $1"\t\t" $2 }'
Run Code Online (Sandbox Code Playgroud)
但是输出(它的一个片段,就是这样)看起来像这样:
"option-y" yank-pop
"option-z" execute-last-named-cmd
"option-|" vi-goto-column
"option-~" _bash_complete-word
"option-control-?" backward-kill-word
"control-_" undo
"control-?" backward-delete-char
Run Code Online (Sandbox Code Playgroud)
我怎么能强迫东西留在整洁的柱子里呢?这是可能的awk,还是我需要使用其他东西?
关于从vim运行shell程序有很多SO问题.我想知道的是,是否有可能反过来 - 即
$ vim :BundleInstall
Run Code Online (Sandbox Code Playgroud)
例如,允许我作为脚本的一部分运行BundleInstall,而不是必须打开Vim并在首次运行时手动运行它?这可能吗?
我有一个关于如何分辨用户使用的shell的问题.假设一个脚本,如果用户正在使用zsh,那么将PATH放到他的.zshrc
,如果使用bash应该放入.bashrc.并相应地设置rvmrc.
#!/usr/bin/env bash
export PATH='/usr/local/bin:$PATH'" >> ~/.zshrc
source ~/.zshrc
Run Code Online (Sandbox Code Playgroud)
我尝试过以下但不起作用:(
if [[ $0 == "bash ]]; then
export PATH='/usr/local/bin:$PATH'" >> ~/.bashrc
elif [[ $0 == "zsh" ]]; then
export PATH='/usr/local/bin:$PATH'" >> ~/.zshrc
fi
# ... more commands ...
if [[ $0 == "bash ]]; then
[[ -s '/Users/`whoami`/.rvm/scripts/rvm' ]] && source '/Users/`whoami`/.rvm/scripts/rvm'" >> ~/.bashrc
source ~/.bashrc
elif [[ $0 == "zsh" ]]; then
[[ -s '/Users/`whoami`/.rvm/scripts/rvm' ]] && source '/Users/`whoami`/.rvm/scripts/rvm'" >> ~/.zshrc
source ~/.zshrc
fi
Run Code Online (Sandbox Code Playgroud) 我已经使用brew安装了nvm。之后,我通过nvm安装了16版本的node,并使用node -v检查当前版本,看看node是否正常工作。但是,当我安装版本 14 或任何其他以前的版本并运行 node -v 时,它会给出“zsh:可执行文件中的 CPU 类型错误:节点”消息,但我不知道该怎么做,安装节点 v17 和运行 node -v 按预期工作。以下是上述命令的片段。