와일드카드를 사용한 Bash 자동 완성

와일드카드를 사용한 Bash 자동 완성

Emacs에서처럼 터미널에 다음을 입력하고 싶습니다.

emacs 2019-*subject*

내가 쳤을 때 Tab첫 번째 일치 항목을 얻습니다.

2019-08-03-subject.markdown 

내가 원하는 것은 다음과 같은 옵션을 표시하는 것입니다.

2019-08-03-subject.markdown 2019-bla-bla-subject-predicate.markdown etc...

나는 온라인 어디에서나 찾아보았고 이것이 기능이 아니라는 것을 믿을 수 없습니다.

있다많은 비슷한질문을 받았습니다.답변이 내가 원하는 대로 작동하지 않습니다(위 참조).. 내가 시도한 다른 솔루션:여기.

PS 저는 Ubuntu 16을 사용합니다. 이것은 파일을 열 때 emacs에서 발견하는 일반적인 기능입니다. 매우 편리할 것입니다.

답변1

이후에 일어나는 일은 Tab완료 스크립트에 따라 다릅니다.이 답변2013년에는 최소한 한 명의 사용자가 원하는 동작이 있었다고 믿게 만듭니다. 하지만 2019년 데비안 9의 동작은 당신이 설명한 것과 같습니다. 그 이후로 스크립트/동작이 변경되었을 수 있습니다.

게다가 Bash는 입력된 명령(현재 줄의 첫 번째 단어)에 따라 스크립트를 선택합니다. 단일 변경 사항이 원하는 것을 제공하기 위해 모든 완성에 영향을 미칠 수 있다는 것은 즉시 명확하지 않습니다(내 생각에는 이 _filedir함수가 좋은 시작인 것 같습니다).


다행히도 필요에 따라 확장이 가능합니다. man 1 bash(헤더 아래 ) 에서 READLINE:

glob-complete-word( M-g)
포인트 앞의 단어는 암시적으로 별표가 추가된 경로 이름 확장의 패턴으로 처리됩니다. 이 패턴은 가능한 완성에 대해 일치하는 파일 이름 목록을 생성하는 데 사용됩니다.

glob-expand-word( C-x *)
포인트 앞의 단어는 경로 이름 확장을 위한 패턴으로 처리되며 일치하는 파일 이름 목록이 단어를 대체하여 삽입됩니다. 숫자 인수가 제공되면 경로 이름 확장 앞에 별표가 추가됩니다.

glob-list-expansions( C-x g)
에 의해 생성되었을 확장 목록 glob-expand-word이 표시되고 선이 다시 그려집니다. 숫자 인수가 제공되면 경로 이름 확장 앞에 별표가 추가됩니다.

M-g, 기본 키 바인딩을 설명합니다 C-x *. C-x g보다 친숙한 형식은 다음과 같습니다.

  • Meta+ g( Alt+ g) for glob-complete-word,
  • Ctrl+ x, (release Ctrl) *for glob-expand-word(참고: *사실 Shift+ 는 8내 키보드에 있습니다),
  • Ctrl+ x, (릴리스 Ctrl) gfor glob-list-expansions.

다음 코드는 이러한 바인딩을 설정합니다(어떤 이유로든 누락된 경우).

  • 현재 쉘에만 해당:

    # commands to run in Bash
    bind '"\eg":   glob-complete-word'
    bind '"\C-x*": glob-expand-word'
    bind '"\C-xg": glob-list-expansions'
    
  • 또는 영구 구성( /etc/inputrc또는 ~/.inputrc)에서:

    # lines to add
    "\eg":   glob-complete-word
    "\C-x*": glob-expand-word
    "\C-xg": glob-list-expansions
    

    (이것은 새 쉘에만 영향을 미칩니다.다시 장전하다).


glob-complete-word당신은 또는 에 관심이 있을 것입니다 glob-list-expansions. 주요 차이점:

  • glob-complete-word항상 별표를 추가하지만 glob-list-expansions이는 조건부로 수행됩니다(인용 매뉴얼 참조).
  • 일치하는 항목이 많으면 glob-complete-word무언가를 인쇄하기 전에 두 번 트리거해야 할 수도 있습니다(예: 키 조합을 두 번 누르기). 이것은 에 달려 있습니다 show-all-if-ambiguous.이미 언급한 답변.
  • 일치하는 항목이 하나만 있으면 glob-complete-word실제 줄 완성을 수행하지만 glob-list-expansions여전히 일치 항목만 표시합니다.

특별한 경우에는 다음을 입력하십시오.

emacs 2019-*subject*

그런 다음 Ctrl+ x, g.

관련 정보