我最近从 bash 切换到 zsh。如何实现以下选项卡完成行为:
输入第一个字母,然后按TAB。完成输入直到第一个不明确的字母并立即显示选项/替代方案。
目前,它的行为是这样的:
# ls .m*
.mysql_history .matlab .matplotlib .mono .mozilla
# cd .m<TAB>
.matlab/ .matplotlib/ .mono/ .mozilla/
# cd .mo<TAB>
.mono/ .mozilla/
# cd .ma<TAB><TAB> (here two tabs are necessary: the first one completes to .mat,
the second one show .matlab and .matplotlib)
Run Code Online (Sandbox Code Playgroud)
在最后一种情况下,我想去掉第二个选项卡。zshs 完成系统可以做到这一点吗?
这是我的当前.zshrc:
HISTFILE=~/.histfile
HISTSIZE=10000
SAVEHIST=1000
# Options
setopt autocd
# Aliases
alias ls='ls --color -h --group-directories-first'
alias ll='ls -laF --color -h --group-directories-first'
alias la='ls -A --color -h --group-directories-first' …Run Code Online (Sandbox Code Playgroud) 在函数内部,如何获取调用该函数的任何脚本的文件名?
通过提示扩展,%x提供定义函数的文件的名称。%N提供函数名称。如何获取调用该函数的文件的名称?
这对于报告每个启动脚本的运行时间很有用,例如:
~/.zshenv:
function start_timer() {
start_time=$(date +%s.%N)
}
function stop_timer() {
stop_time=$(date +%s.%N)
elapsed_time=$((stop_time-start_time))
echo "$SCRIPTNAME took $elapsed_time seconds"
}
start_timer
# initialize env...
end_timer # "~/.zshenv took 0 seconds"
Run Code Online (Sandbox Code Playgroud)
~/.zshrc:
start_timer
# initialize interactive shell...
end_timer # "~/.zshrc took 2 seconds"
Run Code Online (Sandbox Code Playgroud)
~/.zlogin:
start_timer
# initialize login shell...
end_timer # "~/.zlogin took 2 seconds"
Run Code Online (Sandbox Code Playgroud) 我是一个完全的新手,所以我想我只是错过了一步,但不知道。
我正在关注 Rails 的教程。很多步骤都说“ and then editing the ~/.zshrc file.”,但我没有任何 ~/.zshrc 文件。我正在查看 Sublime 中的文件夹。此外,以下 ~/.zprofile、~/.zlogin、~/.zlogout 都不存在。不过,在我的主文件下,有 .zprezto 文件夹。也没有zshenv...
我只是创建文件吗?似乎它们应该从某个地方下载。我在 OS X 上使用终端。所以迷路了。
echo 'write whatever' >.zshrc
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我开始在macOS Sierra上使用zsh。我希望具有以下键映射:
但是,我似乎无法区分两者。我只能获取Enter和Esc-Enter,但不能获得Shift-Enter:
bindkey "^M" accept-line # Enter
bindkey "^[^M" accept-and-hold # Esc-Enter
bindkey "????" accept-and-hold # Shift-Enter
Run Code Online (Sandbox Code Playgroud)
是否可以检测和处理Shift-Enter?
我想运行 Zsh 而不加载任何我的.zshrc、Oh-my-zsh 等,就像我进行了全新安装而没有任何自定义内容一样。(喜欢emacs -q。)
有这方面的标志吗?否则,我可以为其设置某种“配置文件”吗?
标题中有一个简单的总结,但需要进一步解释:
每当我打开终端(iterm2)时,我都会加载到 zsh 但完成似乎不起作用,然后当我手动运行时source .zshrc它会完全加载。我尝试移动 .zshrc 文件中的内容以查看加载顺序是否不正确,但它没有解决任何问题。
我的 .zshrc 文件:
# ZSH customization
export ZSH="/Users/user/.oh-my-zsh"
source $ZSH/oh-my-zsh.sh
plugins=(git docker asdf zsh-autosuggestions zsh-completions zsh-history-substring-search zsh-syntax-highlighting)
autoload -U compinit && compinit
# color
. "/Users/user/.bin/lscolors.sh" #big color file
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
# alias
alias ip="curl ifconfig.me"
alias ls="gls --color --group-directories-first -hp"
alias ydl="youtube-dl"
alias py="python"
alias code="codium"
# env
export PATH="/usr/local/opt/ncurses/bin:/usr/local/sbin:/usr/local/opt/openssl@1.1/bin:$PATH:/opt/metasploit-framework/bin:$HOME/.bin:$HOME/.cargo/bin"
export EDITOR=/usr/local/bin/codium
export DOTNET_CLI_TELEMETRY_OPTOUT=1
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/ncurses/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/ncurses/include"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/ncurses/lib/pkgconfig"
# fzf
[ -f ~/.fzf.zsh ] …Run Code Online (Sandbox Code Playgroud) 在我开始使用 zsh vi 模式后,fzf ctrl+r 不再起作用。我的 zshrc 文件在这里:
function zvm_config() {
ZVM_LINE_INIT_MODE=$ZVM_MODE_INSERT
ZVM_VI_INSERT_ESCAPE_BINDKEY=jk
}
source /opt/homebrew/opt/zplug/init.zsh
zplug "jeffreytse/zsh-vi-mode"
# Install plugins if there are plugins that have not been installed
if ! zplug check --verbose; then
printf "Install? [y/N]: "
if read -q; then
echo; zplug install
fi
fi
# Then, source plugins and add commands to $PATH
zplug load --verbose
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
Run Code Online (Sandbox Code Playgroud)
如果我单独运行 source ~/.fzf.zsh 那么它就会工作。
好吧,我几个小时前切换到zsh而且我在一个巨大的配置 - 傻瓜疯狂,但这对我来说可能是一个太大的咬合:
我想做一个分隔符autopairnig,例如type(并且它insert().首先失败:
bindkey -s "(" "()"
第二次失败:
function autopair () {
zle -U "()"
zle backward-char
}
zle -N autopair autopair
bindkey "(" autopair
Run Code Online (Sandbox Code Playgroud)
我认为两者都失败了,因为zsh试图递归"("插入(-U似乎明确地说明).有没有办法避免这种情况?echo -ne "()"在函数的第一行代入当然避免了这个但是不可编辑...任何想法如何强制插入?
奖励点(比喻说:)):我想在插入后将光标设置在括号之间.然而zle backward-char在我的功能中没有做任何事......
想象一下这有多棒!谢谢!
我的.zshrc中有以下代码:
local ruby_version=''
if which rvm-prompt &> /dev/null; then
ruby_version="$(rvm-prompt i v g)"
else
if which rbenv &> /dev/null; then
ruby_version="$(rbenv version | sed -e "s/ (set.*$//")"
fi
fi
Run Code Online (Sandbox Code Playgroud)
我在RPS1提示符中有这个代码:
RPS1='${PR_GREEN}$(virtualenv_info)%{$reset_color%} ${PR_RED}${ruby_version}%{$reset_color%}'
Run Code Online (Sandbox Code Playgroud)
(为简洁起见,我没有显示设置PR_颜色或确定虚拟环境的代码 - 这两者都起作用.)
创建新shell时(iTerm2中的新窗口或新选项卡),Ruby信息是正确的.但是,如果我切换到使用不同Ruby的项目(由.ruby-version文件确定),则右侧提示中显示的Ruby信息不会刷新.如果我重新获取.zshrc文件,则右键提示会刷新.
我是否需要在函数中包含确定Ruby版本的代码?顺便说一句,我也有setopt promptsubst.zshrc.
当我更改目录时,我错过了什么阻止了右键提示的刷新?
我是一个oh-my-zsh用户但决定切换到prezto.我按照他们的github页面上的步骤操作:https://github.com/sorin-ionescu/prezto
卸载了oh-my-zsh,git克隆了prezto.不确定我是否清楚地理解了第3步,但现在我的家庭目录下确实有.zshrc,.zprofile,.zpreztorc.但是,当我用zsh打开一个新选项卡时,我仍然看到最基本的zsh设置.(例如,我没有看到sorin主题).有关如何调试我的安装的任何想法?
我使用iTerm2在最新的OS X上运行它.