theme change best autosuggestions zsh oh-my-zsh

change - Haga que zsh devuelva coincidencias autocompletadas que no distingan entre mayúsculas y minúsculas, pero que prefiera coincidencias exactas



zsh themes linux (2)

Estoy usando zsh con el archivo rc de oh-my-zsh y hay algunos comportamientos que me resultan particularmente molestos. De forma predeterminada, oh-my-zsh está configurado para devolver coincidencias que no distinguen entre mayúsculas y minúsculas cuando se completa automáticamente. Este comportamiento es a veces bueno, pero otras veces realmente apesta. ¿Hay alguna manera de configurar zsh para que solo use la coincidencia insensible a mayúsculas y minúsculas cuando no hay coincidencias entre mayúsculas y minúsculas?

Por ejemplo, este caso usaría una coincidencia entre mayúsculas y minúsculas

> ls LICENSE.txt lib/ > emacs l <-- should autocomplete to lib/

En este caso, se produciría una terminación automática insensible a mayúsculas y minúsculas:

> ls README lib/ > emacs r <-- should autocomplete to README

¡Gracias!


Cree un archivo ~/.oh-my-zsh/custom/better-completion.zsh (asumiendo que está usando las rutas predeterminadas para oh-my-zsh ) con las siguientes líneas

zstyle '':completion:*'' matcher-list '''' ''m:{a-zA-Z}={A-Za-z}'' ''r:|[._-]=* r:|=*'' ''l:|=* r:|=*''

Explicación:

Las reglas para coincidencias en la finalización de zsh en general se definen en el matcher-list . Para oh-my-zsh, esto se define en ~/.oh-my-zsh/lib/completion.zsh (una vez para mayúsculas y minúsculas y una vez para mayúsculas y minúsculas). Podrías cambiarlo allí, pero probablemente se habría ido si hubieras actualizado tu oh-my-zsh . ~/.oh-my-zsh/custom está diseñado específicamente para la personalización y los archivos con la extensión .zsh se cargan desde allí por .oh-my-zsh/oh-my-zsh.sh al final de la configuración.

La configuración predeterminada (no distingue mayúsculas y minúsculas) para matcher-list de matcher-list en oh-my-zsh es:

zstyle '':completion:*'' matcher-list ''m:{a-zA-Z}={A-Za-z}'' ''r:|[._-]=* r:|=*'' ''l:|=* r:|=*''

El primero de los cuales dice manejar mayúsculas y minúsculas intercambiables. Como es la primera regla, se utilizará invariablemente para cada partido.

El único cambio necesario es anteponer '''' para completar simplemente (es incluso el primer ejemplo en zshcompsys(1) para matcher-list )

zstyle '':completion:*'' matcher-list '''' ''m:{a-zA-Z}={A-Za-z}'' ''r:|[._-]=* r:|=*'' ''l:|=* r:|=*''

Primero intenta completar la palabra actual exactamente como está escrita, antes de intentar coincidencias entre mayúsculas y minúsculas u otras coincidencias.

Estar Completo:

  • La segunda regla (original) permite una terminación parcial antes . , _ o - , por ejemplo, fb -> foo.bar .
  • La tercera regla permite completar en el lado izquierdo del texto escrito, por ejemplo, bar -> foobar )

Simplemente descomenta la siguiente línea en ~ / .zshrc:

# Uncomment the following line to use case-sensitive completion. # CASE_SENSITIVE="true"

Funciono para mi