이에 대한 트릭은 당신의 키를 리 바인드 함수를 호출하는 것입니다. 내 예제에서 나는 텍스트를 삽입 C-B를 사용하는 것 대신 C-X의 메뉴 완성 전화. 내 예에서는 키를 희생해야합니다. C-t
In.bashrc에, 또는 bash는 파일이 어떻게 작동
set_Cb_to_insert_text() {
bind '"\C-m": accept-line'
bind '"\C-b":"ls \C-t1"'
bind -x '"\C-t1":set_Cb_to_complete'
}
set_Cb_to_complete() {
bind '"\C-m":"\C-t2\C-t3"'
bind '"\C-b": menu-complete'
bind '"\C-t2": accept-line'
bind -x '"\C-t3":set_Cb_to_insert_text'
}
set_Cb_to_insert_text
를 공급한다 : bind
를 사용하면 세 가지 중 하나를 수행 키를 결합 할 수
,하지만 그들 중 어떤 조합 :
- readline 명령을 실행하십시오 :
bind '"key": command'
- 일련의 키 입력을 실행하십시오 :
bind '"key":"keystrokes"'
- 쉘 명령을 실행하십시오 :당신이이 세 가지를 결합하려는 경우
그래서, 당신이 내 예제에서 (키 입력의 개별 조합에 각각 결합해야합니다 코네티컷 {1, 2, 3 })이 모든 키 입력을 실행하기 위해 키를 바인드합니다. 예에서
:
C-B 제 인서트 차례로 menu-complete
에 C-B을 바인드 set_Cb_to_complete
실행 ls
및 "프레스"C-t1,. 도에를 입력 재설정 set_Cb_to_insert_text
함수를 호출하여, ls
을 삽입의 Cb을 라인을 그대로 사용하고 를 재설정 : 그것은 또한 가 CM, 캐리지 리턴, 또는 지금이 일을해야하기 때문에,를 입력 리 바인드 그것은 정상적으로 사용됩니다.
내가 코네티컷 당신이 코네티컷 누르면, readline에 당신이 1, 2, 또는 바운드 키 중 하나를 누르려고하는 경우에보고 기다릴 것입니다, "희생"할 수 있다고 말했다 이유 시퀀스, 어떤 행동을 취하기 전에. 그러나 처음에 C-t을이 용도로 사용하면 모든 읽기 라인 속임수를 처리하기 위해 많은 양의 키 입력을위한 초기 키로 사용할 수 있습니다.
충고 :이 글을 쓰고 테스트하는 동안 갑자기 뭔가 잘못된 장소에서 체인이 끊어 지거나 명령을 실행하지 않고 터미널에 걸렸으므로 accept-line
에 대체 키를 바인딩하십시오.
아이디어, 예제 및 자세한 대답을 주셔서 대단히 감사합니다. (예,하지만 당신은 bash + readline 프레임 워크와 그 한계 내에서 작업했습니다.) 내 게시물 이후 1 년 동안 나는 막연하게 내가 큰 그림에서 무엇을하려했는지 기억할 수 있습니다 ... 그래서 방금 당신의 예제가 작동하지만 이전에 성취하려고했던 것을 재현하는 데 더 많은 시간을 투자 할 것입니다 - 고마워요! – nhed