Milczenie powinno iść wcześniej !./make.sh, a nie wcześniej au. Wstawienie silentprzed auoznacza, że po cichu zarejestruje komendę automatyczną. Zamiast tego powinno to wyglądać tak:
au BufWritePost * silent! !./make.sh
Jednym z problemów z uruchomieniem zewnętrznego polecenia takiego jak to z tym :silentpoleceniem jest to, że ekran nie przerysowuje się, pozostawiając pusty ekran. Jednak vim ma polecenie przerysowujące ekran, którego można użyć w następujący sposób:
au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!
Powodem, dla którego muszę użyć polecenia wykonania, jest to, że :!polecenie to używa znaków znajdujących się po nim, co oznacza, że nie mogłem tego zrobić, silent! !./make.sh | redraw!ponieważ bash spróbuje zinterpretować wszystkie znaki później !.
Notatki
Zauważ, że :silent!ignoruje komunikaty o błędach, podczas :silentgdy nie. Ponadto >/dev/null 2>&1część przekierowuje wszystkie dane wyjściowe !./make.shdo /dev/null. Możesz przeczytać więcej o przekierowaniach we / wy w bash tutaj .
Drugie polecenie działało, chociaż nadal drukuje dane wyjściowe na ekranie. Ponadto nie muszę naciskać klawisza Enter po zakończeniu skryptu, co jest dobre. Ale zastanawiam się, czy jest jakiś sposób, aby całkowicie stłumić wydajność.
Andre Herman Bezerra
1
Czy wymiana execute "!./make.sh"z execute "!./make.sh >/dev/null 2>&1"pomocą? Spowoduje to przekierowanie wszystkich danych wyjściowych polecenia do /dev/null. Przeczytaj tldp.org/LDP/abs/html/io-redirection.html, aby uzyskać więcej informacji na temat przekierowania w bash.
EvergreenTree
Powinienem o tym pomyśleć! To działa. Dzięki!
Andre Herman Bezerra
7
Odpowiedź na twoje bezpośrednie pytanie jest taka, jak na @EvergreenTree. Jednak wydaje mi się, że brakuje Ci niektórych wbudowanych narzędzi Vima do budowania / kompilowania / lintowania projektów. Przede wszystkim :makelista szybkich poprawek.
Co daje :makenam korzystanie?
Używanie :makepozwala zebrać błędy na listę zwaną listą szybkich poprawek. Za pomocą tej poprawki możesz nawigować między błędami w swoich plikach, więc przeskakujesz od razu do miejsca, w którym kompilator mówi, że błąd (przydatny, prawda?).
:robić
Uruchomiony :makezostanie wykonany program make, 'makeprg'. Następnie przeanalizuj dane wyjściowe za pomocą 'errorformat'i umieść każdy wpis na liście szybkich poprawek.
Zazwyczaj 'makeprg'domyślna jest makekomenda, która uruchamia a Makefile. Jednak można zmienić 'makeprg'za pomocą :compilerpolecenia lub ustawić go bezpośrednio.
Możesz także przekazać dodatkowe argumenty :make. na przykład:make clean
Uwaga: Uruchomienie :makeczęsto pokazuje wynik polecenia na dole ekranu z monitem o naciśnięcie Enter. Wystarczy nacisnąć Enter, ponieważ wszystkie dane wyjściowe będą dostępne na liście szybkich poprawek. Możesz to stłumić za pomocą :silentnp :silent make.
Typowym niestandardowym poleceniem dla cichego wykonania jest:
command -nargs=* -bar Smake silent make <args> <bar> cwindow
lista szybkich poprawek
Po uruchomieniu :makelista poprawek będzie zawierać dane wyjściowe kompilatora.
Użyj następującego polecenia, aby poruszać się po liście poprawek.
:copen aby otworzyć okno poprawki
:cclose aby zamknąć okno poprawki
:cnext/, :cprevaby przejść do następnego / poprzedniego elementu
:ccaby wydrukować na dole aktualny błąd lub :cc 3pokazać konkretny błąd w tym przykładzie 3
Osobiście korzystam z nieuszkodzonej wtyczki Tima Pope'a, aby poruszać się po liście poprawek.
Co powiesz na :makeautomatyczne i ciche działanie?
Możesz to zrobić z :autocmddokładnie tak jak ty.
augroup auto_make
autocmd!
autocmd BufWritePost * silent make
autocmd QuickFixCmdPost *make* cwindow
augroup END
Jako bonus dodałem, otwierając okno szybkiej poprawki przez, :cwindowjeśli występują jakieś błędy.
Uwaga: Powinny być bardziej szczegółowe z tym wzorcem pliku na BufWritePostautocmd, aby niepowiązane pliki nie budowały się.
Jest jeszcze więcej ?!
Wykorzystuje tylko kilka wbudowanych poleceń Vima oraz kilka autocmd do przekonania. Istnieją oczywiście wtyczki i narzędzia, które mogą ci pomóc
Dispatch.vim może służyć do :makeasynchronicznego uruchamiania zadań.
Zwykłe stare pliki makefile. Chyba że ./script.shjest to bardzo skomplikowane, możesz rozważyć użycie make. Może skalować wykonać więcej zadań później i jest popularnym narzędziem do budowania.
Możesz użyć Vim Awesome, aby wyszukać więcej wtyczek, które mogą pomóc.
Wniosek
Osobiście integruję :makei poprawkę do własnego przepływu pracy. Wierzę, że uchwycenie wyników procesu kompilacji i błędów jest warte inwestycji. Jako dodatkowy bonus, prawdopodobnie poczujesz się bardziej komfortowo z listą szybkich poprawek i możesz używać tej listy do innych aplikacji, takich jak :grep.
execute "!./make.sh"
zexecute "!./make.sh >/dev/null 2>&1"
pomocą? Spowoduje to przekierowanie wszystkich danych wyjściowych polecenia do/dev/null
. Przeczytaj tldp.org/LDP/abs/html/io-redirection.html, aby uzyskać więcej informacji na temat przekierowania w bash.Odpowiedź na twoje bezpośrednie pytanie jest taka, jak na @EvergreenTree. Jednak wydaje mi się, że brakuje Ci niektórych wbudowanych narzędzi Vima do budowania / kompilowania / lintowania projektów. Przede wszystkim
:make
lista szybkich poprawek.Co daje
:make
nam korzystanie?Używanie
:make
pozwala zebrać błędy na listę zwaną listą szybkich poprawek. Za pomocą tej poprawki możesz nawigować między błędami w swoich plikach, więc przeskakujesz od razu do miejsca, w którym kompilator mówi, że błąd (przydatny, prawda?).:robić
Uruchomiony
:make
zostanie wykonany program make,'makeprg'
. Następnie przeanalizuj dane wyjściowe za pomocą'errorformat'
i umieść każdy wpis na liście szybkich poprawek.Zazwyczaj
'makeprg'
domyślna jestmake
komenda, która uruchamia aMakefile
. Jednak można zmienić'makeprg'
za pomocą:compiler
polecenia lub ustawić go bezpośrednio.Możesz także przekazać dodatkowe argumenty
:make
. na przykład:make clean
Uwaga: Uruchomienie
:make
często pokazuje wynik polecenia na dole ekranu z monitem o naciśnięcie Enter. Wystarczy nacisnąć Enter, ponieważ wszystkie dane wyjściowe będą dostępne na liście szybkich poprawek. Możesz to stłumić za pomocą:silent
np:silent make
.Typowym niestandardowym poleceniem dla cichego wykonania jest:
lista szybkich poprawek
Po uruchomieniu
:make
lista poprawek będzie zawierać dane wyjściowe kompilatora.Użyj następującego polecenia, aby poruszać się po liście poprawek.
:copen
aby otworzyć okno poprawki:cclose
aby zamknąć okno poprawki:cnext
/,:cprev
aby przejść do następnego / poprzedniego elementu:cc
aby wydrukować na dole aktualny błąd lub:cc 3
pokazać konkretny błąd w tym przykładzie 3Osobiście korzystam z nieuszkodzonej wtyczki Tima Pope'a, aby poruszać się po liście poprawek.
Co powiesz na
:make
automatyczne i ciche działanie?Możesz to zrobić z
:autocmd
dokładnie tak jak ty.Jako bonus dodałem, otwierając okno szybkiej poprawki przez,
:cwindow
jeśli występują jakieś błędy.Uwaga: Powinny być bardziej szczegółowe z tym wzorcem pliku na
BufWritePost
autocmd, aby niepowiązane pliki nie budowały się.Jest jeszcze więcej ?!
Wykorzystuje tylko kilka wbudowanych poleceń Vima oraz kilka autocmd do przekonania. Istnieją oczywiście wtyczki i narzędzia, które mogą ci pomóc
:make
asynchronicznego uruchamiania zadań.:write
../script.sh
jest to bardzo skomplikowane, możesz rozważyć użycie make. Może skalować wykonać więcej zadań później i jest popularnym narzędziem do budowania.Wniosek
Osobiście integruję
:make
i poprawkę do własnego przepływu pracy. Wierzę, że uchwycenie wyników procesu kompilacji i błędów jest warte inwestycji. Jako dodatkowy bonus, prawdopodobnie poczujesz się bardziej komfortowo z listą szybkich poprawek i możesz używać tej listy do innych aplikacji, takich jak:grep
.Aby uzyskać więcej pomocy, zobacz:
źródło
:make
kiedy odpowiadałem na to pytanie, ale nie uwzględniłem tego. Lepszym pomysłem jest użycie make make fore compiling.