Why do vim and other text editors (tried nano, and emacs) display the backspace without interpreting it by removing the character before it but less does?
Por que eles deveriam? FWIW, nem os navegadores: -)
$ printf "<html>foo\bbar</html>" > /tmp/foo.html
$ firefox /tmp/foo.html
Os editores também devem interpretar outro tipo de marcação, como o mini-Markdown *foo*
ou **bar**
?
Observe que o retrocesso não é apenas "excluir" o caractere anterior em less
, mas é usado como um caractere de formatação bruto. x\bx
imprimirá x
em negrito e x\b_
irá sublinhar (o que em alguns terminais fará com que seja impresso com uma cor diferente):
printf "H\b_e\b_r\b_e\b_'s\bs Johnny!" | less
Why don't the editors print a character for \n instead of going down for a new line?
Eles poderiam fazer isso. Por exemplo, se você usar :set list
em vi
, as novas linhas serão impressas como $
e as guias como ^I
.
What is the difference between printing a backspace and hitting backspace on the keyboard (a character gets actually deleted on hitting backspace on the keyboard)?
Em um terminal do tipo físico (impressão em papel), a impressão de um backspace fazia com que o carro fosse para uma posição à esquerda, para que um caractere subseqüente sobrescrevesse , não excluísse o que já estava o papel. No vidro (CRT) e nos terminais emulados, mover uma posição para a esquerda e escrever um caractere cria um efeito de 'apagar' porque a sobrescrita de um caractere o substitui completamente. Mas o \b
por si só não remove nada: printf "123\b\n"
imprimirá 123
não 12
.
O último é uma função do driver tty, que interpreta alguns caracteres de entrada como comandos de edição / controle ( erase
, werase
, intr
, kill
- veja o stty(1)
ou termios(3)
manpages para a lista completa).
E a tecla backspace não sempre gera um caractere \b
/ ^H
(BS). A maior parte do tempo é \x7f
/ ^?
(DEL).
Mas você pode configurá-lo para o que quiser:
$ stty erase @
Agora, pressionar @
apagará o caractere anterior, como no unix v7.