지능적인 완료에 실패하면 Bash 정상 탭 완료


10

탭 완성은 쉘의 표준 기능이 되었기 때문에 매우 기뻤습니다. 나는 바쉬의 지능적인 완성도를 좋아한다.

Bash가 지능적인 완성을 사용하여 완성을 거부하는 행복한 하루를 망치십시오.

오늘 나는 원했다 :

tar xvf centos5.8_x86_1.ova

그래서 나는 입력했다 :

tar xvf cent<TAB>

Bash는 .ova 파일이 일반적으로 tar와 함께 사용되지 않기 때문에 경로 완성을 거부합니다.

지능형 완성을 제거하기 위해 bash-completion 패키지를 제거 할 수 있다는 것을 알고 있습니다. 하지만 내 케이크를 가지고 먹을 수도 있습니까?

bash에게 먼저 지능형 완성을 사용하도록 요청할 수 있고, 실패하면 지능적이지 않은 완성을 사용할 수 있습니까?


1
<spam> Zsh가 할 수 있습니다. </ spam>
Gilles '악의를 그만두십시오'

답변:


9

tar, vim 및 emacs 프로그램에 대해 모든 '지능형'완료가 실패한 후 다음과 같이 정상적인 bash 완료를 켜야합니다.

compopt -o bashdefault tar vim emacs

온라인 bash 매뉴얼 의 관련 페이지 도 참조하십시오 .

경고 : 현재 명령에 대한 지능적인 완료에 의해 정의 된 완료 유형 (명령 / 파일 이름 / 사용자 이름 등)에 대한 정상적인 동작이 나타 service납니다 complete -o bashdefault service.

지능형 자동 완성, 당신이 할 수 항상 눌러 실패 이것과 다른 경우 Alt-/(또는 M-/전체에 bash는 설명서의 표기) 파일 이름 거의 지능형 완료가 무효 인 경우 TAB는 의미에서 (거의 같은 방식으로 작동하는 것과 같은 방식으로 M-/하지 않습니다 와 같은 완전한 패턴 *.txt). 명령 및 사용자 이름과 같은 다른 유형의 완료에 대한 주요 순서는 여기 를 참조 하십시오 .


2
ALT-/ 언급 주셔서 감사합니다, 나는 거기에 있었다 아무 생각이 없었다
마이클 스피어를

1

bash 완성은 bash의 표준 완성의 확장이며 자체는 bash 프로그램입니다. 따라서 프로그램 작동 방식을 변경하려면 변경하십시오. 이것은 무료 소프트웨어이므로 자유롭게 할 수 있습니다. 특정 tar명령의 경우 파일은 /usr/share/bash-completion/completions/tar입니다. 들어 tar확장자를 가진 파일을 자동 완성 ova, 단지 라인에 추가

local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

그래서 그것은 말한다

local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

이것이 Debian Wheezy (현재 안정적인 버전)의 기존 경로와 코드입니다. 다른 배포판이나 버전은 다른 코드를 가질 수 있지만 아이디어는 동일합니다. 코드를 열고 원하는 작업을 수행하도록 조정하십시오.

편집 : 방금 질문이 일치하는 항목을 찾지 못하고에 추가하는 특정 사례뿐만 아니라 모든 것에 관한 것임을 알았 ova습니다 tar. 어쩌면 소스를 찾을 수있는 곳을 아는 것이 누군가에게 여전히 유용 할 수 있습니다.


4
패키지 관리자가 소유 한 / usr의 파일을 수정하면 업그레이드시 심한 충격을 유발할 수 있습니다. 더 나은 : 패키지 구성을 무시하십시오.
Chris Down

1
@ChrisDown 그리고 어떻게 하시겠습니까? 여전히 깨끗한 .bashrc 솔루션을 찾고 있습니다.
Clayton Stanley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.