Como posso estender o preenchimento automático da tecla Tab no terminal para o texto no meio de um comando?

1

Arquivo de exemplo: Selection_192.png

  1. $ ls 192
  2. Agora eu pressiono Tab duas vezes
  3. Deve ser preenchido automaticamente para $ ls Selection_192.png

Nota:

Ele não deve funcionar apenas com ls , mas com qualquer tipo de comando e, preferencialmente, ser uma solução que funcione com o shell padrão no Ubuntu Unity 16.04.

    
por orschiro 16.09.2016 / 11:28

1 resposta

3

Como você não mencionou o shell específico, uma maneira é instalar zsh .

sudo apt-get install zsh
# now change the default shell
chsh -s /usr/bin/zsh
sudo chsh -s /usr/bin/zsh

Agora, como você obteve o zsh como o shell padrão em vez do bash, para obter uma conclusão difusa, adicione isso a ~/.zshrc arquivo:

zstyle ':completion:*' matcher-list '' \
  'm:{a-z\-}={A-Z\_}' \
  'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
  'r:|?=** m:{a-z\-}={A-Z\_}'

Por exemplo, é assim que meu ~/.zshrc se parece:

 # bash style (read as the adequate) for navigating words
 autoload -U select-word-style
 select-word-style bash

 # some plugins
 source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
 source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
 ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=7'
 zstyle ':completion:*' matcher-list '' \
         'm:{a-z\-}={A-Z\_}' \
         'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
         'r:|?=** m:{a-z\-}={A-Z\_}'
 bindkey \^U backward-kill-line

 #useful aliases
 alias grep1="grep --exclude-dir=\".*\""
 alias gdb="gdb -q"

NB : a utilidade do zsh é que ele é muito extensível e, de várias maneiras, compatível com o bash. No oposto, por ex. fish (outra alternativa ao bash, que é bem parecido com um zsh configurado) na minha experiência causa muitos problemas de incompatibilidade.

UPD : por comentários do OP: se você quiser aumentar a necessidade de as letras ficarem próximas umas das outras (ou seja, em vez de conclusão difusa, é apenas uma conclusão subsequente) , então ao invés do regexp eu mencionei você pode colocar em ~/.zshrc este código :

zstyle ':completion:*' completer _complete
zstyle ':completion:*' matcher-list '' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' '+l:|=* r:|=*'
autoload -Uz compinit
compinit
    
por Hi-Angel 16.09.2016 / 12:37