vim: перейти к режиму вставки после: write - PullRequest
4 голосов
/ 21 июня 2011

Я хочу вернуться в режим вставки после записи (см .: else)

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

Пробовал с :w<CR>a, но не работает.

Спасибо!

Редактировать

@ Рэнди Моррис, прокомментировал, используя startinsert, который работаетС другой стороны, :h inserting-ex говорит:

ПРИМЕЧАНИЕ. Эти команды нельзя использовать с |: global |или |: vglobal |.": append" и ": insert" не работают должным образом между ": if" и ": endif", ": for" и ": endfor", ": while" и ": endween".

Итак, мой вопрос в том, застрял ли я с startinsert i эквивалентом, или есть способ обойтись с поведением a?Или я должен придерживаться imap <C-s> <Esc>w<CR>a и без проверки имени файла?

Ответы [ 4 ]

4 голосов
/ 22 июня 2011

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

Я использую gi, чтобы вернуться в режим вставки.И используйте сопоставление выражений, чтобы определить, был ли файл сохранен или нет.

2 голосов
/ 22 июня 2011

Я использую это в моем .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 голосов
/ 22 июня 2011

Вы можете определить псевдо-контурное отображение, которое будет работать для всех режимов:

function s:Save()
    update
    return ""
endfunction
inoremap <expr> <C-s> <SID>Save()
nnoremap <expr> <C-s> <SID>Save()
<...>
0 голосов
/ 22 июня 2011

Работает

:inoremap <silent> <C-S> 
   <Esc>:if expand("%") == ""<CR>:browse saveas<CR>:else<CR>:w<CR>:endif<CR>a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...