Ao usar o Vim para ler a partir de stdin, ele imprime uma mensagem informativa:
$ echo foo | vim -
Vim: Reading from stdin...
$
Este é apenas um exemplo. O uso real não permite construções de shell. vim <(echo foo)
não é uma opção.
Posso suprimir isso usando apenas opções do Vim e / ou configurações do vimrc?
Caso você precise saber para que serve isso, estou tentando usar o Vim para ler páginas de manual (plug descarado). O GNU man não permite construções de shell MANPAGER
e, usando ftplugin/man.vim
e outras coisas, eu consegui ter uma experiência confortável usando apenas MANPAGER="vim -"
. O último incômodo restante é a mensagem desagradável impressa após cada página de manual que eu vi.
export MANPAGER='vim -c "%! col -b" -c "set ft=man nomod nolist ignorecase" -'
ouexport MANPAGER="vim -"
não vejo problema?man ls
abre a página de manual conforme o esperado.echo foo | vim -Nu NONE -
: help less
fornece algumas informações para usá-lo como pager.Respostas:
A partir do Vim 8.0.1308 (novembro de 2017), você pode usar a
--not-a-term
opção para suprimir esta mensagem; por exemplo comquit
:Ou com
exit
:fonte
cat
, mas ainda pode ser útil para aplicar o Vimscript à entrada, por exemplo,+'runtime! syntax/2html.vim'
para exportar texto destacado como HTML estilizado (assumindo o tipo de arquivo deduzido ou especificado). Existem algumas opções além das mencionadas até agora; o primeiro que vem à mente é usarmktemp
para armazenar a saída do comando e usá-la como entrada do Vim. Você pode adicionar os comandos de redirecionamento e shell do Vim para 'colar' o resultado do comando no buffer, mas isso exige mais trabalho. (Arquivos de script Vim pode automatizar invocações longas em vez de usar aliases.)--not-a-term
no Vim 7.4.1689 no Ubuntu 16.04 (mas não no 7.4.8056 em um Mac), mas não suprime a mensagem.:help version8.txt
.--not-a-term
A opção em si foi adicionada7.4.1419
e seu comportamento foi alterado para também suprimir a mensagem Reading from stdin ... in8.0.1308
. (A propósito, os N arquivos para editar a mensagem também são suprimidos8.1.1258
)A resposta para sua pergunta exata :
é: não, é não possível devido ao seguinte parte do código
o que significa que, se você der
-
como argumento ao vim, ele mostrará mecanicamente essa mensagem.no entanto, como solução alternativa, se você usar um redirecionamento de arquivo em vez do
-
argumento, se livrará da mensagem:e aqui está um exemplo de
MANPAGE
configuração que simplesmente funciona ™ (tirada dos intertubos):fonte
ALWAYS_USE_GUI
definido, você sabe?echo "foo" | vim < /dev/tty
trabalho da solução alternativa . Fazendo isso dá[2]+ Stopped echo "foo" | vim < /dev/tty
.echo "foo" | gvim /dev/stdin
(embora o vim que não seja da GUI ainda faça uma reclamação sobre issoVim: Warning: Input is not from a terminal
:).<(col -b)
parte. Isso é essencialmente uma versão sofisticada decat
para imprimir páginas do homem, e você pode finalmente se livrar da mensagem do vim comecho test | vim < /dev/tty <(cat>
No Vim, esse problema foi resolvido no
234d162
commit (> = v8.0.1387).Portanto, a mensagem é exibida apenas quando o usuário não redireciona o stdin.
Problema semelhante foi abordado na versão recente do Neovim ( > = v0.2.2-dev ) que você pode usar em vez do Vim.
Depois que o NVim v0.2.2 for lançado, você poderá executar:
sem ter a mensagem.
fonte
Com o vim da versão 8.0.1387 e mais recente, você pode usar a
--not-a-term
opçãoPara uma versão mais antiga, use o seguinte truque:
$ echo foo | bash -c 'vim < /dev/tty <(cat)'
O primeiro argumento, de
/dev/tty
alguma forma, engana o Vim a pensar que a entrada vem do teclado. Eu acho que é porque isatty (3) retorna True para esse arquivo. E o segundo argumento simplesmente repassa tudo, desde a entrada padrão até a entrada padrão do Vim. Finalmente, obash -c
prefixo é necessário para que a construção especial<(...)
funcione se o shell não a suportar. No bash, a solução original pode ser simplificada para$ echo foo | vim < /dev/tty <(cat)
fonte