Bind <Cmd-S> in Vim

Solution 1:

Yes you should be able to set up a key mapping in your .vimrc file so that when you press command - S it maps to :w Also here is something else to go on that you can modify as well Map Ctrl-S to save current or new files

  • First thing is to reassign the the Command - S functionality for the Application. Do this in the Keyboard > Keyboard Shortcuts System Preference Pane.

For example, you will want to add in a new Application Short cut for the Terminal app, then map to the Menu title "Export Text As..." to another keyboard command something that you don't use, e.g. control - s or etc. should be fine.

  • Next stop mac terminal from trying to interpret Cmd-s by ... (still working on this I asked a separate question for a solution Allow the Terminal.app to pass command key based keystrokes to terminal programs )

  • Set up the mapping in the .vimrc file to map the command or meta and s keys to the :write function.

Something such as this noted below* you can add to you .vimrc:

:map <M-s> :w<kEnter>  "Works in normal mode, must press Esc first"
:imap <M-s> <Esc>:w<kEnter>i "Works in insert mode, saves and puts back in insert mode"

*This was verified working on the X11 terminal on OS X Lion.

Solution 2:

For people still coming across this, I've written up an inverse of MrDaniel's solution (that is, mapping any MacVim / system-wide ⌘-sequence to command-line vim), and posted it to his other question. It's more complex than his solution, but then allows you to (with some effort) remap any ⌘-sequence into any command-line program.

It works well for me, and I hope it can help you too. <3