내 Ubuntu 16.04 시스템의 Bash/Readline 버전이 대괄호 붙여넣기 모드를 지원하는지(지원하지 않음) 여부를 조사하지 않았으므로 호기심에 이 문서에 제공된 다음 명령을 실행했습니다.우분투 답변 물어보기.
bind 'set-enable-bracketed-paste off'
설정이 존재하지 않으면 구문 오류에 대해 불평하거나 아무것도 하지 않고 set-enable-bracketed-paste
싶습니다 . bind
대신 소문자 바인딩을 해제합니다 p
. 즉, 입력할 때 문자가 블랙홀로 사라집니다.
bind
이 명령을 사용하면 첫 번째 공백 문자(문자열에 공백이 있는 경우) 바로 앞의 마지막 하이픈 뒤의 문자가 분리되는 것으로 보입니다 . 예를 들어 다음 명령을 실행했습니다.
이렇게 하면 r
캐릭터 바인딩이 해제됩니다.
bind '__-r anymorecharacters'
이렇게 하면 캐릭터 바인딩이 해제됩니다 2
.
bind 'xxxx-1-2xxx'
문자 앞에 Ctrl-를 입력하여 문자를 입력할 수 있으므로 다시 바인딩할 수 있습니다.V
bind 'r: self-insert'
bind '2: self-insert'
나에게 이것은 예상치 못한 놀라운 행동이며 버그라고 생각합니다. 하지만 저는 Readline에 대해 잘 알지 못하기 때문에 이 동작에 대한 합리적인 설명이 있는지 여기에 물어보고 싶다고 생각했습니다.
답변1
Readline의 구성 파일 파서에는 오류 검사 기능이 일부 부족합니다.
set-enable-bracketed-paste
control-DEL
방식으로 구문 분석하거나 meta-q
구문 분석할 것입니다. Readline은 빼기 기호로 구분된 마지막 부분을 취하여 이를 키 이름으로 이해하려고 시도하고, 나머지 부분을 취하여 수정자 시퀀스로 이해하려고 시도합니다.
키를 식별하는 코드키 이름 테이블에 일치하는 이름이 없으면 기꺼이 첫 번째 문자만 살펴보는 것으로 돌아갑니다. 따라서 키를 paste
나타내는 데 사용됩니다 .p
수정자에 대한 코드 찾기문자열에 다른 비수정자가 있는지 여부는 상관하지 않으며 수정자가 빼기 기호로 끝나는 것을 기대하지 않습니다. 따라서 set-enable-bracketed-
단순히 수식어가 없는 것으로 처리됩니다.
p
이는 키를 "바인딩 해제"하지 않습니다 . 그것에 대한-키를 p
"" 라는 함수에 바인딩합니다 off
. 이를 수행하는 코드off
함수 테이블에 ""라는 함수가 없으면 오류가 발생하지 않습니다.기본 메뉴그런 기능은 없습니다.