접미사를 기반으로 bash 완료에서 파일 이름을 제거하는 방법은 무엇입니까?

접미사를 기반으로 bash 완료에서 파일 이름을 제거하는 방법은 무엇입니까?

중복된 내용이라면 사과드립니다. 하지만 편집을 시도했지만 실패했습니다 vim.

특히 LaTeX 문서를 편집할 때 사용하고 싶지 않은 것이 많습니다 . 즉, 문서가 컴파일될 때 생성되는 다른 파일이 아닌 파일 vim만 편집하고 싶습니다 ..tex.aux.pdf

나는 이 명령을 가지고 놀았 complete지만 별로 재미가 없었습니다.

다음 명령이 .aux생성된 파일 이름 목록에서 파일을 제거하지 않는 이유는 무엇입니까?

$ complete -o default -X '^.*aux' vim

답변1

원하는 패턴은 정규식이 아니라 glob이므로 파일을 완성하고 있음을 알려야 bash합니다 . -f또한 이렇게 default하면 방금 필터링한 파일 이름이 추가되므로 해당 옵션을 제거하거나 다른 것을 선택하면 됩니다( 디렉토리도 완성되도록 -o이 옵션을 사용했습니다 ). dirnames다음 작업을 수행해야 합니다.

complete -f -o dirnames -X '*.@(aux|pdf)' vim

man사용된 glob에 대한 관련 페이지 참조:

내장된 shopt를 사용하여 extglob 쉘 옵션을 활성화하면 여러 확장 패턴 일치 연산자가 인식됩니다. 다음 설명에서 패턴 목록은 |로 구분된 하나 이상의 패턴 목록입니다. 복합 패턴은 다음 하위 패턴 중 하나 이상을 사용하여 형성될 수 있습니다.

          ?(pattern-list)
                 Matches zero or one occurrence of the given patterns
          *(pattern-list)
                 Matches zero or more occurrences of the given patterns
          +(pattern-list)
                 Matches one or more occurrences of the given patterns
          @(pattern-list)
                 Matches one of the given patterns
          !(pattern-list)
                 Matches anything except one of the given patterns

extglob완료되면 활성화해야 bash하지만 그렇지 않은 경우에도 이 작업을 수행해야 합니다.

관련 정보