Wikia

Vim Tips Wiki

Map Ctrl-S to save current or new files

Talk0
1,613pages on
this wiki
Revision as of 19:51, January 28, 2014 by Bostonvaulter (Talk | contribs)

Tip 294 Printable Monobook Previous Next

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.
command -nargs=0 -bar Update if &modified 
                           \|    if empty(bufname('%'))
                           \|        browse confirm write
                           \|    else
                           \|        confirm write
                           \|    endif
                           \|endif
nnoremap <silent> <C-S> :<C-u>Update<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"
}
Or you can just always run
stty -ixon
in your .bashrc or terminal to disable flow control for that terminal completely (not just for vim).

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:

:inoremap <c-s> <Esc>:Update<CR>

If one prefers to return to insert mode after the save, the following mapping may be used instead:

:inoremap <c-s> <c-o>:Update<CR>

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:

 :inoremap <c-s> <c-o>:Update<CR><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

Around Wikia's network

Random Wiki