Bir vim otomatik kodundan çıkışı bastırın


13

Benim vimrc tanımlanmış bir otocommand var:

au BufWritePost * !./make.sh

Komut dosyası make.shbir .texdosyayı 3 kez derler ve çıktının görüntülenmesini istemiyorum.

Çıktıyı bastırmanın bir yolu var mı?

silentKomuttan önce bir satır eklemeye çalıştım au, ama işe yaramadı. Ben de bu şekilde başarılı olamadım.

Yanıtlar:


20

Sessiz önce gitmeli !./make.sh, daha önce değil au. Daha silentönce koymak au, otomatik komutun sessizce kaydedileceği anlamına gelir. Bunun yerine şöyle görünmelidir:

au BufWritePost * silent! !./make.sh

Komutla böyle bir harici komut çalıştırmayla ilgili bir sorun :silent, ekranın yeniden çizilmemesi ve size boş bir ekran bırakmasıdır. Bununla birlikte, vim, ekranı yeniden çizen ve şu şekilde kullanılabilen bir komut içerir:

au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!

Execute komutunu kullanmamın nedeni, :!komuttan sonra bulunan herhangi bir karakteri kullanmasıdır, yani silent! !./make.sh | redraw!bash bundan sonra tüm karakterleri yorumlamaya çalışacağı için yapamadım !.

notlar

Not :silent!oysa hata mesajları görmezden :silentyok. Ayrıca, >/dev/null 2>&1parça tüm çıktılarını !./make.shiçin yönlendirir /dev/null. Burada i / o yönlendirmesi hakkında daha fazla bilgiyi bash'de bulabilirsiniz .

İlgili Yardım Konuları

  • :help :execute
  • :help :silent
  • :help :!
  • :help :bar

İkinci komut hala ekranda çıktı yazdırmasına rağmen çalıştı. Ayrıca, komut dosyası artık sona erdiğinde Enter tuşuna basmaya gerek yok, ki bu iyi. Ama çıktıyı tamamen bastırmanın herhangi bir yolu olup olmadığını merak ediyorum.
Andre Herman Bezerra

1
Değiştirilmesi mu execute "!./make.sh"ile execute "!./make.sh >/dev/null 2>&1"yardım? Bu, komutun tüm çıktılarını konumuna yönlendirir /dev/null. Bash'de yeniden yönlendirme hakkında daha fazla bilgi için tldp.org/LDP/abs/html/io-redirection.html adresini okuyun .
EvergreenTree

Bunu düşünmeliydim! İşe yarıyor. Teşekkürler!
Andre Herman Bezerra

7

Doğrudan sorunuzun cevabı, @EvergreenTree'nin paylaştığı gibidir. Ancak, bina / derleme / linting projeleri için bazı Vim yerleşik aracını eksik gibi hissediyorum. En önemlisi :makeve hızlı düzeltme listesi.

Kullanmak :makebizi ne elde ediyor?

:makeSeçeneğini kullanmak , hatalarınızı hızlı düzeltme listesi olarak bilinen bir listede toplamanızı sağlar. Hızlı düzeltmeyi kullanarak dosyalarınızdaki hatalar arasında gezinebilirsiniz, böylece derleyicinin hatanın söylediği yere atlarsınız (kullanışlı değil mi?).

:Yapmak

Koşu :makeyapmak programı yürütecek 'makeprg',. Ardından çıktıyı ayrıştırın 'errorformat've her girdiyi hızlı düzeltme listesine koyun.

Genellikle 'makeprg', a makekomutunu çalıştırır Makefile. Ancak size değiştirebilir 'makeprg'aracılığıyla :compilerkomuta veya doğrudan ayarlayın.

Ayrıca ek argümanlar da iletebilirsiniz :make. Örneğin:make clean

Not: run :makekomutu genellikle ekranın altındaki komutun çıkışını enter tuşuna basmanızı isteyen bir komut istemiyle gösterir. Tüm çıktılar hızlı düzeltme listesinde bulunacağından enter tuşuna basmanız yeterlidir. Bunu :silent, örn :silent make.

Sessiz bir marka için ortak bir özel komut:

command -nargs=* -bar Smake silent make <args> <bar> cwindow

hızlı düzeltme listesi

Çalıştırdıktan sonra :makequickfix listeniz derleyicinin çıktısını tutacaktır.

Hızlı düzeltme listesinde gezinmek için aşağıdaki komutu kullanın.

  • :copen hızlı düzeltme penceresini açmak için
  • :cclose hızlı düzeltme penceresini kapatmak için
  • :cnext/ :cprevsonraki / önceki öğeye gitmek için
  • :ccgeçerli hatayı alttan yazdırmak veya :cc 3bu örnekte belirli bir hatayı göstermek için 3

Şahsen Tim Papa'nın kullanmak zarar görmemiş QuickFix listesinde gezinmek için eklenti.

:makeOtomatik ve sessiz koşmaya ne dersiniz ?

Bunu :autocmdsizin gibi bir yerde yapabilirsiniz.

augroup auto_make
    autocmd!
    autocmd BufWritePost * silent make
    autocmd QuickFixCmdPost *make* cwindow
augroup END

Bonus olarak :cwindow, herhangi bir hata varsa quickfix penceresini açmaya ekledim .

Not: BufWritePostİlişkili olmayan dosyaların oluşturulmaması için autocmd'deki dosya desenine daha açık olmalıdır.

Dahası var mı ?!

Bu, Vim'in yerleşik komutundan sadece birkaçını ve ikna etmek için birkaç autocmd'yi kullanıyor. Tabii ki size yardımcı olabilecek eklentiler ve araçlar var

  • Dispatch.vim , :makeişleri eşzamansız olarak çalıştırmak için kullanılabilir .
  • Sözdizimi eklentisi sözdizimi dosyayı sonra denetler :write.
  • Ale.vim (Asynchronous Lint Engine), metin dosyalarınızı düzenlerken NeoVim ve Vim 8'de linting sağlayan bir eklentidir.
  • Unimpaired.vim , hızlı düzeltme listesini yönetmeyi kolaylaştırır.
  • Düz eski Makefiles. Sizin ./script.shçok karmaşık olmadığı sürece make kullanarak bakmak isteyebilirsiniz. Daha sonra daha fazla görev yapabilir ve ortak bir yapı aracıdır.
  • Yardımcı olabilecek daha fazla eklenti aramak için Vim Awesome uygulamasını kullanabilirsiniz .

Sonuç

Şahsen ben :makekendi iş akışımı entegre ve hızlı düzeltme. Yapım sürecinizin çıktısını yakalamanın ve hataları yakalamanın yatırıma değecek olduğuna inanıyorum. Ek bir bonus olarak, hızlı düzeltme listesiyle daha rahat olursunuz ve listeyi diğer uygulamalar için kullanabilirsiniz :grep.

Daha fazla yardım için bkz:

:h :make
:h quickfix
:h 'makeprg'
:h 'errorformat'
:h :compiler
:h :copen
:h :cwindow
:h :cnext
:h :cc

Buna :makecevap verirken düşündüm , ama dahil etmedim. Bir şeyleri derlemek için kullanmak daha iyi bir fikirdir.
EvergreenTree

autocmd yalnızca makeprg'yi belirli bir dosyada çalıştırmak için nasıl değiştirilir.
İbn Saeed
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.