【问题标题】:Zsh doesn't autocomplete correctly my ssh commandZsh 无法正确自动完成我的 ssh 命令
【发布时间】:2019-01-22 13:47:04
【问题描述】:

我对 ssh 自动完成有一些问题。 我想让我的 zsh 在我的 .ssh/config 文件上自动完成,但直到现在它只对 /etc/hosts 文件执行此操作。 我通过添加此配置找到了如何不使用主机文件

zstyle ':completion:*:ssh:*' hosts off

但我无法成功让 zsh 查看 .ssh/config 文件 我已经尝试过,希望渺茫,但没有成功

zstyle ':completion:*:ssh:*' config on

这是我的 .zshrc 文件

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

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

    # Set name of the theme to load. Optionally, if you set this to "random"
    # it'll load a random theme each time that oh-my-zsh is loaded.
    # See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
    ZSH_THEME="agnoster"

    # Set list of themes to load
    # Setting this variable when ZSH_THEME=random
    # cause zsh load theme from this variable instead of
    # looking in ~/.oh-my-zsh/themes/
    # An empty array 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 change how often to auto-update (in days).
    # export UPDATE_ZSH_DAYS=13

    # 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.
    # 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.
    # The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
    # 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? (plugins can be found in ~/.oh-my-zsh/plugins/*)
    # Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
    # Example format: plugins=(rails git textmate ruby lighthouse)
    # Add wisely, as too many plugins slow down shell startup.
    plugins=(
    git, 
    zsh-autosuggestions
    )
    # support bash autocompletion
    # https://stackoverflow.com/questions/3249432/i-have-a-bash-tab-completion-script-is-t
    #autoload bashcompinit
    #bashcompinit
    source ~/.bash_profile

    if [[ -f /usr/share/bash-completion/completions/lpass ]]; then
            source /usr/share/bash-completion/completions/lpass
    fi

    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"

    # ssh
    # export SSH_KEY_PATH="~/.ssh/rsa_id"

    # 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"
    export PATH="/usr/local/opt/thrift@0.9/bin:$PATH"
    zstyle ':completion:*:ssh:*' hosts off
    zstyle ':completion:*:ssh:*' config on

如果有人可以帮助我!我很乐意欣赏。

谢谢

【问题讨论】:

    标签: ssh autocomplete zsh


    【解决方案1】:

    如果您正在寻找 ssh 和其他 ssh 命令(如 scp)的自动补全功能,请使用以下几行代码:

    # Highlight the current autocomplete option
    zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
    
    # Better SSH/Rsync/SCP Autocomplete
    zstyle ':completion:*:(scp|rsync):*' tag-order ' hosts:-ipaddr:ip\ address hosts:-host:host files'
    zstyle ':completion:*:(ssh|scp|rsync):*:hosts-host' ignored-patterns '*(.|:)*' loopback ip6-loopback localhost ip6-localhost broadcasthost
    zstyle ':completion:*:(ssh|scp|rsync):*:hosts-ipaddr' ignored-patterns '^(<->.<->.<->.<->|(|::)([[:xdigit:].]##:(#c,2))##(|%*))' '127.0.0.<->' '255.255.255.255' '::1' 'fe80::*'
    
    # Allow for autocomplete to be case insensitive
    zstyle ':completion:*' matcher-list '' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' \
      '+l:|?=** r:|?=**'
    
    # Initialize the autocompletion
    autoload -Uz compinit && compinit -i
    

    这不是来自我,而是来自这里的一篇博文:https://codyhiar.com/blog/zsh-autocomplete-with-ssh-config-file/

    【讨论】:

      【解决方案2】:

      这是来自related question 的脚本。

      h=()
      if [[ -r ~/.ssh/config ]]; then
        h=($h ${${${(@M)${(f)"$(cat ~/.ssh/config)"}:#Host *}#Host }:#*[*?]*})
      fi
      if [[ -r ~/.ssh/known_hosts ]]; then
        h=($h ${${${(f)"$(cat ~/.ssh/known_hosts{,2} || true)"}%%\ *}%%,*}) 2>/dev/null
      fi
      if [[ $#h -gt 0 ]]; then
        zstyle ':completion:*:ssh:*' hosts $h
        zstyle ':completion:*:slogin:*' hosts $h
      fi
      

      【讨论】:

      • 谢谢!我不得不将其更改为包含一个文件夹,我们在其中存储所有项目的 ssh 别名。但是效果很好!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      相关资源
      最近更新 更多