How to disable zsh substitution/autocomplete with URL and backslashes

后端 未结 4 417
不知归路
不知归路 2020-12-08 22:50

I am using zsh with oh-my-zsh on Ubuntu:14.04.

The shell autocompletes escape character with backslash when I paste a URL.

For ex

相关标签:
4条回答
  • 2020-12-08 23:24

    update 2019-05-12:

    new version(> 486fa10) oh-my-zsh have a configuration for this, add DISABLE_MAGIC_FUNCTIONS=true before source $ZSH/oh-my-zsh.sh:

    DISABLE_MAGIC_FUNCTIONS=true
    source $ZSH/oh-my-zsh.sh
    

    via: https://github.com/robbyrussell/oh-my-zsh/commit/486fa1010df847bfd8823b4492623afc7c935709


    Original answer:

    This is a bug in zsh 5.1.1 ~ 5.2(current).

    The plugin bracketed-paste-magic did not works in the zsh versions.

    The issue is here:

    • https://github.com/zsh-users/zsh-autosuggestions/issues/102
    • https://github.com/robbyrussell/oh-my-zsh/issues/5499
    • https://github.com/robbyrussell/oh-my-zsh/commit/35517457921c095be1aa6ed948debfbe183b89ac

    I suggest you disable bracketed-paste-magic.

    Comment these code from oh-my-zsh's ~/.oh-my-zsh/lib/misc.zsh solve the problem:

    if [[ $ZSH_VERSION != 5.1.1 ]]; then
      for d in $fpath; do
        if [[ -e "$d/url-quote-magic" ]]; then
          if is-at-least 5.1; then
            autoload -Uz bracketed-paste-magic
            zle -N bracketed-paste bracketed-paste-magic
          fi
          autoload -Uz url-quote-magic
          zle -N self-insert url-quote-magic
          break
        fi
      done
    fi
    

    via

    0 讨论(0)
  • 2020-12-08 23:28

    show my zsh version

    echo $ZSH_VERSION
    5.3
    

    open misc.zsh

    vim ~/.oh-my-zsh/lib/misc.zsh
    

    you will see the following:

    autoload -Uz is-at-least
    
    # *-magic is known buggy in some versions; disable if so
    if [[ $DISABLE_MAGIC_FUNCTIONS != true ]]; then
      for d in $fpath; do
        if [[ -e "$d/url-quote-magic" ]]; then
            if is-at-least 5.1; then
                autoload -Uz bracketed-paste-magic
                zle -N bracketed-paste bracketed-paste-magic
            fi
            autoload -Uz url-quote-magic
            zle -N self-insert url-quote-magic
          break
        fi
      done
    fi
    
    ## jobs
    setopt long_list_jobs
    
    env_default 'PAGER' 'less'
    env_default 'LESS' '-R'
    
    ## super user alias
    alias _='sudo'
    
    ## more intelligent acking for ubuntu users
    if which ack-grep &> /dev/null; then
      alias afind='ack-grep -il'
    else
      alias afind='ack -il'
    fi
    
    # only define LC_CTYPE if undefined
    if [[ -z "$LC_CTYPE" && -z "$LC_ALL" ]]; then
        export LC_CTYPE=${LANG%%:*} # pick the first entry from LANG
    fi
    
    # recognize comments
    setopt interactivecomments
    

    add the following line at the top of the file

    DISABLE_MAGIC_FUNCTIONS=true
    
    0 讨论(0)
  • 2020-12-08 23:30

    I ended up at this answer but still could not understand why pasting a URL was escaping characters like & ? [ ] and causing my curl commands to fail.

    The culprit (for me) was iTerm2 on Mac.

    To disable the behavior, go into iTerm2 > Preferences > Profiles > Terminal and UNCHECK Terminal may enable paste bracketing.

    Make sure you do this for the correct profile.

    0 讨论(0)
  • 2020-12-08 23:42

    If the URL is not quoted, the backslashes may be necessary, that's why zsh adds them (via url-quote-magic). If you do not like them, then quote the URL:

    $ wget '
    

    then paste the URL and type the ending quote:

    $ wget 'http://{DEFAULT_IP}/index.html'
    

    To disable the url-quote-magic feature entirely:

    zstyle ':urlglobber' url-other-schema
    

    EDIT: As of version 5.1, zsh supports bracketed paste in some terminals, in which case url-quote-magic is no longer involved (bracketed-paste-magic replaces it for pastes).

    0 讨论(0)
提交回复
热议问题