created July 30, 2002 · complexity basic · author Thomas R. Kimpton · version 5.7
I wanted to have a single key stroke that would save existing files, or call the file browser.
Here's a key map for Ctrl-S to accomplish that (place in vimrc file):
" If the current buffer has never been saved, it will have no name,
" call the file browser to save it, otherwise just save it.
nnoremap <silent> <C-S> :if expand("%") == ""<CR>browse confirm w<CR>else<CR>confirm w<CR>endif<CR>
Note that in terminal you must somehow disable interpreting <C-s> by the terminal itself. You may try to use an alias for this:
# zsh
alias vim="stty stop '' -ixoff ; vim"
# `Frozing' tty, so after any command terminal settings will be restored
ttyctl -f
# bash
# No ttyctl, so we need to save and then restore terminal settings
vim()
{
local STTYOPTS="$(stty --save)"
stty stop '' -ixoff
command vim "$@"
stty "$STTYOPTS"
}
Comments
Recommend an imap for the same functionality so one can hit ctrl-s without having to make sure one isn't in insert mode:
:imap <c-s> <Esc><c-s>
If one prefers to return to insert mode after the save, the following mapping may be used instead:
:imap <c-s> <c-o><c-s>
Has the nice advantage of allowing one to save in the middle of typing. (I actually have two different keys mapped, one for each of the two above behaviours.)
I use:
imap <c-s> <c-o><c-s><CR>
So that the confirmation doesn't hold you up.
mswin.vim (included with GVim 6.2 for windows) defines:
" Use CTRL-S for saving, also in Insert mode noremap <C-S> :update<CR> vnoremap <C-S> <C-C>:update<CR> inoremap <C-S> <C-O>:update<CR>
To enable mswin.vim in vim 7+, just add the following to your .vimrc:
source $VIMRUNTIME/mswin.vim