데비안 8.3 설치
stty werase '^H'
또는 Arch Linux 2/2016에서
stty werase '^?'
in .bashrc
(예) make Ctrl- Backspace터미널의 마지막 단어를 제거합니다. 그러나 이는 여전히 최신 GUI 애플리케이션(예: Firefox)에서와 동일하게 작동하지 않습니다.공백- 공백으로 구분된 마지막 단어 대신 구분된 단어또는이런 캐릭터 . : , ; " ' & / ( )
.
터미널에서 최신 GUI 애플리케이션처럼 동작하도록 Ctrl만드는 것이 가능합니까 ? 그리고 커서 앞에 있는 단어를 삭제할 Backspace수 있는 방법이 있나요 ?CtrlDelete
답변1
여기에는 커널에서 제공하는 기본 줄 편집기(표준 모드 tty 줄 편집기)와 bash 줄 편집기(readline 라이브러리를 통해 구현됨)라는 두 가지 줄 편집기가 있습니다. 두 명령 모두 이전 단어를 지우는 명령이 있으며 Ctrl기본적으로 +에 바인딩되어 있습니다. 이 키는 W표준 모드 tty 라인 편집기를 통해 구성할 수 있습니다 . stty werase
bash는 자체 구성에서 재정의되지 않는 한 tty 설정에서 찾은 키 바인딩을 에뮬레이트합니다.
werase
tty 줄 편집기에서 작업을 구성할 수 없습니다. 항상 (ASCII) 공백으로 구분된 단어를 제거합니다. tty 줄 편집기와의 상호 작용은 거의 없습니다. 이는 cat
인수 없이 입력할 때 얻을 수 있는 것입니다. 멋진 키 바인딩을 원할 경우 다음과 같은 도구에서 명령을 실행할 수 있습니다.되감기readline을 사용합니다.
Bash는 두 가지를 제공합니다이전 단어를 삭제하는 명령: unix-word-rubout
( Ctrl+ w또는 stty werase
) 및 backward-kill-word
( M-DEL
, 즉 Esc Backspace) 여기서현재 로케일에서 단어를 일련의 영숫자 문자로 처리합니다._
. Ctrl+가 이전 영숫자 문자 시퀀스를 제거하도록 하려면 Backspace설정하지 말고 stty werase
다음 줄을 에 입력하세요 .inputrc
.
"\C-h": backward-kill-word
이는 터미널이 Ctrl+Ctrl+H 문자를 보낸다고 가정합니다 Backspace. 안타깝게도 이는 표준 바인딩이 없는 키 중 하나입니다( Backspace구체적으로는엉망이다역사적인 이유로).
기본적으로 ( + ) kill-word
에 바인딩된 대칭 명령도 있습니다 . + 에 바인딩하려면 먼저 터미널에서 보낸 이스케이프 시퀀스를 파악한 다음 + 를 입력 하고 + 를 입력하면 다음과 같은 내용이 삽입됩니다. 여기서 첫 번째 문자 는 이스케이프 문자의 시각적 표현입니다. 그러면 바인딩은M-d
AltDCtrlDelete.inputrc
CtrlVCtrlDelete^[[3;5~
^[
"\e[3;5~": kill-word
단어 정의 중 어느 쪽도 만족스럽지 않으면 bash에서 자신만의 정의를 제공할 수 있습니다.Bash에서 Emacs 스타일 키 바인딩의 혼란스러운 동작
답변2
노력하다
alt+backspace
기본 OS에서는 원하는 방식으로 작동합니다( ctrl+ 와 동일 backspace).
답변3
요리 모드 터미널 처리에서 WERASE 문자의 동작은 다음과 같습니다.하드코딩된, 적어도 Linux에서는:
if (kill_type == WERASE) {
/* Equivalent to BSD's ALTWERASE. */
if (isalnum(c) || c == '_')
seen_alnums++;
else if (seen_alnums)
break;
}
따라서 단어는 문자, 숫자, 밑줄입니다. 이 상황은 자체 쿠킹 모드 처리를 수행하는 애플리케이션이 실행되고 있지 않을 때 Linux 터미널에서 항상 발생합니다.
readline 버전(bash 등에서 사용)은 커널 버전과 조금 다른 것 같지만,하드코딩된:
단어는 문자와 숫자로 구성됩니다.
bash
하지만 이것은 내가 실제로 하고 있는 일, foo+bar^W
즉 단순히 삭제하는 것이 아니라 모든 것을 삭제하는 것과 일치 하지 않는 것 같습니다 bar
. 그리고 더 많은 관련 정보여기.
답변4
당신은 그것을 사용할 수 있습니다자동 키터미널 애플리케이션과 일치하는 "창 필터"를 사용하여 Ctrl+를 캡처 Backspace하고 그에 대한 작업을 수행합니다.
예를 들어 keyboard.send_keys("<ctrl>+w")
대신을 실행합니다.