NBSP를 일반 공간으로 자동 변환하도록 bash / readline을 구성 할 수 있습니까?


10

AltGr+ Space를 비 분리 공간 (NBSP, U + 00A0)에 매핑하는 핀란드어 키보드 레이아웃을 사용하고 있습니다 . 나는 이것에 일반적으로 만족하지만 bash 명령 줄을 사용하는 동안 파이프 " |"기호 ( 핀란드어 키보드 레이아웃 으로 AltGr+ <로 쓰여진) 뒤에 일반 공간 대신 ​​NBSP를 실수로 쓰는 경우가 종종 있습니다. AltGr파이프를 입력하는 동안 잡고 공간을 확보하기 전에 파이프를 해제해야하기 때문에 발생하는 것 같습니다 . 그리고 출시에 대한 타이밍이 좋지 AltGr않으면 명령 줄에 보이지 않는 오타와 같은 오류 메시지가 나타납니다.

 grep: command not found

어느 것이

grep: command not found

이 문제는 처음에는 눈에 띄지 않습니다.

NBSP비활성화 할 수는 있지만 파이프 문자 다음에 만 비활성화하거나 AltGr+ Space를 사용하여 규칙적인 공간을 생성하는 것이 readline좋습니다. bash의 소스 코드readline 또는 터미널 에뮬레이터 ( gnome-terminal) 를 수정하지 않고이 작업을 수행하는 간단한 방법이 있습니까?

또 다른 좋은 해결책은 명령 줄에 NBSP가 표시되도록 구성하는 것입니다 (예 : 렌더링 전용 으로 다른 문자 (예 : U + 2423 ) 로 바 replaced ).


@dessert는 현상금이 필요하지 않습니다. 방금 문제를 겪고 그것에 대해 질문했습니다. 나중에 Google 검색을 통해 아래의 답변을 파악하기에 충분한 구성을 찾았습니다. 나는 모든 경우에 캐릭터를 비활성화하는 대신 NBSP를 보이게 만드는 답을 찾고 있습니다. 데이터 문자열에 NBSP가있는 경우 모든 터미널 출력이 엉망이되지 않도록 readline 수준에서 NBSP를 표시하고 싶다고 생각합니다.
Mikko Rantalainen 2016 년

@MikkoRantalainen 당신은 여전히 ​​더 명확하지 않은 것을 설명 할 수 있습니까? 캐릭터를 매핑하는 방법을 찾았으므로 왜 " ":␣충분하지 않습니까? 그 밖에 무엇이 필요합니까?
terdon 2018 년

@dessert 명령 줄에 NBSP를 작성하고 얻을 수있는 기능을 원 echo a␣b하지만 결과 출력 줄에는 출력 echo a b에 실제 NBSP가 있습니다. 따라서 나는 그것이 읽기 라인 레벨에서 수행되어야한다고 생각합니다 (즉, 명령 줄 편집기는 항상 보이는 문자를 표시하지만 터미널 에뮬레이터는 편집기 디스플레이와 출력 디스플레이의 차이점을 알 수 없으므로 터미널 에뮬레이터는 렌더링을 시각적으로 대체 할 수 없습니다) ).
Mikko Rantalainen 2018 년

1
readline 수준에서 해결하는 것은 실제로 좋지만 터미널의 vim / emacs / etc에서 쉘 스크립트를 작성하는 동안 동일한 문제가 발생할 수 있습니다. 단일 NBSP 문자를 포함하여 문자열 일치를 강조 표시하기위한 gnome-terminal에 대한 실용 개념 증명 패치는 bugzilla.gnome.org/show_bug.cgi?id=788673 을 참조하십시오 . (예, 당신이 소스 코드를 수정하고 싶지 않다는 것을 알고 있습니다…)
egmont

1
또 다른 방법은 일부 fontconfig 구성과 함께 NBSP의 글리프가 비어 있지 않은 특수 글꼴을 통해 글꼴 수준에서이를 해결하는 것입니다. 이것은 터미널뿐만 아니라 그래픽 편집기에서도 작동합니다. 또 다른 방법은 키보드 공간을 수정하여 규칙적인 공간을 방출하고 다른 방법을 사용하여 필요한 경우 NBSP를 입력하는 것입니다.
egmont

답변:


9

이것은 readline두 가지 방법으로 레벨에서 수행 할 수 있습니다 .

방법 1

다음에 .inputrc대한 구성 파일을 넣습니다 readline.

# include default system config because ~/.inputrc overrides system config
$include /etc/inputrc
# map NBSP to regular space (left part has NBSP in quotes, right part has space)
" ":" "

markdown이 위의 내용을 어기면 주석에 설명 된대로 콜론 왼쪽에 NBSP를 따옴표로 묶어야합니다. 이것은 입력 스트림에서 NBSP 발생을 일정한 공간으로 맵핑합니다.

방법 2

다음을 입력하십시오 .inputrc.

# include default system config because ~/.inputrc overrides system config
$include /etc/inputrc
# map "pipe + NBSP" to "pipe + regular space" (left part has NBSP in quotes)
"| ":"| "
set keyseq-timeout 250

아이디어는 키 파이프 {pipe 다음에 NBSP}를 {pipe 뒤에 공백}에 맵핑하는 것입니다. 250ms 이내에 시퀀스를 입력하면 작동합니다 (위에서 구성 가능). 그러나 시간 초과가 사라질 때까지 파이프 기호 만 입력해도 아무 것도 출력되지 않습니다. 시퀀스를 너무 느리게 입력하면 수정 사항이 적용되지 않습니다. 또한 시간 초과는 전역이므로 다른 시퀀스를 사용하려면 가장 긴 시퀀스를 입력 할 수있을 정도로 시간 초과를 설정해야합니다. (리드 라인 라이브러리는 문자를 입력 할 수있을만큼 영리하지 않으며 나중에 문자 순서가 구성과 일치 한 후 이미 보이는 문자를 대체합니다.)


0

이 문제를 다루는 훌륭한 기사가 있습니다.

grep오류 메시지와 관련된 주요 문제를 해결하고 exec명령을 사용하여 NBSP를 더 눈에 띄는 것으로 변경 하려고했습니다 . 그래도 아직 구문이 다운되지 않았습니다.

exec 2> >(tr $'\xa0' $'\x43' >&2) 

아이디어는이 명령을 사용 ~/.bashrc하여 gnome-terminal열 때 자동으로로드되도록하는 것 입니다. 하지만 내가 말했듯이 아직 작동하지 않습니다 ...


1
오류 메시지 만 처리합니다. 명령 줄을 편집하는 동안 문제를 잡는 것을 선호합니다. 왜냐하면 같은 것을 작성하고 perl -i -npe 's/MARKER/4 KB/'실수로 4and 사이에 NBSP를 넣습니다 K. 문제가 파일에 저장되지만 오류가 발생하지 않으며 작성한 명령 줄이 완벽하게 보입니다.
Mikko Rantalainen 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.