2009-05-20 4 views
78

Есть ли способ отключить приглашение «Нажмите ENTER или введите команду для продолжения» после выполнения внешней команды?Как отключить подсказку «Нажмите ENTER или введите команду для продолжения» в Vim?

EDIT: Обнаружено обходное решение: Добавить дополнительный <CR> в ярлык в моем .lvimrc.

map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR> 

Любые лучшие идеи?

+9

В Windows 7 вы получите эту подсказку часто из-за «неспособных открыть файл подкачки», которые были напечатаны, но вы их не видите, что вызывает приглашение. Решение состоит в том, чтобы поместить 'set dir = $ TEMP' в ваш vimrc. Это говорит vim использовать правильную временную папку для своих временных файлов. Это, в свою очередь, исправляет ошибки и удаляет подсказки «нажмите ввод». – Lucas

ответ

42

Найдено одну обходной путь: Добавить дополнительную <CR> к команде карты.

map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR> 
+1

Никогда бы не подумал об этом. Абсолютно блестящий! –

+0

Да, добавив дополнительный к моей команде, тоже сделал трюк. –

+1

Невероятно простой. Это суперэффективно! –

53

Я не уверен, как это сделать на глобальном уровне, хотя для одной команды:

:silent !<command> 

Не забудьте включить пробел после silent

+2

К сожалению, для меня это не очень полезно, это испортило экран, и мне нужно нажать Ctrl-L ... что еще более раздражает, чем нажимать пробел. –

+1

Работал для моего скрипта grep хотя! –

+4

В соответствии с комментарием ниже (кто предложил добавить дополнительные в конце команды), при использовании тихих вы можете добавить дополнительные , так что вам не нужно нажимать их вручную. Тогда работает с экраном. –

25
:help hit-enter 
+1

Мне любопытно, почему кто-то проголосовал за этот ответ, так как ': help hit-enter' предоставляет некоторую довольно полезную справочную информацию в строке« Нажмите ENTER ... ». Позаботьтесь об этом? –

+24

Какая информация из ': help hit-enter' отвечает на вопрос? Я не могу найти его. –

+1

Возможно, вы могли получить приглашение «Нажать клавишу ВВОД» из команды «написать все» перед выводом оболочки. Информация в соответствии с кодом shortmess, которая относится к hit-enter, действительна в этом случае. Однако приглашение, которое вы получаете, от обстрела, поэтому предложение Вергана является правильным. Как отмечено в :help :silent «При использовании этого для внешней команды это может привести к переполнению экрана. Используйте | CTRL-L |, чтобы очистить его». Вы можете добавить: redraw или Ctrl-L в свою команду, чтобы исправить это. Или просто сделайте два возвращения, которые вы уже делаете. –

15

Это, как я имел дело с проблемой, которая работает внешнюю программу через немой путает экран в текстовом режиме Vim (в моем опыте, Gvim не страдает от этой проблемы):

command! -nargs=1 Silent 
\ | execute ':silent !'.<q-args> 
\ | execute ':redraw!' 

Используйте его вместо обычной молчаливой команды:

:Silent top 
3

Ввод перерисовки перед экраном ясно работает слишком. Вот что я имел:

exe 'ls' 
exe 'b4' "This redraws, so the Prompt is triggered 

Но это не вызовет подсказку:

exe 'ls' 
redraw 
exe 'b4' 
+0

Это помогло мне с тех пор, как я просто программно избавился от подсказки в определенном месте внутри функции. Просто выдача «перерисовки» решила его. Другое решение не подходит, поскольку я хотел принять пользовательский ввод между исходным сообщением и исчезновением приглашения. –

8

Это, возможно, ошибка синтаксиса в vimrc файла

+4

Это. Я использовал 'set number', а затем' set syntax' прямо в моем файле .vimrc. Как только я удалил 'set syntax', Vim больше не запрашивал меня. – piperchester

+1

@piperchester * этот * работал! Пробовал тонны предложений, и только это сработало. Спасибо :) –

11

Установите cmdheight в 2, в мой vimrc (:e $MYVIMRC):

:set cmdheight=2 

Дополнительная информация here.

+0

Это идеально подходит для очень длинных поисковых запросов –

6

Ответ Антония отвел меня в нужное место, и я смог настроить gvim, чтобы не останавливаться на большом количестве сообщений.
Я добавил набор shortmess=aoOtI в свой файл gvimrc.
Это объясняется на странице справки, приведенной к :help shortmess.
Буквы означают классы сообщений, которые вы не хотите видеть, или хотели бы, чтобы vim усекался, чтобы избежать hit enter stop.
Мне удалось это сделать, установив широкое начальное окно с columns=130 в gvimrc, поэтому несколько сообщений переполнили бы его и потребовали бы раздражающего, изнурительного, чтобы нажать enter.

2

Вот как я запускаю внешние команды в сложных сценариях, не имея «Нажмите ENTER». В отличие от :silent, я все еще вижу выход команды.

Командная строка

:exe ":!<command>" | redraw 

Script/функция

exe ':!<command>' 
redraw 

Mapping с <expr>

map <expr> <F5> ":exe ':!<command>'\n:redraw\<CR>" 

Mapping с <expr>, что вызывает функцию

map <expr> <F5> MyFoo() 
fu! MyFoo() 
    return ":exe ':!<command>' | redraw\<CR>" 
endf 
1

Вы можете использовать:

call feedkeys(" ") 

Например:

function! Interactive_Questions() 
    echo "Question 1:" 
    let response1 = getchar() 
    echo "Question 2:" 
    let response2 = getchar() 

    " Do something 

    " Without the next line, you would have to hit ENTER, 
    " even if what is written (the questions) has no interest: 
    call feedkeys(" ") 
endf 
0

Это происходит со мной, если я сохраняю файл, который находится в каталоге, где у меня нет прав на запись в каталог. Я сделал chmod 777 в каталоге (у меня уже были права на запись для самого файла), и сообщение «Нажмите ENTER» больше не отображается.

0

У меня аналогичная проблема, но когда я запускаю argdo заменить ту же строку в нескольких файлах например,

argdo %s/something/Something/eg|update 

Я постоянно приходится нажимать на страницу вниз.

Вы можете установить следующие опции перед запуском сценария, так что есть только окончательное приглашение вместо многих подсказок

:set nomore 
0
  • Если вы используете ключ карты, то ваша жизнь может быть намного проще, добавив еще несколько до конца вашей команды - но обычно 2 раза достаточно.
  • Но если вы выполняете команду из командной строки vim. Тогда это довольно сложно. Вы можете добавить ключевое слово silent перед своей командой. Он вернет вас обратно в окно vim автоматически после выполнения команды. Но вам все равно нужно вручную выполнить redraw, так как некоторые из окон, таких как NERD_Tree, нужно перерисовать.

    • В этом случае, попробуйте следовать инструкциям из ВЬЕТ справку документа:

      Чтобы уменьшить количество попадания ввести подсказки:

      • Set 'cmdheight' до 2 или выше.
      • Добавить флаги в «shortmess».
      • Сбросить 'showcmd' и/или 'линейку'.
    • This link обеспечивает еще один выход.Поместите это в ваш vimrc файл

       
      command! -nargs=1 Silent 
      \ execute 'silent !' . 
      \ | execute 'redraw!' 
      

И тогда вы можете использовать :Silent command как обычные команды.

Смежные вопросы