При использовании Vim для чтения из стандартного ввода выводится информационное сообщение:
$ echo foo | vim -
Vim: Reading from stdin...
$
Это всего лишь пример. Фактическое использование не допускает конструкции оболочки. vim <(echo foo)
это не вариант.
Могу ли я подавить это, используя только параметры Vim и / или настройки vimrc?
Если вам нужно знать, для чего это нужно, я пытаюсь использовать Vim для чтения man-страниц (бесстыдный плагин). GNU man не допускает использование оболочек MANPAGER
, и, используя ftplugin/man.vim
и другие вещи, я успешно справился с удобством использования just MANPAGER="vim -"
. Последнее остающееся раздражение - неприглядное сообщение, напечатанное после каждой man-страницы, которую я просмотрел.
export MANPAGER='vim -c "%! col -b" -c "set ft=man nomod nolist ignorecase" -'
илиexport MANPAGER="vim -"
я не вижу проблем?man ls
открывает man-страницу, как и ожидалось.echo foo | vim -Nu NONE -
: help less
дает некоторую информацию для использования его в качестве пейджера.Ответы:
Начиная с Vim 8.0.1308 (ноябрь 2017 г.), вы можете использовать
--not-a-term
опцию для подавления этого сообщения; например сquit
:Или с
exit
:источник
cat
, но все же может быть полезно для применения Vimscript к входным+'runtime! syntax/2html.vim'
данным , например, для экспорта выделенного текста в стиле HTML (при условии выведенного или указанного типа файла). Есть несколько вариантов, кроме упомянутых выше; первое, что приходит на ум, - это использоватьmktemp
для хранения выходных данных команды и использовать их в качестве входных данных Vim. Вы можете добавить команды перенаправления и оболочки Vim, чтобы «вставить» результат команды в буфер, но это потребует дополнительной работы. (Файлы сценариев Vim могут автоматизировать длительные вызовы вместо использования псевдонимов.)--not-a-term
в Vim 7.4.1689 в Ubuntu 16.04 (но не 7.4.8056 на Mac), но это не подавляет сообщение.:help version8.txt
.--not-a-term
сама опция была добавлена,7.4.1419
и ее поведение было изменено, чтобы также подавить чтение из сообщения stdin ... в8.0.1308
. (Кстати, N файлов для редактирования сообщения также будут подавлены8.1.1258
)Ответ на ваш точный вопрос:
это: нет, это не возможно из - за следующую часть коды
Это означает, что если вы дадите
-
vim в качестве аргумента, то это сообщение будет механически показано.хотя, как обходной путь, если вы используете перенаправление файлов вместо
-
аргумента, вы избавитесь от сообщения:и вот пример
MANPAGE
настройки, которая просто работает ™ (взята из трубок):источник
ALWAYS_USE_GUI
определено, вы знаете?echo "foo" | vim < /dev/tty
работу. Делать это дает[2]+ Stopped echo "foo" | vim < /dev/tty
.echo "foo" | gvim /dev/stdin
(хотя vim без GUI по-прежнему будет пожаловаться на это:)Vim: Warning: Input is not from a terminal
.<(col -b)
частично. По сути, это какая-то сложная версияcat
для печати man-страниц, и вы, наконец, можете избавиться от сообщения vim с помощьюecho test | vim < /dev/tty <(cat>
В Vim, этот вопрос был рассмотрен в
234d162
фиксации (> = v8.0.1387).Таким образом, сообщение отображается только тогда, когда пользователь не перенаправил стандартный ввод.
Подобная проблема была решена в последней версии Neovim ( > = v0.2.2-dev ), которую вы можете использовать вместо Vim.
После выхода NVim v0.2.2 вы сможете запустить:
не имея сообщения.
источник
С vim версии 8.0.1387 и новее вы можете использовать
--not-a-term
опцию.Для более старой версии используйте следующий прием:
$ echo foo | bash -c 'vim < /dev/tty <(cat)'
Первый аргумент
/dev/tty
как-то обманывает Vim, полагая, что ввод поступает с клавиатуры. Я думаю, это потому, что isatty (3) возвращает True для этого файла. А второй аргумент просто пропускает все: от стандартного ввода до стандартного ввода Vim. Наконец,bash -c
префикс необходим для работы специальной конструкции,<(...)
если оболочка не поддерживает ее. В bash оригинальное решение может быть упрощено до$ echo foo | vim < /dev/tty <(cat)
источник