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

bashgnome-terminalvim

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".

Best Answer

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
Related Question