Ctrl-J의 특수 처리

Ctrl-J의 특수 처리

Ctrl-V Ctrl-J셸( 아래)을 누르면 인쇄 urxvt대신 새 줄이 시작됩니다(새 줄의 시작 부분에 커서 위치 지정) ^J.

내부에 vim인쇄되어 있습니다 ^@.

가상 콘솔에서도 같은 일이 발생합니다.

분명히 약간의 전처리가 있습니다 Ctrl-J. 그것은 무엇입니까? 어떻게 영향을 미칠 수 있나요?

$ stty -a
speed 38400 baud; rows 26; columns 101; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar 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 -flusho -extproc

$ echo $TERM
rxvt-unicode-256color

$ urxvt --help |&  head -1
rxvt-unicode (urxvt) v9.26 - released: 2021-05-14

UPD나는 이것을 구성하고 있는데 이 동작으로 인해 이것이 작동하지 않을 것이라고 tmux생각하게 됩니다 .bind-key C-j send-keys C-j

답변1

Bash의 cv는 readline을 통해 처리됩니다.

$ bind -p | grep '"\\C-v":'
"\C-v": quoted-insert

readline(3)에 설명된 대로:

   quoted-insert (C-q, C-v)
          Add the next character that you type to the line verbatim.  This
          is how to insert characters like C-q, for example.

Cv를 사용하여 다른 문자를 삽입할 수 있습니다. 예를 들어 Cv Ci는 탭 문자를 삽입합니다. 주어진 문자를 생성하는 문자를 확인하려면 다음을 수행하십시오 man ascii.

       Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
       ────────────────────────────────────────────────────────────────────────
       000   0     00    NUL '\0' (null character)   100   64    40    @
       001   1     01    SOH (start of heading)      101   65    41    A
       002   2     02    STX (start of text)         102   66    42    B
       003   3     03    ETX (end of text)           103   67    43    C
       004   4     04    EOT (end of transmission)   104   68    44    D
       005   5     05    ENQ (enquiry)               105   69    45    E
       006   6     06    ACK (acknowledge)           106   70    46    F
       007   7     07    BEL '\a' (bell)             107   71    47    G
       010   8     08    BS  '\b' (backspace)        110   72    48    H
       011   9     09    HT  '\t' (horizontal tab)   111   73    49    I
       012   10    0A    LF  '\n' (new line)         112   74    4A    J
       013   11    0B    VT  '\v' (vertical tab)     113   75    4B    K
       014   12    0C    FF  '\f' (form feed)        114   76    4C    L
       015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M

보시다시피 J는 새 줄과 같은 줄에 있고 I는 가로 탭과 같은 줄에 있습니다.

벨소리를 생성하는 Cv Cg와 같은 다른 예를 사용하여 자신을 확인할 수 있습니다.

$ printf ^G| hexdump -C
00000000  07                                                |.|
00000001

답변2

Arkadiusz Drabczyk 이 말했듯 readline이, 잘 처리하세요 C-v. C-v C-j그건 그저핸들그들을다르게. 이는 C-j( Enter)가 기호 없이도 의미 있게 표현될 수 있기 때문이라고 합니다 ^*. 이 기호의 문자는 다음과 같이 얻습니다.또는'ing0x40궁금하신 분들은 문자코드를 보시면 됩니다. 또는 , 에 0x01해당한다고 말할 수도 있습니다 .^A0x02^B

vim( ^@) 의 경우도 마찬가지이다.개행 문자를 나타냅니다.. 문서에는 몇 가지 언급이 있습니다.

<NL>와 같은 방법으로 명령을 분리 할 수도 있습니다 '|'. 삽입하려면 가 <NL>표시 됩니다.CTRL-V CTRL-J"^@"

https://github.com/vim/vim/blob/v8.2.4027/runtime/doc/cmdline.txt#L652-L653

Nul의 경우 NL
기술적 세부사항: <Nul>파일의 문자는 <NL>메모리에 저장됩니다. 디스플레이에는 로 나타납니다 "^@". 파일을 읽고 쓰는 동안 번역이 이루어집니다. 검색 패턴과 일치시키려면 또는 를 <Nul>입력하면 됩니다 . 이것이 바로 당신이 기대하는 것일 수도 있습니다. 내부적으로 이 문자는 검색 패턴에서 a로 대체됩니다. 특이하게도 a를 입력하면 a도 삽입되므로 해당 파일에서도 a가 검색됩니다.CTRL-@"CTRL-V 000"<NL>CTRL-V CTRL-J<NL><Nul>

https://github.com/vim/vim/blob/v8.2.4027/runtime/doc/pattern.txt#L1273-L1280

아마도 null 바이트를 메모리에 개행으로 저장하는 것과 관련이 있을 수 있습니다.

관련 정보