【问题标题】:Oh-my-zsh aliases do not autocompleteOh-my-zsh 别名不会自动完成
【发布时间】:2023-04-09 14:50:01
【问题描述】:

我在研究这个问题时有点不知所措......我只需要问一下。

我的 Mavericks 机器上有 oh-my-zsh,并且所有内容都已更新。我也有 Xcode 和 Brew。全部更新。根据这个页面:https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet我不应该只输入,说:“g”[tab]并得到“git”吗?或键入“md”[tab] 并获取“mkdir -p”?现在我只是得到一个选项列表,我可以通过标签(或箭头)...我认为它会自动完成。我错过了什么?

我感觉它可能与我的 $PATH 有关,但这也是我感到困惑的地方......它应该指向哪里?

我非常感激和启迪。

# Path to your oh-my-zsh configuration.
#ZSH=$HOME/.oh-my-zsh
 export ZSH=$HOME/.oh-my-zsh

# Set name of the theme to load.
# Look in ~/.oh-my-zsh/themes/
# Optionally, if you set this to "random", it'll load a random theme each
# time that oh-my-zsh is loaded.
#ZSH_THEME="af-magic"
 ZSH_THEME="agnoster"

# Set to this to use case-sensitive completion
# CASE_SENSITIVE="true"

# Comment this out to disable weekly auto-update checks
# DISABLE_AUTO_UPDATE="true"

# Uncomment following line if you want to disable colors in ls
# DISABLE_LS_COLORS="true"

# Uncomment following line if you want to disable autosetting terminal title.
# DISABLE_AUTO_TITLE="true"

# Uncomment following line if you want red dots to be displayed while waiting for completion
 COMPLETION_WAITING_DOTS="true"

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Example format: plugins=(rails git textmate ruby lighthouse)
 plugins=(git textmate sublime zsh-syntax-highlighting)

 source $ZSH/oh-my-zsh.sh

#export PATH=/usr/local/bin:/usr/local/sbin:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/X11/$
#export PATH=$HOME/bin:/usr/local/bin:$PATH
 export PATH=/usr/local/bin:$PATH

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

 zstyle ':completion:*' list-prompt   ''
 zstyle ':completion:*' select-prompt ''

 autoload -Uz compinit
 compinit

【问题讨论】:

    标签: plugins autocomplete alias zsh zshrc


    【解决方案1】:

    别名本质上只是命令的简称。在执行命令之前 zsh 在内部用它们的值替换别名。但默认情况下,使用完成 (Tab) 时不会扩展别名,它们的处理方式与任何其他命令一样。

    例如:

    alias ll='ls -l'
    alias la='ls -al'
    

    如果您现在键入lTab,zsh 将显示以l 开头的每个命令,包括别名llla。如果您键入llTab,它可能只会在ll 之后添加一个空格(假设没有其他以ll 开头的命令)。

    当您运行ll somedir 时,它的作用与ls -l somedir 完全相同。您甚至可以添加ls 的其他选项:ll -t somedir 运行ls -l -t somedir


    话虽如此,如果您想在键入 Tab 时扩展别名,zsh 可以这样做。

    有两种方式:

    1. 您可以调用_expand_alias 小部件。在 emacs 模式 (bindkey -e) 绑定到^Xa (按Control+X 然后A )。

    2. 您可以将_expand_alias 添加到completer 样式中。似乎 oh-my-zsh 并没有从它的默认值改变这个样式,所以添加

      zstyle ':completion:*' completer _expand_alias _complete _ignored

      到您的~/.zshrc 应该可以工作。

      (为了保存,您可以使用zstyle -L ':completion:*' completer 打印当前设置,_expand_alias 必须在_complete 之前)

      如果您现在键入 llTabzsh 将立即将其替换为 ls -l

    注意:在这两种情况下,光标都必须在别名中或之后才能进行替换。这也意味着如果自动完成,您必须输入整个别名或退格(_completer 在成功完成后添加一个空格)

    【讨论】:

      猜你喜欢
      • 2017-05-02
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-02
      • 2018-01-12
      • 2022-06-16
      • 2015-05-18
      相关资源
      最近更新 更多