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.
less
existem 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 :map
para 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 -c
redirecionamento 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á updatetime
configurei para 100
(0,1 segundos), o que afeta quanto tempo até o CursorHold
evento ser disparado. Por padrão, o vim define para 4 segundos.
vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"