Me deparei com uma frase no vimdoc:
Note: CTRL-S does not work on all terminals and might block
further input, use CTRL-Q to get going again.
e essa chave realmente pendura minha vim. Eu estava pensando que era culpa do vim, pois não havia nenhum problema ao usar o C-s
/ C-x C-s
no emacs nox. No entanto, agora mesmo quando eu estava lendo uma página de manual e pressionei o botão Ctrl-s
, ele também trava man
(estou definindo less
como PAGER).
Então, alguém pode me dizer o que está acontecendo?
Os emuladores de terminal são xterm
e lxterminal
, e tty
também têm esse problema. E um Ctrl+ qcoloca o processo novamente em todos os casos.
C-q
reativar a rolagem, certo?ctrl-s
que o processo travou.C-s
eC-q
os velhos tempos "alternavam com trava de rolagem". você pode desativar essa funcionalidade através da adiçãostty ixany
estty ixoff -ixon
à sua.bashrc
Respostas:
Esse recurso é chamado de Controle de fluxo de software (controle de fluxo XON / XOFF)
Quando uma extremidade do link de dados (neste caso, o emulador de terminal) não pode receber mais dados (porque o buffer está cheio ou quase cheio ou o usuário envia
C-s
), ele envia um "XOFF" para informar o final do envio. link de dados para pausar até que o sinal "XON" seja recebido.O que está acontecendo nos bastidores é que o "XOFF" está dizendo ao driver TTY no kernel para colocar o processo que está enviando dados em um estado de suspensão (como pausar um filme) até que o driver TTY receba um "XON" para informar ao kernel para retomar o processo como se nunca tivesse sido parado.
C-s
ativa o bloqueio de rolagem do terminal. O que impede o seu terminal de rolar (enviando um sinal "XOFF" para pausar a saída do software).C-q
desativa o bloqueio de rolagem. Reiniciando a rolagem do terminal (Enviando um sinal "XON" para retomar a saída do software).Esse recurso é herdado (quando os terminais eram muito lentos e não permitiam rolagem) e é ativado por padrão.
Para desativar esse recurso é necessário o seguinte em qualquer
~/.bash_profile
ou~/.bashrc
:fonte
No final do meu
.bashrc
script, eu adicionei:fonte