2009-02-03 3 views
0

질문 : 질문이 있습니다 스택 오버플로에 apparently not answered by this already-asked Bash completion question입니다. 문제는 부분 문자열에서 Bash 별칭 완성 (별칭)을 얻는 방법입니다.부분 부분 문자열에서 Bash 별칭 완성을 몇 가지 방법으로 얻을 수 있습니까?

예 : 예를 들어 , 나는 다음과 같은 별명을 가지고 가정

open.alicehome="cd /usr/home/alice" 
open.bakerhome="cd /usr/home/baker" 
open.charliehome="cd /usr/home/charlie" 
gohomenow="shutdown -now" 

나는 게으르게 그냥 "베이커 {{TAB}}"호출 할 수있는 두 번째 별칭을 입력하고 싶습니다.

"home {{TAB}}"을 입력하여 위의 모든 별칭 목록을 가져와 키보드에서 선택하거나 (최적) 키보드를 구별 할 수있는 명확한 하위 문자열을 입력하십시오. 세 가지 옵션 중 (최적 이하).

.. 나 ..

나는 게으르게 그냥 "집"을 선택한 다음를 반복하여 눌러 {{TAB}} 내가 원하는 특정 별칭가 표시 될 때까지, 다음 Enter 키를 눌러 {{ENTER}} 실행을 입력하고 싶습니다

그것.

창조적 주시기 바랍니다 : 당신이 극단적 인 전문가의 해커에 의존해야합니다 경우에도이 작업을 수행 할 수있는 방법이있는 경우이의 수준으로 전문가의 해커를 설명하기 위해 공유하고 주시기 주시기 바랍니다 다섯 살짜리 아이는 자신의 아이디어를 구현하려고 노력해야합니다.

기존 웹 페이지 또는 RTFM에 대한 링크를 환영합니다.

답변

1

당신은 당신이 뭔가를 포함하는 홈 디렉토리에 .bash_completion 파일을 만들 수 있습니다 bash는 자동 완성이를 포함하려면 compgen -c -X'!*substring*'

로 지정된 문자열의 일치를 생성 할 수 있습니다 함수는 eval 명령에 대한 인수에 <TAB>을 누를 때 실행됩니다.bash에서 첫 번째 명령 검색에 대해 새로운 일치하는 함수를 포함하는 방법을 찾지 못했지만 위의 eval과 같은 특정 명령에 대한 사용자 지정 완료를 추가하는 방법에 대한 설명서 만 찾았습니다.

하지만이 기능이 얼마나 유용한 지 회의적입니다 ... 목록에서 원하는 일치 항목을 쉽게 선택할 수있는 방법은 없습니다.

1

아마도 사용자 정의 bash_completion 설정으로 원하는 것을 얻을 수는 있지만, 나는 당신을 위해 일하지 않을 것입니다. :-)

내가 무슨 말하는지 모르시는 분은 herehere을 참조하십시오. 그런데, 나는 내가 좋아하는 것

이 느리게 단지 특정 별칭 내가 찾는 장비가 표시 될 때까지 반복 는 {{TAB}}에 다음 {눌러 키를 누릅니다 "홈"를 입력 한 매우 성가신 찾을 것 {ENTER}}에서 으로 실행하십시오. 내가 생각

는 "완료"(당신은 DOS/Windows 환경을 위해 오는?)

+0

EMACS 고 드 름을 확인하십시오. – dreftymac

2

당신이 정말로 bash의 탭 동작을 변경하려는 경우의 M의 $ 스타일입니다

# ~/.inputrc 
# The default binding for [Tab] is ``complete'', which is what we're used to. 
# ``menu-complete'' gives you irssi-like behavior: cycle through completions. 
"\t": menu-complete 

The GNU Readline Library # Letting Readline Type For You에 설명되어 있습니다.

_comp() { 
    local cur 

    cur=${COMP_WORDS[$COMP_CWORD]} 

    COMPREPLY=($(compgen -c -X '!*'$cur'*')) 

} 
complete -F _comp $nospace eval 

이 일치 :