The Emacs vs. Vim war has grown to Palestine/Israel proportions (in that it it’s a perpetual stalemate that can only be resolved by military intervention), and there is little common ground between their command sets.
This is all well and good, but can pose a real problem when you’re happily buffering-it-up with your LISP fuelled editor of preference and a vim user comes over and tries to use your machine.
To avoid the catastrophic repercussions of letting a vim user loose within your beloved Emacs session, I wrote a small function for my
init.el which spawns a new terminal and opens the current file at the exact same place in vim:
(defun open-in-vim () "Opens the current file in vim." (interactive) (if (not (equal buffer-file-name nil)) (let ((vim-prefix "gnome-terminal -e 'vim") (vim-postfix "'")) (save-buffer) ;; First, write changes to disk (recenter) ;; Vim opens files with the view centred (shell-command-to-string (concat vim-prefix " " (shell-quote-argument buffer-file-name) " +" (number-to-string (line-number-at-pos)) vim-postfix " &>/dev/null &"))) ;; Not all buffers are associated with files (message "Not a real file")))
You can assign it a top level key binding for easy button mashing:
(global-set-key [f12] 'open-in-vim)