Silencioso deve ir antes !./make.sh, não antes au. Colocar silentantes auapenas significa que ele registrará o comando automático silenciosamente. Em vez disso, deve ficar assim:
au BufWritePost * silent! !./make.sh
Um problema ao executar um comando externo como este com o :silentcomando é que a tela não é redesenhada, deixando uma tela em branco. No entanto, o vim possui um comando que redesenha a tela, que pode ser usado assim:
au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!
O motivo pelo qual eu preciso usar o comando execute é porque o :!comando usa qualquer caractere encontrado depois dele, o que significa que eu não poderia fazê-lo silent! !./make.sh | redraw!porque o bash tentaria interpretar todos os caracteres depois !.
Notas
Observe que :silent!ignora as mensagens de erro, enquanto :silentnão. Além disso, a >/dev/null 2>&1peça redireciona toda a saída de !./make.shpara /dev/null. Você pode ler mais sobre o redirecionamento de E / S no bash aqui .
O segundo comando funcionou, embora ainda imprima a saída na tela. Além disso, não preciso pressionar Enter quando o script terminar mais, o que é bom. Mas eu me pergunto se existe alguma maneira de suprimir totalmente a saída.
Andre Herman Bezerra
1
Substituir execute "!./make.sh"com execute "!./make.sh >/dev/null 2>&1"ajuda? Isso redireciona toda a saída do comando para /dev/null. Leia tldp.org/LDP/abs/html/io-redirection.html para obter mais informações sobre redirecionamento no bash.
EvergreenTree
Eu devia ter pensado nisso! Funciona. Obrigado!
Andre Herman Bezerra
7
A resposta para sua pergunta direta é exatamente como o @EvergreenTree postou. No entanto, sinto que você está perdendo algumas das ferramentas integradas do Vim para criar / compilar / projetar projetos. Mais notavelmente :makee a lista de correções rápidas.
O que o uso :makenos leva?
O uso :makepermite coletar seus erros em uma lista conhecida como lista de correções rápidas. Usando o quickfix, você pode navegar entre os erros em seus arquivos, para ir direto para o local onde o compilador diz que está o erro (útil, certo?).
:faço
A execução :makeexecutará o programa make 'makeprg',. Em seguida, analise a saída 'errorformat'e coloque cada entrada na lista de correções rápidas.
Normalmente, o 'makeprg'padrão é o makecomando que executa a Makefile. No entanto, você pode alterar o seu 'makeprg'através do :compilercomando ou configurá-lo diretamente.
Você também pode passar argumentos extras para :make. por exemplo:make clean
Nota: a execução :makegeralmente mostra a saída do comando na parte inferior da tela com um prompt pedindo para pressionar enter. Basta pressionar Enter, pois toda a saída estará disponível na lista de correções rápidas. Você pode suprimir isso via :silent, por exemplo :silent make.
Um comando personalizado comum para uma make silenciosa é:
command -nargs=* -bar Smake silent make <args> <bar> cwindow
lista de correções rápidas
Depois de executar :makesua lista de correções rápidas, a saída do compilador será mantida.
Use o seguinte comando para navegar na lista de correções rápidas.
:copen abrir a janela do quickfix
:cclose fechar a janela do quickfix
:cnext/ :cprevpara ir para o item seguinte / anterior
:ccimprimir na parte inferior o erro atual ou :cc 3mostrar um erro específico neste exemplo 3
Pessoalmente, uso o plug-in intacto de Tim Pope para navegar na lista de correções rápidas.
Que tal correr :makeautomaticamente e silenciosamente?
Você pode fazer isso :autocmdexatamente como você.
augroup auto_make
autocmd!
autocmd BufWritePost * silent make
autocmd QuickFixCmdPost *make* cwindow
augroup END
Como um bônus, eu adicionei ao abrir a janela do quickfix via :cwindowse houver algum erro presente.
Nota: deve ser mais específico com esse padrão de arquivo no BufWritePostautocmd para que os arquivos não relacionados não sejam construídos.
Ainda mais ?!
Isso está usando apenas alguns comandos internos do Vim, além de alguns autocmd's para convencer. É claro que existem plugins e ferramentas que podem ajudá-lo
Dispatch.vim pode ser usado para executar :maketarefas de forma assíncrona.
A sintaxe do plug-in sintático verifica o arquivo depois :write.
O Ale.vim (Asynchronous Lint Engine) é um plug-in para fornecer dicas no NeoVim e no Vim 8 enquanto você edita seus arquivos de texto.
O Unimpaired.vim facilita o gerenciamento da lista de correções rápidas.
Makefiles antigos simples. A menos que você ./script.shseja muito complicado, você pode querer usar o make. Ele pode ser escalado para realizar mais tarefas posteriormente e é uma ferramenta de construção comum.
Você pode usar o Vim Awesome para procurar mais plugins que possam ajudar.
Conclusão
Pessoalmente, :makeintegro e o quickfix ao meu próprio fluxo de trabalho. Acredito que capturar a saída do seu processo de compilação e capturar os erros valem o investimento. Como um bônus adicional, você possivelmente se sentirá mais confortável com a lista de correções rápidas e poderá usá-la para outros aplicativos, como :grep.
execute "!./make.sh"
comexecute "!./make.sh >/dev/null 2>&1"
ajuda? Isso redireciona toda a saída do comando para/dev/null
. Leia tldp.org/LDP/abs/html/io-redirection.html para obter mais informações sobre redirecionamento no bash.A resposta para sua pergunta direta é exatamente como o @EvergreenTree postou. No entanto, sinto que você está perdendo algumas das ferramentas integradas do Vim para criar / compilar / projetar projetos. Mais notavelmente
:make
e a lista de correções rápidas.O que o uso
:make
nos leva?O uso
:make
permite coletar seus erros em uma lista conhecida como lista de correções rápidas. Usando o quickfix, você pode navegar entre os erros em seus arquivos, para ir direto para o local onde o compilador diz que está o erro (útil, certo?).:faço
A execução
:make
executará o programa make'makeprg'
,. Em seguida, analise a saída'errorformat'
e coloque cada entrada na lista de correções rápidas.Normalmente, o
'makeprg'
padrão é omake
comando que executa aMakefile
. No entanto, você pode alterar o seu'makeprg'
através do:compiler
comando ou configurá-lo diretamente.Você também pode passar argumentos extras para
:make
. por exemplo:make clean
Nota: a execução
:make
geralmente mostra a saída do comando na parte inferior da tela com um prompt pedindo para pressionar enter. Basta pressionar Enter, pois toda a saída estará disponível na lista de correções rápidas. Você pode suprimir isso via:silent
, por exemplo:silent make
.Um comando personalizado comum para uma make silenciosa é:
lista de correções rápidas
Depois de executar
:make
sua lista de correções rápidas, a saída do compilador será mantida.Use o seguinte comando para navegar na lista de correções rápidas.
:copen
abrir a janela do quickfix:cclose
fechar a janela do quickfix:cnext
/:cprev
para ir para o item seguinte / anterior:cc
imprimir na parte inferior o erro atual ou:cc 3
mostrar um erro específico neste exemplo 3Pessoalmente, uso o plug-in intacto de Tim Pope para navegar na lista de correções rápidas.
Que tal correr
:make
automaticamente e silenciosamente?Você pode fazer isso
:autocmd
exatamente como você.Como um bônus, eu adicionei ao abrir a janela do quickfix via
:cwindow
se houver algum erro presente.Nota: deve ser mais específico com esse padrão de arquivo no
BufWritePost
autocmd para que os arquivos não relacionados não sejam construídos.Ainda mais ?!
Isso está usando apenas alguns comandos internos do Vim, além de alguns autocmd's para convencer. É claro que existem plugins e ferramentas que podem ajudá-lo
:make
tarefas de forma assíncrona.:write
../script.sh
seja muito complicado, você pode querer usar o make. Ele pode ser escalado para realizar mais tarefas posteriormente e é uma ferramenta de construção comum.Conclusão
Pessoalmente,
:make
integro e o quickfix ao meu próprio fluxo de trabalho. Acredito que capturar a saída do seu processo de compilação e capturar os erros valem o investimento. Como um bônus adicional, você possivelmente se sentirá mais confortável com a lista de correções rápidas e poderá usá-la para outros aplicativos, como:grep
.Para obter mais ajuda, consulte:
fonte
:make
enquanto respondia, mas não o incluí. É uma idéia melhor usar o make antes de compilar as coisas.