Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I came across a sentence in vimdoc:

Note: CTRL-S does not work on all terminals and might block
                further input, use CTRL-Q to get going again.

and this key indeed hangs my vim. I was thinking that it was the fault of vim, since there was no problem when I use C-s/C-x C-s in emacs nox. However just now when I was reading a manpage and pressed the Ctrl-s, it hangs man as well(I am setting less as the PAGER).

So can someone tell me what's happening?

The terminal emulators are xterm and lxterminal, and tty also has this problem. And a Ctrl+q puts the process right again in all the cases.

share|improve this question
    
This might be a stupid question but you didn't mention what you have tried in your question. You tried C-q to re-enable scrolling, right? –  h3rrmiller Apr 11 '13 at 15:40
    
@h3rrmiller yeah, that's right. But I just would like to know why ctrl-s cause the process to hang. –  Hongxu Chen Apr 11 '13 at 15:41
    
before there were keyboards with the scroll lock key C-s and C-q were the old days "scroll lock toggle". you can disable this functionality by adding stty ixany and stty ixoff -ixon to your .bashrc –  h3rrmiller Apr 11 '13 at 15:42
    
This is a nowadays stupid historical setting in terminal emulators; see this related question for how to fix your terminal. –  Ingo Karkat Apr 11 '13 at 15:45
1  
@IngoKarkat I wouldn't say it's stupid... I still use it from time to time –  h3rrmiller Apr 11 '13 at 15:57

4 Answers 4

up vote 16 down vote accepted

This feature is called Software Flow Control (XON/XOFF flow control)

When one end of the data link (in this case the terminal emulator) can't receive any more data (because the buffer is full or nearing full or the user sends C-s) it will send an "XOFF" to tell the sending end of the data link to pause until the "XON" signal is received.

What is happening under the hood is the "XOFF" is telling the TTY driver in the kernel to put the process that is sending data into a sleep state (like pausing a movie) until the TTY driver is sent an "XON" to tell the kernel to resume the process as if it were never stopped in the first place.

C-s enables terminal scroll lock. Which prevents your terminal from scrolling (By sending an "XOFF" signal to pause the output of the software).

C-q disables the scroll lock. Resuming terminal scrolling (By sending an "XON" signal to resume the output of the software).

This feature is legacy (back from the 80's when terminals were very slow and did not allow scrolling) and is enabled by default.

To disable this feature you need the following in either ~/.bash_profile or ~/.bashrc:

stty -ixon
share|improve this answer
    
Actually I think it goes at last as far back as the 70's, if not the 60's. –  Keith Apr 11 '13 at 18:17
    
I'm pretty sure that's when Hardware Flow Control was introduced, not Software Flow Control. I could be wrong. I've only found a few documents that talk about their conception/implementation. –  h3rrmiller Apr 11 '13 at 18:28

CTRL-S and CTRL-Q are flow control characters for the tty. CTRL-S pauses output (like if you have a "tail -f" on a log file that's constantly printing new lines (but don't want to stop the tail) you can pause with CTRL-S and go back to "live" with CTRL-Q.

In certain versions of vim CTRL-Q is mapped as an alternative to CTRL-V. To my knowledge CTRL-S doesn't do anything. End result in your cases means CTRL-S does as normal but CTRL-Q gets trapped by vim and doesn't make it to VI. I would suggest you either map CTRL-S in your VIM or stop using that key combination.

share|improve this answer

If you really want to know why, and how, it does so, you have to read (really, it's a great read! But quite complex if you are not a programmer) this page : The TTY Demystified

share|improve this answer

We're looking for long answers that provide some explanation and context. Don't just give a one-line answer; explain why your answer is right, ideally with citations. Answers that don't include explanations may be removed.

1  
Interesting, but if that link ever goes down this answer is useless. Can you summarize the important parts here? –  Michael Mrozek Apr 11 '13 at 17:06
    
@MichaelMrozek: I'm afraid I would make it less true by summarizing, and if I say too much it would become a copy. I prefer to refer to the page, and have its author take the credit for it (and let him explain it much better than I would be able to) –  Olivier Dulac Apr 11 '13 at 22:42
    
@MichaelMrozek: and the InternetWaybackMachine is there for disappearing links (the page is quite easily backed up by it, being a simple html page) –  Olivier Dulac Apr 11 '13 at 22:43

At the end of my .bashrc script I have added:

#so as not to be disturbed by Ctrl-S ctrl-Q in terminals:
stty -ixon
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.