Ctrl-C와 같은 bash 단축키를 변경 하시겠습니까?


21

Kubuntu 10.04를 사용하고 있습니다. bash (터미널)의 표준 단축키 중 일부를 변경하고 싶습니다.

설정하고 싶은 단축키는 다음과 같습니다.

  • Ctrl- C터미널에서 선택한 텍스트를 클립 보드에 복사합니다.

  • Ctrl- V클립 보드에서 터미널로 붙여 넣기

  • Ctrl- Z터미널의 현재 줄에서 편집을 취소합니다.

  • Ctrl- Shift- C(또는 더 나은, Super- C) 명령을 종료합니다.

  • Ctrl- Shift- Z(또는 Super- Z) 배경 명령이어야합니다.

  • Ctrl- Shift- V(또는 Super- V) 문자 그대로 삽입 명령을 할 수 있습니다 (또는 무엇 이건 Ctrl- z전에했던).

어떻게 변경합니까?

BTW, 터미널이 OS X에서 작동하는 방식이 마음에 듭니다. 명령 키를 사용하면 모든 복사 / 붙여 넣기 명령이 매우 일관됩니다 (OS X의 다른 많은 항목과 달리).

추신 : 나는 bash 맨 페이지를 읽었고 도움이되지 않았다. 그것은 나에게 아이디어를 주었지만 위의 조합에 대한 구체적인 예가 필요합니다. 감사.


이러한 "바로 가기"중 일부는 bash에서 "구현"할 수 없지만 터미널 자체 (xterm, gnome-terminal, konsole 등)에 넣어야합니다. 예를 들어 "selected text", "clipboard"
akira

답변:


10

그것들은 bash의 기능이 아니며 터미널 드라이버의 기능입니다. 따라서에 의해 지정됩니다 stty(1).

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

5
확인. 실마리 감사합니다. 지금도 여전히 목표를 달성하고 싶습니다. 그리고 inputrc가 Ctrl-C를 다시 매핑 할 수 있다는 것도 알고 있습니다. 그러나 나는 실제로 어떻게하는지 신경 쓰지 않고 터미널에서 이러한 단축키를 다시 매핑하는 방법을 알고 싶습니다.
Paul

15
여기에 "fish"가 있습니다 : stty intr \ ^ k (종료 명령, 이전에 Ctrl-C는 이제 Ctrl-K가되고 K는 모든 알파 키가 될 수 있습니다) 아무도 "그 물고기를 얻지 못했습니다". 나는 그것을 스스로 찾기 위해 열심히 일했습니다. 잠언으로 설교하면 바보처럼 보입니다.
Paul

Ctrl + Shift + C에 어떻게 다시 매핑 할 수 있습니까?
crypdick

8

이것은 이제 거의 완전히 해결되었습니다. 솔루션의 일부는 MTK358에 의해 http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/ . 그는 복사 및 붙여 넣기 바로 가기 키가 곤솔의 메뉴 설정으로 쉽게 변경할 수 있다는 사실을 지적했습니다. 이것을 본 후에는 터미널로 복사하여 붙여 넣기 위해 Ctrl-C 및 Ctrl-V를 설정하는 데 약 1 분이 걸렸습니다.

솔루션의 다른 부분은 stty 매뉴얼 페이지에서 분명해야했지만 (나에게) 그렇지 않았습니다. 나는 위에 게시 된 것과 같은 다양한 단서를 기반으로 실험을 마쳤습니다.

Ctrl-C를 종료 명령으로 바꾸려는 숫자가 아닌 키를 결정했습니다. ( "k"를 사용했습니다). stty에 shift modifier를 전달하는 방법에 대한 정보를 찾지 못했기 때문에 포기했습니다. 그 결정으로, 명령 행에 다음을 입력하기 만하면됩니다.

stty intr \ ^ k

모든 것이 원하는대로 작동하는지 확인했습니다.

이제 시작 스크립트에서 위의 단일 명령 (stty intr \ ^ k)을 배치해야했습니다. 어느 것이 "적절한"것인지 잘 모르겠습니다. 이 변경 사항을 시스템 전체에 영구적으로 적용하고 싶습니다.

어떤 스크립트에 명령을 넣어야하는지에 대한 제안이 있습니까?

그리고 마지막으로, 설교에 대한 답변은 불필요하고 도움이되지 않습니다.


사용할 "올바른"시작 스크립트가 무엇인지 또는 더 좋은 방법을 결정한 적이 있습니까? 나는이 같은 문제 (원래의 질문)로 고심하고 있습니다. 그러나 'stty intr \ ^ k'바인딩 ctrl-k를 만들 수는 있지만 ctrl-c를 바인딩 해제하지 않으며 'stty intr undef'나 'stty intr = ^-'도 수행하지 않지만 ctrl-c는 여전히 interupt를 보냅니다. . 그리고 'stty -a'는 내가 한 변화를 보여주지 않습니다.
EricS

