
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
該当すると言うこともできます。^A
0x02
^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バイトをメモリに改行として格納することに関連している可能性があります。