Cannot get Vim to remap CTRL+S to `:w`

5

I've been trying to get Vim to remap CTRL+S (or ^S) to :w by editing my .vimrc file, however it doesn't work.

This is my current ~/.vimrc configuration:

nmap <c-s> :w<CR>
imap <c-s> <Esc>:w<CR>
imap <c-s> <Esc><c-s>

I read that CTRL+S can run a command which freezes the terminal, however I don't seem to experience this.

If I do press CTRL+S, nothing happens. If I then do ESC and :q I'm informed that I haven't already saved changes.

:current tells me that user vimrc file: "$HOME/.vimrc".

user183714

Posted 2013-04-28T18:17:43.383

Reputation:

Answers

6

In the whole <C-a> -> <C-z> range, <C-s> and <C-q> are the only two that can't be mapped in CLI Vim because they are intercepted before they reach the editor.

What they are meant to be used for, flow control, is mostly an artefact of the relatively long history of terminals and networked computing and not really relevant today.

The simplest way to get back the full alphabet for your Ctrl mappings is to add this line to your *rc:

stty -ixon

romainl

Posted 2013-04-28T18:17:43.383

Reputation: 19 227

1Thanks- I had that at the very end of my .bashrc moved it to the top and CTRL<S works. – None – 2013-04-28T19:04:15.503

Though there may be applications that require terminal flow control (CTRL-S). Just something to be aware of in case of problems. – suspectus – 2013-04-28T19:14:12.457

I haven't come across any before, hopefully I won't though. – None – 2013-04-28T21:57:12.453