2011-06-21 54 views
3

我要回写之后插入模式(参见:elseVIM:跳转到插入模式后:写

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

试图与:w<CR>a但不起作用。

谢谢!

编辑

@Randy莫里斯,利用startinsert其中工程评论。在另一方面:h inserting-ex说:

注意:这些命令不能用来 用|:全球|或|:vglobal |。 “:append”和“:insert”不适用于 “:”和“ ”:endif“,”:for“和”:endfor“, ”:while“和”:endwhile“。

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

+3

我相信你想'startinsert'但我不能在此刻测试。 –

+0

是的,请把它写成anwser。谢谢 –

回答

4

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

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

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

得到它通过

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

您可以定义一个伪空操作映射,将所有的工作模式:

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