자동 완성이 특정 완성을 무시하도록 만드는 방법

자동 완성이 특정 완성을 무시하도록 만드는 방법

Bash에 자동 완성 기능을 제공했습니다. 프로그램 이름의 일부를 입력한 다음 Tab 키를 누르면 전체 명령이 표시됩니다. 예상대로 작동했으며 불만이 없습니다.

그러나 내 설정에서는 이름이 지정된 별칭을 정의했습니다 flexo(동일한 이름을 가진 컴퓨터에 로그인하게 됩니다). 내가 이것을 입력할 때 fleTAB나는 flex이것이 기계에서 완벽하게 유효한 프로그램이기 때문에 얻는다. 이 특정 완료를 무시하도록 완료하도록 어떻게 지시할 수 있습니까? 즉, 나는 fleTAB끝났고 완전히 무시되기를 flexo원합니다 flex. 감사해요.

답변1

탭 완성 알고리즘을 사용하여 풀에서 여러 항목을 가져오는 것은 생각보다 복잡합니다. 실제로 수행할 수는 있지만 쉽거나 효율적이거나 사용하는 것이 권장되지 않습니다.

반대로 @jasonwryan은 명령 이름에 대해 다른 것을 생각해 내야 한다는 것이 옳습니다. 그러나 한 단어(예: 명령 이름으로 서버 이름)를 사용하는 대신 나머지 Unix와 마찬가지로 모델을 다중 단어 모델로 전환하는 것이 좋습니다. 명령 이름의 탭 완성은 매개변수의 탭 완성과 매우 다르며 매우 간단합니다.

"s"와 같은 짧고 간단한 별칭이나 연결 별칭을 설정하되 호스트 이름은 설정하지 마세요. 그런 다음 호스트 이름만 자동 완성하는 명령에 대한 사용자 정의 완료 루틴을 설정합니다. 예를 들면 다음과 같습니다.

alias s=ssh
complete -F _known_hosts_real s

이를 위해 사용자 정의 함수를 만들 수도 있습니다.

alias s=ssh
_my_hosts() {
    type compopt &>/dev/null && compopt -o nospace
    COMPREPLY=( $( compgen -S = -W 'flexo mexo dexo' -- "$cur") )
}
complete -F _my_hosts s

관련 정보