Quando pressiono Ctrl-V Ctrl-Jem um shell (sob urxvt
), ele inicia uma nova linha (posiciona o cursor no início de uma nova linha), em vez de imprimir ^J
.
Nele vim
imprime ^@
.
A mesma situação está no console virtual.
Aparentemente algo pré-processa Ctrl-J. O que é e como posso influenciá-lo?
$ 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 que estava configurando tmux
e tal comportamento me fez pensar que bind-key C-j send-keys C-j
não funciona.
Cv no Bash é processado por readline:
Conforme explicado em readline(3):
Você pode usar Cv para inserir outros caracteres, por exemplo, Cv Ci irá inserir tab. Para saber qual letra produz o caractere fornecido, abra
man ascii
:Como você pode ver, J está na mesma linha que a nova linha e I está na mesma linha da guia horizontal.
Você pode verificar-se com outros exemplos como Cv Cg que produzirá sino:
Como disse Arkadiusz Drabczyk,
readline
é responsável pelo manuseio de arquivosC-v
. ParticularmenteC-v C-j
. Ele apenas lida com eles de forma diferente . Supostamente porqueC-j
(Enter
) pode ser representado de forma significativa sem a^*
notação. E a letra nessa notação é obtida por or'ing0x40
para o código do caractere, se você estiver curioso. Ou você pode dizer,0x01
corresponde a^A
,0x02
a^B
, e assim por diante.Quanto a
vim
isso (^@
) também é como ele representa novas linhas . E há algumas menções na documentação:https://github.com/vim/vim/blob/v8.2.4027/runtime/doc/cmdline.txt#L652-L653
https://github.com/vim/vim/blob/v8.2.4027/runtime/doc/pattern.txt#L1273-L1280
Provavelmente tem algo a ver com o armazenamento de bytes nulos como novas linhas na memória.