예 : “foobar”메시지를 F12누를 echo "foobar"
때마다 F12화면에 인쇄되도록 키를 명령 에 바인딩하고 싶습니다 . 이상적으로는 내장 기능뿐만 아니라 임의의 쉘 명령 일 수 있습니다. 이것에 대해 어떻게 갑니까?
답변
당신은 눌러 키에 의해 방출되는 문자 순서를 확인할 수 있습니다 Ctrl– v명령 줄에서, 당신이 관심있는 키를 눌러 내 시스템에. F12, 내가 얻을 ^[[24~
. 을 ^[
나타냅니다 Esc. 다른 유형의 터미널 또는 터미널 에뮬레이터는 동일한 키에 대해 다른 코드를 내보낼 수 있습니다.
Bash 프롬프트에서 다음과 같은 명령을 입력하여 키 매크로를 활성화하여 사용해 볼 수 있습니다.
bind '"\e[24~":"foobar"'
이제를 누르면 F12추가 편집을 위해 명령 줄에 “foobar”가 표시됩니다. 키 입력으로 명령을 즉시 입력하려면 새 줄을 추가 할 수 있습니다.
bind '"\e[24~":"pwd\n"'
이제를 누르면를 누르지 F12않아도 현재 디렉토리가 표시됩니다 Enter. 이미 줄에 무언가를 입력했고 자동으로 실행되는 이것을 사용한다면 어떨까요? 지저분해질 수 있습니다. 그러나 매크로의 일부로 줄을 지울 수 있습니다.
bind '"\e[24~":"\C-k \C-upwd\n"'
이 공간은 Ctrl– u에 벨이 울리지 않도록 삭제할 내용이 있는지 확인합니다 .
원하는 방식으로 매크로가 작동하면 ~/.inputrc
파일 에 추가하여 영구적으로 만들 수 있습니다. bind
명령이나 외부 작은 따옴표 세트가 필요하지 않습니다 .
"\e[24~":"\C-k \C-upwd\n"
편집하다:
현재 명령 줄을 방해하지 않고 무언가를 실행할 키 바인딩을 만들 수도 있습니다.
bind -x '"\eW":"who"'
그럼 당신은 예를 들어, 사용자 이름을 필요로하는 명령을 입력하고, 당신은 당신이 누를 수, 로그인 한 사용자의 이름을 알 필요가있는 동안 Alt– Shift– W와의 출력이 who
표시되고 메시지가 다시 발행 될 것입니다 부분 명령은 그대로두고 커서는 줄의 같은 위치에 있습니다.
불행히도 이것은 F12두 개 이상의 문자를 출력하는 것과 같은 키에 대해서는 제대로 작동하지 않습니다 . 어떤 경우에는이 문제를 해결할 수 있습니다.
명령 ( who
이 경우)은 프로그램, 스크립트 또는 함수와 같은 실행 파일 일 수 있습니다.
답변
~/.inputrc
(GNU Readline 라이브러리의 구성 파일) 에서 bash 키 바인딩을 정의 할 수 있습니다 . 구문은
<keysym 또는 키 이름> : 매크로
예를 들면 :
Control-o: "> output"
를 누르면 “> 출력”을 삽입하는 매크로가 생성됩니다. ControlO
"\e[11~": "echo foobar"
를 누를 때 “echo foobar”를 삽입하는 매크로를 생성합니다 F1. 키 심이 무엇인지 잘 모르겠습니다 F11.
편집하다:
.inputrc
\n
줄 바꿈 의 이스케이프 시퀀스를 이해 하므로 다음을 사용할 수 있습니다.
"\e[11~": "echo foobar\n"
명령이 실행 된 후 효과적으로 ‘Enter를 누르십시오’.
답변
이 솔루션은 X11 환경에만 해당되며 bash와는 관련이 없지만 .Xmodmaps에 다음을 추가합니다.
% loadkeys
keycode 88 = F12
string F12 = "foobar"
%
F12를 누르면 “foobar”문자열이 터미널에 전송됩니다.
답변
나는 Ctrl+B
명령 에 묶고 싶었다 . 위의 답변에서 영감을 받아 사용하려고했지만 bind
일련의 비밀 물결 선 ( \e[24~
?)이 Ctrl+B
.
Mac에서 터미널 앱의 설정, 프로파일-> 키보드->로 이동 +
한 다음 원하는 키보드 단축키를 누르면 나타납니다. 나를 위해 Ctrl+B
결과에 \002
있는 내가 성공적으로 명령에 바인딩
bind '"\002":"echo command"'
또한 명령이 프롬프트에 삽입되는 것이 아니라 바로 실행되도록하려면 다음과 같이 명령 끝에 Enter를 추가 할 수 있습니다.
bind '"\002":"echo command\015"'
답변
