vim:转到插入模式后:写入

时间:2011-06-21 19:02:28

标签: vim

我想在写完后返回插入模式(参见:else

function! SaveOrSaveAsInInsert()
  if @% == ""
    :browse saveas
  else
    :w     
    "//TODO: Return to insert mode
  endif
endfunction

尝试使用:w<CR>a,但无效。

谢谢!

修改

@Randy Morris,评论使用startinsert有效。另一方面,:h inserting-ex说:

  

注意:不能使用这些命令   与|:global |或|:vglobal |。   “:append”和“:insert”不起作用   恰当地介于“:if”和   “:endif”,“:for”和“:endfor”,   “:while”和“:endwhile”。

所以我的问题是,我是否坚持startinsert i等效,或者有办法解决a行为?或者我应该坚持imap <C-s> <Esc>w<CR>a并且没有文件名测试?

4 个答案:

答案 0 :(得分:4)

inoremap <expr> <c-s> "\<esc>:" . (@% == "" ? "browse saveas" : "w") . "\<cr>gi"

我使用gi返回插入模式。并使用表达式映射来确定文件是否已保存。

答案 1 :(得分:2)

我在我的.vimrc中使用它,以便ctrl-s保存并返回到之前的模式。它可能会帮助你解决这个问题。 ; - )

" 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>

答案 2 :(得分:0)

通过

工作
:inoremap <silent> <C-S> 
   <Esc>:if expand("%") == ""<CR>:browse saveas<CR>:else<CR>:w<CR>:endif<CR>a

答案 3 :(得分:0)

您可以定义适用于所有模式的伪noop映射:

function s:Save()
    update
    return ""
endfunction
inoremap <expr> <C-s> <SID>Save()
nnoremap <expr> <C-s> <SID>Save()
<...>