¿Ignorar directorios absolutos especificados con tabulación?

¿Ignorar directorios absolutos especificados con tabulación?

Trabajo en un clúster con muchos usuarios. Hay 50 usuarios en el clúster con la misma primera letra que mi nombre de usuario y un usuario que tiene el mismo nombre hasta la última letra. Cuando complete la tabulación desde /home/eMe gustaría ver solo /home/elsherbini/, en lugar de tener que escribir algunos caracteres más, tabular y luego escribir el último.

Parece que FIGNORE no funciona en rutas absolutas, solo en sufijos de archivos. ¿Hay alguna manera de ignorar una lista seleccionada de directorios para completar con pestañas?

GNU bash, versión 4.1.2(1) (x86_64-redhat-linux-gnu)

Respuesta1

Una forma que sugeriría es tener un aliassi solo nos preocupa la homeruta del directorio, agregar lo siguiente a su profilesería útil aquí, cualquier alias único que haya creado debe autocompletarse incluso con un primer carácter.

alias myHome="cd /home/elsherbini"
. .profile
my\T
pwd
/home/elsherbini

EDITAR:

La otra manera podría servinculando una llavepero incluso esto requeriría una rápida double clicky right click, considerando su uso en PuTTY, si esto ayuda.

completeIt(){ echo "elsherbini"; }
bind -x '"\C-h": completeIt;'

El uso de Control-Hgenerará su cadena personalizada, diga su nombre de usuario. Uso:

$ cd
elsherbini

Respuesta2

Estoy usando zshlo que permite personalizar la finalización muy a fondo. Esta opción evita que se completen ciertos patrones:

autoload -Uz compinit; compinit
# ignore some common patterns that we usually don't want as completions
zstyle ':completion:*' ignored-patterns "/usr/share/iscan" "/usr/lib/iscan" \
        "iscan" "/usr/lib/ispell" "ispell" "/usr/lib64" "/usr/lib32" \
        "/usr/libx32" "/usr/libexec" "/srv/tftp" "chkwins" "dpkg-buildflags"

Respuesta3

Puede anular el incorporado compgenpara completar directorios simples (como para cdy ls). Por ejemplo, ponga esta función en su ~/.bashrc

compgen(){
    local IFS=$'\n'
    local x tmp
    x=$( builtin compgen "$@" ) &&
    while read -r tmp; do
        [[ "$tmp" =~ ^/home/e && ! "$tmp" =~ ^/home/elsherbini$ ]] ||
        echo "$tmp"
    done <<< "$x"
}

Ejecuta el incorporado compgeny filtra la salida para que cualquier línea que comience con la expresión regular ^/home/ey no coincida ^/home/elsherbini$se elimine de la lista de posibles terminaciones. Cuidado, las expresiones regulares no se citan en el interior [[]].

información relacionada