Ответ 1
Обнаружено одно обходное решение: добавьте дополнительный <CR>
к команде карты.
map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>
Есть ли способ отключить приглашение "Нажмите ENTER или введите команду для продолжения" после выполнения внешней команды?
EDIT: обнаружено обходное решение: добавьте дополнительный <CR>
в ярлык в моем .lvimrc.
map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>
Любые лучшие идеи?
Обнаружено одно обходное решение: добавьте дополнительный <CR>
к команде карты.
map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>
Я не уверен, как это сделать глобально, хотя для одной команды:
:silent !<command>
Обязательно укажите пробел после silent
:help hit-enter
Вот как я столкнулся с проблемой запуска внешней программы с помощью бесшумных помех на экране в текстовом режиме vim (по моему опыту, gvim не страдает от этой проблемы):
command! -nargs=1 Silent
\ | execute ':silent !'.<q-args>
\ | execute ':redraw!'
Используйте его вместо обычной бесшумной команды:
:Silent top
Установите cmdheight
в 2, в моем vimrc (:e $MYVIMRC
):
:set cmdheight=2
Подробнее здесь.
Возможно, это синтаксическая ошибка в файле vimrc
Ответ Anthony отвел меня в нужное место, и я смог настроить gvim, чтобы не останавливаться на большом количестве сообщений.
Я добавил set shortmess=aoOtI
в файл gvimrc.
Это объясняется на странице справки, представленной вам :help shortmess
.
Буквы означают классы сообщений, которые вы не хотите видеть, или хотели бы, чтобы vim усекался, чтобы избежать остановки входа.
Мне удалось это сделать, установив широкое начальное окно с columns=130
в gvimrc, поэтому несколько сообщений переполнили бы его и потребовали бы раздражающего, изнурительного, чтобы нажать enter.
Вот как я запускаю внешние команды в сложных сценариях, не имея "Нажмите ENTER". В отличие от :silent
, я все еще могу видеть вывод команды.
Командная строка
:exe ":!<command>" | redraw
Script/function
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
Помещение перерисовывания до того, как будет очищен экран. Вот что у меня было:
exe 'ls'
exe 'b4' "This redraws, so the Prompt is triggered
Но это не вызовет подсказки:
exe 'ls'
redraw
exe 'b4'
Вы можете использовать:
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
Это происходит со мной, если я сохраняю файл, который находится в каталоге, где у меня нет прав на запись в каталог. Я сделал chmod 777 в каталоге (у меня уже были права на запись в самом файле), и сообщение "Нажмите ENTER" больше не отображается.
У меня есть аналогичная проблема, но когда я запускаю argdo для замены одной и той же строки в нескольких файлах, например,
argdo %s/something/Something/eg|update
Мне постоянно приходилось нажимать страницу вниз.
Вы можете установить следующую опцию перед запуском script, чтобы вместо многих подсказок было только окончательное приглашение
:set nomore
Но если вы выполняете команду из командной строки vim. Тогда это довольно сложно. Вы можете добавить ключевое слово silent
перед вашей собственно командой. Он вернет вас в окно vim автоматически после выполнения команды. Но вам все равно нужно вручную выполнить redraw
как некоторые окна, такие как NERD_Tree, должны быть перерисованы.
В этом случае попробуйте выполнить инструкции из справочного документа vim:
Чтобы уменьшить количество запросов ввода-ввода:
- Установите "cmdheight" на 2 или выше.
- Добавьте флаги в "shortmess".
- Сбросьте "showcmd" и/или "правитель".
Эта ссылка предоставляет другой выход. Поместите это в ваш файл vimrc
command! -nargs=1 Silent \ execute 'silent !' . \ | execute 'redraw!'
И тогда вы можете использовать :Silent command
как обычная команда.
Если ваша ошибка вызвана E303, то создание временного каталога в файле .vimrc
может исправить это.
После открытия любого файла напишите и введите:
:messages
Если есть ошибки, он подскажет.
Если вы видите E303 (Ошибка 303) "Невозможно открыть файл подкачки для" {имя_файла} ", восстановление невозможно", это может означать, что в системе существует старая попытка восстановить файл подкачки (скорее всего, потерянный или не существующий),
Чтобы это исправить, создайте временный каталог в файле .vimrc
.
Чтобы найти расположение файла .vimrc
, введите и введите:
$ locate .vimrc
/root/.vimrc
Откройте файл $ vi.vimrc
Добавьте это в конец файла:
set directory=.,$TEMP
Сохранить и закрыть с помощью :wq
Наконец, перезагрузите профиль:
$ . /etc/profile
Попробуйте открыть любой файл с помощью VI. Проблема должна быть исправлена.
На моей стороне решение было использовать silent
чаще в командной цепочке.
В частности, ранее .vimrc
имел:
nnoremap M :silent make\|redraw!\|cc<CR>
Это было изменено на:
nnoremap M :silent make\|silent redraw!\|silent cc<CR>
Раньше "Press ENTER" появлялся не всегда, но раздражающе часто. Дополнительное silent
исправило это. (Похоже, что silent
не требуется при redraw!
:cc
вызвало сообщение "Press ENTER".)
Недостаток этого изменения заключается в том, что он больше не отображает вывод
:cc
, поэтому вам нужно угадать, в чем ошибка. Небольшая настройка исправляет это:nnoremap M :silent make\|redraw!\|cw\|silent cc<CR>
Это делает список ошибок QuickFix (вывод
make
) автоматически появляющимся (и, с помощью vim-magic, исчезающим, если ошибки нет).
FYI:
Мотивация этого M
-mapping - просто нажать M
в обычном режиме, чтобы:
make
все находится под git
-control в любом случае)make
Мой Makefile
обычно создается так, что это занимает доли секунды.
Немного подправив это можно применить и к рабочим нагрузкам типа non- 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
rrors, W
редупреждения, I
NFO, основанный на vim
магии)
Пример, как использовать это для скриптов Python. (Извините, здесь нет копии, это другая история.)