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


104

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

РЕДАКТИРОВАТЬ: нашел обходной путь: добавьте дополнительный <CR>ярлык в мой .lvimrc.

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

Есть идеи получше?


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

Ответы:


76

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

:silent !<command>

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


3
К сожалению, это не очень полезно для меня, это портит экран, и мне приходится нажимать Ctrl-L ... что раздражает даже больше, чем нажатие пробела.
Йохан Котлински

1
Хотя работал с моим скриптом grep!
Микко Рантанен

5
В соответствии с приведенным ниже комментатором (который предложил добавить дополнительный <CR> в конце команды) при использовании беззвучного режима вы можете добавить дополнительный <Cl>, чтобы вам не приходилось нажимать его вручную. Значит, с экраном работает хорошо.
Виктор Фараждаги

4
просто используйте команду: silent!, а затем: redraw! после - я думаю, что он не делает это автоматически из-за сценариев, которые могут делать с экраном то, что вы хотите оставить, например, часы или что-то другое, отслеживающее состояние ... просто предположение
osirisgothra

2
Ага .. у меня тоже экран портит. :redraw!вариант решает эту проблему. Дабл <cr>наверное похож. и менее сложный
alpha_989

58

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

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

2
Никогда бы не подумал об этом. Абсолютно блестящий!
Kohányi Róbert

1
Да, добавление дополнительного <CR> в мою команду тоже помогло.
Даниэль Мисслер,

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

28
:help hit-enter

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

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

1
Возможно, вы могли получить приглашение «Нажмите ENTER» от команды write all перед тем, как выполнить оболочку. В этом случае действительна информация в разделе <code> shortmess </code>, на который ссылается <code> hit-enter </code>. Однако вы получаете подсказку от обстрела, поэтому предложение Вергана правильное. Как отмечено в <code>: help: silent </code> «При использовании этого для внешней команды это может привести к искажению экрана. Используйте | CTRL-L |, чтобы очистить его». Вы можете добавить к своей команде: redraw или Ctrl-L, чтобы исправить это. Или просто сделайте два возврата, которые вы уже делаете.
Conspicuous Compiler

Для меня это было о set hl( :highlight), которое я неправильно использовал в качестве ярлыка для того, hlsearchкто есть настоящий ярлык hls. Одно sимеет значение :)

1
@JohanKotlinski theset nomore
Tinmarino


18

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

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

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

:Silent top

13

Возможно, это синтаксическая ошибка в файле vimrc


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

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

Обновляю vim, проблема решена. Но я думаю, что люди могут печатать, :messageчтобы узнать, что не так.
NanoNova

Ага. У меня была линия set syntax. Заменил на, set syntax=onи проблема устранилась.
McSuperbX1,

7

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


6

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

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

:exe ":!<command>" | redraw

Скрипт / функция

exe ':!<command>' 
redraw

Сопоставление с <expr>

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

Сопоставление с <expr>этим вызывает функцию

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

Это можно использовать повторно? Когда я <command>
нажимаю

1
<command>предполагается заменить реальной внешней командой, напримерmap <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov

4

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

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

Спасибо за этот ответ! Быстро, легко и действительно эффективно для моего личного случая, в отличие от многих других перечисленных ответов.
ab5tract

3

Помещение перерисовки до очистки экрана тоже работает. Вот что у меня было:

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

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

exe 'ls'  
redraw  
exe 'b4'

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

2

Мой случай (автокоманда) set shortmess+=Fсделал свое дело .

: h shortmess
F не выдает информацию о файле при редактировании файла, например:silent


1

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

 argdo %s/something/Something/eg|update

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

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

:set nomore

Вот и был ответ: « :set nomoreПлохо лижут, это все еще в конце». Он также находится в :h help hit-enter@anthony
Tinmarino

0

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


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

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

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

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

      команда! -nargs = 1 Без звука
      \ выполнить "тихо!" .
      \ | выполнить "перерисовать!"
      

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


0

На моей стороне решением было более частое использование silentв цепочке команд .

Конкретно раньше .vimrcбыло:

nnoremap M :silent make\|redraw!\|cc<CR>

Это было изменено на:

nnoremap M :silent make\|silent redraw!\|silent cc<CR>

Раньше "Press ENTER" появлялось не всегда, но досадно часто. Дополнительные silents исправили это. (Похоже, silentон не нужен, redraw!поскольку :ccпоявилось сообщение «Нажмите ENTER».)

Недостаток этого изменения состоит в том, что он больше не отображает вывод :cc, поэтому вам нужно угадать, в чем ошибка. Небольшая настройка исправляет это:

nnoremap M :silent make\|redraw!\|cw\|silent cc<CR>

Это приводит к тому, что список ошибок QuickFix (Вывод make) автоматически появляется (и, с помощью vim-magic, исчезает, если ошибки нет).

К вашему сведению:

Мотивация этого Mотображения - просто нажать Mв нормальном режиме, чтобы:

  • сохраните правку (при использовании makeвсе равно все находится под gitконтролем)
  • вызывать make
  • и сразу перейти к первой ошибке или предупреждению

Мои Makefiles обычно строятся так, что это занимает всего долю секунды.

После небольшой настройки это можно применить и к нетиповым Cрабочим нагрузкам:

В .vimrcоном

set efm+=#%t#%f#%l#%c#%m#

Это позволяет vimинтерпретировать следующие сообщения для :cc(ошибка отображения):

#E#file#line#column#message#
#W#file#line#column#message#
#I#file#line#column#message#

( Errors, Warnings, Info, основано на vimмагии)

Пример использования этого для скриптов Python . (Извините, копии здесь нет, это отдельная история.)


0

Если ваша ошибка вызвана E303, то создание временного каталога в .vimrcфайле может исправить это.

После открытия любого файла напишите и введите:

:messages

Если есть ошибки, он подскажет.

Если вы видите E303 (Ошибка 303) «Невозможно открыть файл подкачки для« {имя_файла} », восстановление невозможно», это может означать, что в системе была предпринята старая попытка восстановить файл подкачки (скорее всего, потерянный или несуществующий). .

Чтобы исправить это, назначьте временный каталог в .vimrcфайле.

Чтобы найти расположение .vimrcфайла, введите и введите следующее:

$ locate .vimrc
/root/.vimrc

Открыть файл $ vi .vimrc

Добавьте это в конец файла:

set directory=.,$TEMP

Сохранить и закрыть с помощью :wq

Наконец, перезагрузите профиль с помощью:

$ . /etc/profile

Попробуйте открыть любой файл с помощью VI. Проблема должна быть устранена.


0

На gvim, если вы установили guioptions+=!(Добавлено !в guioptions), это из - за этого. Эта опция ( !) заставляет gvimвыполнять некоторые команды на внешнем терминале (которые поддерживают больше функций, таких как цвет и многие другие).

Вы можете попробовать его использовать :set guioptions-=iи посмотреть, работает ли это для вас.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.