4

이 중 일부는 일반적인 KDE 키보드 단축키 메커니즘을 사용하여 설정할 수 있습니다. Konsole의 "Settings (설정)"메뉴에서 "Configure Shortcuts (바로 가기 구성)"를 클릭하면 KDE에서 처리하는 기능의 키 바인딩을 변경하는 데 사용할 수있는 대화 상자가 나타납니다. 그러면 Ctrl + C를 복사하여 다시 붙여넣고 Ctrl + V를 붙여 넣어 다시 매핑 할 수 있습니다. 그러나 일단 그렇게하면 해당 키 시퀀스가 ​​더 이상 터미널로 전달되지 않으므로 사용할 수 없습니다. 예를 들어 Ctrl + C를 누르면 프로그램이 중단됩니다.

다른 기능은 readline라이브러리에 의해 제어되며 파일을 편집하여 구성 할 수 있습니다 ~/.inputrc. 현재 행에서 편집 한 내용을 Ctrl + Z로 되돌리려면 추가하고 싶을 것입니다

C-z: revert-line

그러나 해당 키 시퀀스는 이미 터미널에 의해 갇혀있을 수 있으므로 stty작동하기 전에 바인딩 해제 에 사용해야 할 수도 있습니다 . 우선 검토 ^Z의 출력 stty -a(같은 이그나시오의 대답에 표시)하고, 예를 들어, 그것은에 표시하는 경우 susp = ^Z, 실행

stty susp ^-

해당 키 매핑을 바인딩 해제합니다.

sttyIgnacio가 말한 것처럼 다른 변경 사항 은 터미널 기능이므로 완료해야하지만 정확히 어떻게 모르겠습니다. 문제는 터미널이 Shift를 인식하는지 또는 인식하는 경우 해당 정보를 전달하는 방법을 모른다는 것 stty입니다.


3

Bash는 명령 행에서 emacs또는 vi모드를 사용 합니다. "선택"또는 "클립 보드"라는 개념이 없습니다. "kill buffer"및 "point", "mark", "word", "line", "kill"및 "yank"등과 같은 것을 사용합니다.

GUI 스타일 기능을 사용하려고 시도하는 것은 기껏해야 실망스럽고 완전히 작동하지 않습니다. 당신의 기능을 결합하려고 할 것 stty, readline그리고 (아마도 터미널 Terminal.app당신을 위해). 당신은 다음과 같은 기능을 매핑해야합니다 intr, susp, lnext당신은 여전히 자신의 기능을 사용할 수 있도록, 등.

나는 그러한 급진적 인 수정을 강력히 권장합니다. 원하는 것을 수행하도록 설계되지 않았습니다.

로마에서는...


OS X처럼 작동하는 시스템의 경우 Dave 인 경우 OS X를 사용하는 것이 좋습니다. Dennis가 암시 한 것처럼 작동하게해도 자신의 컴퓨터에서 다른 사람으로 로그인하면 꽤 혼란 스러울 것입니다.
msw

다른 명령을 보증 할 수는 없지만 복사하여 붙여 넣기는 명령 창에서 완벽하게 이해되며 매우 편리합니다. 나는 끊임없이 다른 창과 콘솔 사이에 복사하여 붙여 넣기를 사용하여 오랫동안 사용했습니다. Shift-Ctrl-C 및 Shift-Ctrl-V는 Konsole에서 즉시 작동합니다. 그리고 나는 수년간 매일 이것을 해왔지만 Konsole에서 Ctrl-c를 잊어 버렸습니다. 개인적으로 나는 "Rom in when"속담 적용을 중단하고 존재하는 거의 모든 다른 응용 프로그램처럼 작동하도록 다시 매핑 할 준비가되었습니다.
EricS

1

우분투를 실행하고 복사 단축키를 기본 Ctrl+ Shift+ C에서보다 평범하고 간단한 Ctrl+로 변경했습니다 C. 그러나 이것은 인터럽트 명령 ^ C 를 보낼 수없는 문제가 발생했습니다 .

@Paul 답변 덕분에 명령 실행을 발견했습니다.

tty intr \^k

Ctrl+를 사용하여 인터럽트 명령을 보낼 수 K있습니다. 그러나이 명령은 번거로운 터미널을 열 때마다 실행해야했습니다 (자신이 언급 한 것처럼).

약간의 추가 연구 (googling 😂)로 터미널을 열 때마다 (어쨌든 우분투에서) 명령을 실행하는 방법을 찾았습니다 .

따라서 최종적으로 다음 명령을 한 번 실행하면 (우분투 18.04 이상에서 가능할 때마다) 예상되는 동작이 매번 나타납니다.

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc

마지막으로 K버튼을 사용해서는 안된다는 것을 언급 할 가치가 있습니다 . 위의 모든 명령에서 k 문자를 선택한 문자 키로 바꿀 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.