내부에tcsh 맨페이지, 의 영향은 set complete = enhance
다음과 같이 정의됩니다.
[...] 완료 1) 대소문자 무시, 2) 마침표, 하이픈 및 밑줄(".", "-" 및 "_")을 단어 구분 기호로 처리하며 하이픈과 밑줄은 동일합니다.
readline
1)에 대해서는 구성을 통해 사례를 무시할 수 있는 것으로 알고 있습니다 set completion-ignore-case on
. 그래서 내 질문은 2)에만 관련됩니다.
예를 들어 다음과 같이 기본 이름은 비슷하지만 확장자가 다른 여러 파일이 포함된 디렉터리가 있는 경우:
$ ls
file0.dat file1.dat file2.dat files.sh
그런 다음 쉘이 파일 확장자를 완성하기를 원합니다.
$ cat .sh<TAB>
$ cat files.sh
이 동작을 달성하거나 최소한 모방할 수 있는 방법이 있습니까 bash
?
편집하다
첫 번째 답변에 이어 tcsh
기능의 작동 방식을 보다 정확하게 보여주는 추가 예는 다음과 같습니다.
$ ls
abc.foo abc.bar cab.foo cab.bar
$ cat a.f<TAB>
$ cat abc.foo
또는:
$ cat .b<TAB>
abc.bar cab.bar
$ cat .bar
실제로 tcsh
기본 이름과 확장자가 완성되었습니다. 여기서의 동작은 TAB 완성을 모두 삽입하는 대신 일반적으로 수행하는 것처럼 여러 가능성을 나열하는 것입니다.
답변1
이것이 꼭 필요한 것은 아니지만 거의 가깝습니다. Ctrl+ x, 단축키 g( C-x g
emacsspeak에서) 단축키는 glob의 확장을 나열합니다. 따라서 귀하의 예에서는 다음과 같습니다.
$ cat *.b*<Ctrl><x><g>
abc.bar cab.bar
따라서 설명하는 것과는 달리 tcsh
유효한 glob이 필요합니다. 즉, 다음과 같습니다.
$ echo *.b*
단축키는 와 Ctrl를 동시에 누른 x다음 손을 떼고 누르는 것입니다 g.
이에 대한 문서는 다음과 같습니다 man bash
.
glob-list-expansions (C-x g)
The list of expansions that would have been generated by
glob-expand-word is displayed, and the line is redrawn. If a
numeric argument is supplied, an asterisk is appended before
pathname expansion.