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


102

Чи є якийсь спосіб відключити підказку "Натисніть ENTER або введіть команду для продовження", яка з'явиться після виконання зовнішньої команди?

РЕДАКТУВАННЯ: Знайдено вирішення: додайте додатковий <CR>до ярлика в моєму .lvimrc.

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

Якісь кращі ідеї?


9
У Windows 7 ви отримуватимете це запит часто через помилки "не вдається відкрити файл swap", які були надруковані, але ви їх не бачите, що спричиняє запит. Рішення полягає в тому, щоб помістити set dir=$TEMPсвій vimrc. Це вказує vim використовувати правильну папку temp для своїх тимчасових файлів. Це, в свою чергу, виправляє помилки та видаляє підказки "натиснути введення".
Лукас

Відповіді:


76

Я не впевнений, як це зробити глобально, хоча для однієї команди:

:silent !<command>

Обов’язково додайте пробіл після silent


3
На жаль, це не дуже корисно для мене, воно заплутує екран, і я повинен натиснути Ctrl-L ..., що ще більше дратує, ніж натискання місця.
Йохан Котлінський

1
Працював над моїм сценарієм греп!
Мікко Рантанен

5
Відповідно до коментатора нижче (який запропонував додати додатковий <CR> в кінці команди), при використанні беззвучного ви можете додати додатковий <Cl>, так що вам не доведеться натискати на нього вручну. Тоді добре працює з екраном.
Віктор Фараздагі

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

2
Так ... це заплутує екран і для мене. :redraw!варіант вирішує цю проблему. Подвійний <cr>, мабуть, схожий. і менш складний
alpha_989

57

Дізнався один спосіб вирішення: Додайте додаткову <CR> команду map.

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

2
Ніколи б не думав про це. Абсолютно геніально!
Коханій Руберт

1
Так, додавання додаткової <CR> до моєї команди також зробило трюк.
Даніель Місслер

2
Неймовірно просто. Це супер ефективно!
Уейн Вернер

28
:help hit-enter

1
Мені цікаво, чому хтось проголосував за цю відповідь, оскільки :help hit-enterнадає деяку досить корисну довідкову інформацію на запит "Натисніть ENTER ...". Хочете пояснити?
cjs

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

1
Можливо, ви можете отримати підказку "Натисніть ENTER" з команди "записувати всі" перед тим, як ви звільнені. Інформація під <code> shortmess </code>, на яку посилається <code> hit-enter </code>, є дійсною в цьому випадку. Однак підказки, які ви отримуєте, - від обстрілів, тому пропозиція Вергана є правильною. Як зазначено в <code>: help: silent </code> "Якщо використовувати це для зовнішньої команди, це може призвести до того, що екран буде зіпсований. Використовуйте | CTRL-L | для його очищення". Ви можете додати: redraw або Ctrl-L до своєї команди, щоб виправити це. Або просто зробіть два повернення, які ви вже робите.
Помітний укладач

Для мене це стосувалося set hl( :highlight) я неправильно використовував як ярлик для того, hlsearchхто справжній ярлик hls. Одне sпитання :)

1
@JohanKotlinski theset nomore
Tinmarino

19

Встановіть значення cmdheight2 у моєму vimrc ( :e $MYVIMRC):

:set cmdheight=2

Більше інформації тут .


1
Це ідеально підходить для дійсно довгих пошукових запитів
Keith Smiley

18

Ось як я вирішив проблему, що запуск зовнішньої програми через безшумні повідомлення вгору по екрану в текстовому режимі vim (на мій досвід, gvim не страждає від цієї проблеми):

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

Використовуйте його замість звичайної тихої команди:

:Silent top

13

Можливо, це синтаксична помилка у файлі vimrc


5
Це. Я використовував, set numberа потім set syntaxпрямо в моєму файлі .vimrc. Як тільки я зняв set syntaxВіма, мене більше не спонукало.
piperchester

1
@piperchester це спрацювало! Спробував тонни пропозицій і тільки це спрацювало. Дякую :)
Пол Еванс

Я оновлюю vim, проблему вирішено. Але я думаю, що люди можуть набрати, :messageщоб дізнатися, що відбувається не так.
NanoNova

Так. У мене була лінія set syntax. Замінив його set syntax=onі він вирішує проблему.
McSuperbX1

7

Відповідь Антонія перевела мене в потрібне місце, і я зміг налаштувати gvim, щоб не зупинятися на багатьох повідомленнях.
Я додав набір shortmess=aoOtIдо свого файлу gvimrc.
Це пояснюється на сторінці довідки, яку вам привіз :help shortmess.
Букви означають класи повідомлень, які ви не хочете бачити, або хочете, щоб vim усікався, щоб уникнути зупинки натискання клавіш.
Раніше я це columns=130вдавав, встановивши широке початкове вікно з в gvimrc, тому мало повідомлень переповнюватиме його і вимагає надокучливої, виснажливої, необхідності натиснути 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

Чи це багаторазове використання? Коли я натискаю F5, він просто викликає рядок<command>
ashrasmun

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вирішила це. Інше рішення не підходило, оскільки я хотів прийняти введення користувача між початковим повідомленням та зникненням підказки.
Даніель Андерссон

1

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

 argdo %s/something/Something/eg|update

Мені постійно доводилося натискати на сторінку.

Перед тим, як запустити скрипт, ви можете встановити наступний варіант, щоб замість багатьох підказок було лише остаточне запит

:set nomore

То була відповідь: :set nomoreпогана лиза все-таки в кінці. Це також у :h help hit-enter@anthony
Tinmarino

1

Я мій випадок (автокоманда) set shortmess+=Fзробив свою справу .

: h shortmess
F не дає інформації про файл під час редагування файлу, наприклад:silent


0

Це трапляється зі мною, якщо я зберігаю файл, який знаходиться в каталозі, де у мене немає дозволу на запис у каталог. Я зробив chmod 777 в каталозі (я вже мав дозволи на запис у сам файл), і повідомлення "Натисніть 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>

Раніше "Прес ENTER" не завжди з'являвся, але дратує часто. Додатковий silents зафіксував це. (Схоже, silentце не потрібно, redraw!оскільки це було :ccвикликано повідомленням "Натисніть ENTER".)

Ця зміна має недолік, що більше не відображається вихід :cc, тому ви повинні здогадатися, у чому помилка. Це трохи виправляє:

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

Це робить список помилок QuickFix (Output of make) автоматично з’являється (і, за допомогою vim-magic, зникає, якщо помилки немає).

FYI:

Мотивація цієї 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#

( Eпомилки, аргументи, Wnfo I, на основі vimмагії)

Приклад використання цього сценарію для Python . (Вибачте, тут немає копії, це вже інша історія.)


0

Якщо ваша помилка викликана E303, то створення тимчасового каталогу у .vimrcфайлі може виправити це.

Після відкриття будь-якого файла напишіть і введіть:

:messages

Якщо є помилки, він підкаже.

Якщо ви бачите E303 (Error303) "Не вдається відкрити файл swap для" {filename} ", відновлення неможливо", це може означати, що є стара спроба відновити файл swap (швидше за все, загублений або неіснуючий) в системі .

Щоб виправити це, призначте тимчасовий каталог у .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.