if exists('g:loaded_emacs_cursor') || v:version < 702 finish endif let g:loaded_emacs_cursor = 1 let s:save_cpo = &cpoptions set cpoptions&vim function! s:pumvisible() abort let l:Fn = get(g:, 'EmacsCursorPumvisible', v:null) if l:Fn != v:null && l:Fn() return v:true endif return pumvisible() endfunction inoremap (emacs-enter) set eventignore+=InsertEnter,InsertLeave inoremap (emacs-leave) set eventignore-=InsertEnter,InsertLeave imap (emacs-down) pumvisible() \ ? "\" \ : "\(emacs-enter)\u\gj\(emacs-leave)" imap (emacs-up) pumvisible() \ ? "\" \ : "\(emacs-enter)\u\gk\(emacs-leave)" inoremap (emacs-eol) ug$ inoremap (emacs-bol) col('.') == 2 ? "\" : "\u\g0" inoremap (emacs-kill) col('.') == col('$') ? "\gJ" : "\u\d$" nmap nmap imap imap imap imap imap imap imap (emacs-up) imap (emacs-down) imap (emacs-bol) imap (emacs-eol) imap (emacs-kill) inoremap "0ylxa0 cmap cmap cmap cmap cmap cnoremap e getcmdpos() == 1 ? '' : getcmdline()[:getcmdpos()-2] cnoremap pumvisible() ? "\" : "\" smap I smap A smap I smap A smap smap let &cpoptions = s:save_cpo unlet s:save_cpo