Respostas:
Isso acontece, porque geralmente o Vim muda para a tela alternativa e trabalha lá. Ao sair, o Vim retornará e, portanto, você não verá nada da sessão do Vim, mas o resultado do comando executado mesmo antes de iniciar o Vim.
Esse recurso é explicado em :h xterm-screens (link)
Então você basicamente não quer isso e, portanto, deseja desativá-lo. Você pode fazer isso definindo :set t_ti= t_te=os códigos dos terminais que executam isso como vazios.
Juntando tudo, você gostaria de iniciar o Vim assim:
vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'
Estamos redefinindo a 'more'opção, para que você não veja o prompt de pressionar Enter.
lessexistem os pagers . Apenas coloque-o em menos assim vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!' | less. Talvez o layout tenha estragado tudo (está no meu terminal), mas depois de pressionar <CL> tudo fica legal e elegante.
vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!', existe apenas um "flash rápido", o comando sai com o código 0, sem saída. Estou esquecendo de algo?
Agradeço a resposta fornecida por Christian Brabandt, mas acho que uma resposta melhor seria separar o comando quit usando outro comando -c da seguinte forma:
vim -c ':set t_ti= t_te= nomore' -c 'scriptnames' -c 'q!'
O uso desse método significa que você pode agrupar vários comandos diferentes e, em seguida, usar o final 'q!' sair do vim.
Para situações em que você precisa que o vim seja totalmente carregado como se você o tivesse iniciado manualmente, isso funciona:
vim -c "autocmd! CursorHold * <commands to run>"
Por exemplo, eu queria redirecionar a saída de :mappara um arquivo do shell, mas queria capturar o mapeamento que o vim- airlines cria somente depois de exibir sua linha de tabulação (linha na parte superior mostrando todos os nomes de buffer abertos). isso de forma assíncrona, simplesmente executar um -credirecionamento para um arquivo não estava dando tempo para fazer os mapeamentos. Poderia haver uma maneira melhor, mas isso funciona para mim, especialmente porque eu já updatetimeconfigurei para 100(0,1 segundos), o que afeta quanto tempo até o CursorHoldevento ser disparado. Por padrão, o vim define para 4 segundos.
vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"