2012-03-08 2 views
4

У меня есть следующее отображение в моем .vimrc.Отзывчивое компиляция Vim Mapping

:nmap <F5> :<C-U>make %:r && ./%:r<CR> 

Я нажимаю F5 в VIM, и он компилируется, выходит из VIM и запускает мой код. Когда программа завершается, она просит меня «нажать ENTER или ввести команду для продолжения». Затем он выводит меня на пустой экран с текстом (1 of 5): и тем же «нажмите клавишу ВВОД или введите команду для продолжения». Я нажимаю Enter, и он, наконец, возвращает меня обратно в VIM. Такое поведение согласовано по всем направлениям. Есть ли способ удалить любой или оба из этих случаев? Возможно, если после завершения программы нажмите кнопку ENTER дважды? Если да, то как?

EDIT: Итак, я понял, что добавление еще двух <CR> 's не совсем решает проблему. Как только программа завершается, она НЕМЕДЛЕННО возвращается к VIM, и у меня нет времени для просмотра вывода. Могу ли я сделать сопоставление ждать ME, чтобы нажать первый ввод, и автоматически нажать второй ENTER после?

+0

Я не вижу этого поведения, просто одно приглашение. Можете ли вы разместить свой .vimrc? – ergosys

ответ

0

Будет ли эта работа:

nmap <F5> :<C-U>silent make %:r<CR>:redraw!<CR>:!./%:r<CR>

Более длительное решение, но это один также позволяет увидеть ошибки (reference) :

:function! MakeAndRun() 
:  silent make %:r 
:  redraw! 
:  if len(getqflist()) == 1 
:   !./%:r 
:  else 
:   for i in getqflist() 
:   if i['valid'] 
:     cwin 
:     winc p 
:     return 
:   endif 
:   endfor 
:  endif 
:endfunction 
:nmap <F5> :call MakeAndRun()<cr> 
+0

Ваше первое предложение работает отлично! Я нажимаю F5, он компилируется и запускается; после окончания он ждет, чтобы я нажал кнопку ввода (один раз!), прежде чем вернуться обратно в файл. Благодаря! – skippr

1

Да и да (вы ответили на свой вопрос):

:nmap <F5> :<C-U>make %:r && ./%:r<CR><CR> 
+0

Спасибо! Я не понял, что был «ВВОД». Однако это породило новую проблему. См. Редактирование вопроса. – skippr

0

Для меня это отлично работает:

" Compile 
noremap <F4> :<C-U>silent make<CR>:redraw!<CR> 
" Automatically open, but do not go to (if there are errors) the quickfix/
" location list window, or close it when is has become empty. 
autocmd QuickFixCmdPost [^l]* nested cwindow 
autocmd QuickFixCmdPost l* nested lwindow 

Он компилируется и сразу же переходит к vim, отображая окно quickfix. Промежуток не входит.