다른 키 조합으로 트리거되는 여러 탭 완성 루틴을 사용할 수 있습니까?Bash 터미널의 다중 탭 완성 루틴
예를 들어, myprog -help
의 출력을 탭 완성 옵션으로 구문 분석하는 사용자 정의 탭 완성 기능이 있습니다. 에서 탭을 그대로두고 내 맞춤 완성을 과 같은 것으로 바인딩 할 수있는 방법이 있습니까? Shift + ?
다른 키 조합으로 트리거되는 여러 탭 완성 루틴을 사용할 수 있습니까?Bash 터미널의 다중 탭 완성 루틴
예를 들어, myprog -help
의 출력을 탭 완성 옵션으로 구문 분석하는 사용자 정의 탭 완성 기능이 있습니다. 에서 탭을 그대로두고 내 맞춤 완성을 과 같은 것으로 바인딩 할 수있는 방법이 있습니까? Shift + ?
키 바인딩 자체가 작성한 Readline의 일부, 그리고 .bashrc
(등)에 ~/.inputrc
변경 또는 bind
명령을 사용 할 수 있지만 간접적으로, 사용자 정의 함수에 직접을 결합하지 않는다 이러한 함수를 호출 할 수있는 매크로
"\C-xhf": dump-functions # for ~/.inputrc
bind '"\C-xhf":dump-functions' # in .bashrc (etc.)
bind -l
당신에게 당신 수 바인드에 내장 기능을 보여줍니다. 이 방법으로 매크로를 추가 할 수 있습니다. 완료 컨텍스트가 아니더라도 원하는 bash 함수를 실행하여 결과가 명령 줄에 다시 채워지지 않도록 할 수 있습니다. 예 :
"\C-xc": "echo hi\n" # note it's a just macro, not a direct binding.
난 당신이 이미 명령 줄의 왼쪽에서 명령에 대한 complete
내장과 완료를 대체 할 수 있습니다 알고 같은데요. 일반적으로 나는 그냥 그런 식으로 자신의 완료 루틴을 만들고 대신 대체 세트를 호출하는 방법을 사용하여 그들을 사용하는 것이 좋습니다. 예 : 나는 universal-argument
바인딩 실험
_complete_ssh()
{
local ssharg="${COMP_WORDS[COMP_CWORD]}"
local filter=cat
case "$ssharg" in *@*) filter="sed s/^/${ssharg%@*}@/" ;; esac
local host=${ssharg##*@}
COMPREPLY=($(compgen -W "`
sed 's/[, ].*//' ~/.ssh*/known_hosts{,2} | sort | uniq
`" $host | $filter))
return 0
}
complete -F _complete_ssh ssh # for any command starting with "ssh "...
은 (UA 후, "C-XF"기능을 실행하는 접두사 "C-쑤") 매크로를 통해 실행하는 기능에 영향을 줄 수 있는지,하지만 난 할 수 기능이 UA를 검출 할 수 있다는 것을 나타 내기 위해 아무것도 발견하지 못했습니다. bind
에는 이전 명령에 대한 UA의 기능을 되돌릴 수있는 옵션이 있거나 사용자 정의 완성 기 하위 기능이 complete
내부에서 UA를 감지 할 수 있도록 허용하는 $ -s something이 있다고 생각할 수 있습니다. 하지만 readline 소스 코드에서 그 아이디어에 대한 어떤 징조도 보이지 않습니다. 어떤 키 바인딩이 함수 나 매크로를 불러 일으켰는지를 알 수있는 확실한 방법은 없습니다. 두 키 바인딩을 동일한 기본 키 (complete
)로 매핑 한 다음 다시 역 추적하여 어떤 키 바인딩이 트리거되었는지 확인하는 것이 좋습니다.
Shift-Tab은 구속하기가 어려우므로 구식 터미널에서 입력하는 것은 불가능합니다. bash는 X 라이브러리를 사용하지 않으며 Shift 키를 수정 자로 직접 볼 수 없으며, 대신 적용 가능한 개념의 수식어가없는 일부 문자 집합의 터미널 또는 터미널 에뮬레이터에 따라 달라집니다.
나는 당신이 ['bind'] (http://linux.about.com/library/cmd/blcmdl1_bind.htm)를 사용하여 그것을 얻을 수 있다고 생각합니다 ... – anishsane