W samouczku wspomniano, że tryb Ex służy do przetwarzania wsadowego. Ponieważ jest to dla mnie uciążliwość, a nie narzędzie, chciałbym zobaczyć kilka praktycznych przykładów. Kto tego używa? Dlaczego?
@Masi: połącz swoje konta, aby migrowane posty były powiązane z kontem SU po migracji.
Greg Hewgill,
Odpowiedzi:
4
Vim w trybie Ex (znanym również jako ex) jest przydatny, gdy:
Potrzebujesz edycji (wielu) plików w sposób nieinteraktywny (jako część skryptu).
Twoje połączenie jest bardzo wolne lub ekran nie jest aktualizowany po twoich działaniach.
Mapowania i skróty są wyłączone.
Typowe klucze takie jak Escapelub Controlnie działają poprawnie.
Edycja plików w sposób nieinteraktywny jest najczęstszym zastosowaniem, a ludzie używają go w podobny sposób, seda awkjednak są bardziej zorientowani na strumień - odczytują plik od początku do końca, podczas gdy vimjest zorientowany na bufor - możesz poruszać się do przodu i do tyłu w pliku, jak chcesz. Po drugie, wyrażenia regularne vima są potężniejsze niż wyrażenia awk i sed (nie są zaprojektowane do pracy z wieloma liniami) - na przykład vim może dopasowywać kilka linii i obsługuje zerowe dopasowania.
Ex jest także edytorem (bezpośredni poprzednik vi), aw Vim - emuluje tryb Ex ex(nadal uruchamiają ten sam kod), więc można przejść do trybu komend exz poziomu vi i odwrotnie. Istnieje tryb Ex ( vim -e) i ulepszony tryb Ex, który pozwala na bardziej zaawansowane polecenia niż tryb Ex kompatybilny z vi ( vim -E). Zobacz: Jaka jest różnica między trybem Ex a ulepszonym trybem Ex?
Ex jest rdzeniem rodziny edytorów: edit, ex i vi. Ex jest nadzbiorem ed, z najbardziej zauważalnym rozszerzeniem, które jest narzędziem do edycji wyświetlania. ex (1)
Przykład 1
Oto prosty przykład zmiany 127do 128swojego hostspliku i wydrukować dane wyjściowe:
ex -s +%s/127/128/g +%p +q! /etc/hosts
jest równa:
sed s/127/128/g /etc/hosts
Aby uzyskać bardziej zaawansowane rozwiązanie, możesz mieć plik z poleceniami vima i używać go w bardziej klasycznym podejściu do przekierowania we / wy:
echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts
Przykład 2
Możesz także używać wtyczek vim do wykonywania niektórych zadań.
Na przykład następujący jednoliniowy konwertuje plik kodu źródłowego na HTML za pomocą jednej ze standardowych wtyczek:
Wygeneruje plik html (z podświetlaniem składni) z twojego kodu (napisanego w dowolnym obsługiwanym języku), który jest gotowy do drukowania lub opublikowania w Twojej witrynie.
Poniższy skrypt utworzy nowy plik HTML, pobierając HTML przykładowej witryny i zastępując jej ciało automatycznie wygenerowaną tabelą 20x20 z losowymi liczbami:
Byłaby to pełna - i bardziej zwięzła - implementacja for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done.
intuicyjnie,
6
Od najnowszej wersji 7.3, która jako trwałe wsparcie cofania, tryb ex i inne formy przetwarzania wsadowego vim są lepsze od innych metod innych niż vim, ponieważ nie zablokuje historii cofania.
Dodanie: „trwałe cofanie”, jeśli jest włączone, zachowuje wszystkie zmiany w pliku (do limitu) w historii cofania, między sesjami edycji vima. Jeśli plik jest edytowany przez zewnętrzny program, vim zresetuje historię cofania po wykryciu przez sumę kontrolną, że został zmieniony. vim -E pozwoli ci na edycję pliku, a edycja będzie w historii cofania.
Wydaje się to dość daleko idące, ale na pewno rozsądne i sprytne! +1
Tarrasch
1
To nie odpowiada na twoje pytanie dotyczące przetwarzania wsadowego, ale jest innym sposobem wyjaśnienia, czym jest tryb Ex. Wiesz, jak naciskasz:przejść do trybu wiersza poleceń i wprowadzać polecenia? Tryb Ex pozwala także na wprowadzanie tych samych poleceń, z wyjątkiem tego, że Vim nie opuszcza trybu Ex po wprowadzeniu polecenia, pozostaje w trybie Ex i można wprowadzić inne polecenie. Jest to więc coś w rodzaju REPL (czytaj, oceniaj, drukuj, zapętlaj), ale bez drukowania (więc tylko REL ...). Wrócę do tego, dlaczego możesz chcieć tego rodzaju REL później. Dlatego nazywa się trybem Ex, pozwala na wprowadzanie poleceń Ex, czyli tak samo jak tryb wiersza poleceń, pozwala na wprowadzanie poleceń Ex. Innym sposobem wyjaśnienia tego jest to, że pozwala on na wprowadzenie i natychmiastowe wykonanie kodu Vimscript / VimL. Vimscript / VimL to język, w którym można pisać wtyczki Vim. Jest to również język, w którym zapisujesz plik konfiguracyjny (prawdopodobnie .vimrc). Jest to również język używany podczas wprowadzania poleceń Ex z trybu wiersza poleceń lub trybu Ex. Z tego punktu widzenia tryb Ex można postrzegać jako REL VimL. Dlaczego chcesz VIML REL? Z tego samego powodu ludzie lubią REPL dla innych języków. Mogą być bardzo pomocne podczas debugowania kodu lub eksperymentowania z językiem, aby zobaczyć, jak to działa, szczególnie jeśli piszesz wtyczki w VimL lub bardzo dostosowujesz plik konfiguracyjny (co prawdopodobnie oznacza, że naruszasz zasadę SRP i powinieneś ją rozbić na wtyczki).
Byłoby wspaniale uzyskać kilka przykładów w postaci filmów pokazujących przydatność trybu ex. Nigdy nie zdawałem sobie z tego sprawy, ponieważ mogę używać menedżera okien systemu Linux i trybu wizualnego vima w :!pythonitp.
Odpowiedzi:
Vim w trybie Ex (znanym również jako
ex
) jest przydatny, gdy:Edycja plików w sposób nieinteraktywny jest najczęstszym zastosowaniem, a ludzie używają go w podobny sposób,
sed
aawk
jednak są bardziej zorientowani na strumień - odczytują plik od początku do końca, podczas gdyvim
jest zorientowany na bufor - możesz poruszać się do przodu i do tyłu w pliku, jak chcesz. Po drugie, wyrażenia regularne vima są potężniejsze niż wyrażenia awk i sed (nie są zaprojektowane do pracy z wieloma liniami) - na przykład vim może dopasowywać kilka linii i obsługuje zerowe dopasowania.Ex jest także edytorem (bezpośredni poprzednik vi), aw Vim - emuluje tryb Ex
ex
(nadal uruchamiają ten sam kod), więc można przejść do trybu komendex
z poziomu vi i odwrotnie. Istnieje tryb Ex (vim -e
) i ulepszony tryb Ex, który pozwala na bardziej zaawansowane polecenia niż tryb Ex kompatybilny z vi (vim -E
). Zobacz: Jaka jest różnica między trybem Ex a ulepszonym trybem Ex?Przykład 1
Oto prosty przykład zmiany
127
do128
swojegohosts
pliku i wydrukować dane wyjściowe:jest równa:
Aby uzyskać bardziej zaawansowane rozwiązanie, możesz mieć plik z poleceniami vima i używać go w bardziej klasycznym podejściu do przekierowania we / wy:
Przykład 2
Możesz także używać wtyczek vim do wykonywania niektórych zadań.
Na przykład następujący jednoliniowy konwertuje plik kodu źródłowego na HTML za pomocą jednej ze standardowych wtyczek:
Wygeneruje plik html (z podświetlaniem składni) z twojego kodu (napisanego w dowolnym obsługiwanym języku), który jest gotowy do drukowania lub opublikowania w Twojej witrynie.
Przykład 3
Lub jakiś rzeczywisty przykład ze specyfikacji RPM :
Przykład 4
Poniższy skrypt utworzy nowy plik HTML, pobierając HTML przykładowej witryny i zastępując jej ciało automatycznie wygenerowaną tabelą 20x20 z losowymi liczbami:
Stosowanie:
Więcej przykładów:
Zobacz też:
źródło
Tryb Ex służy głównie do wykonywania tej samej akcji na wielu plikach.
Załóżmy, że masz 25 plików .html z:
Zamiast otwierać każdy z nich, możesz użyć trybu Ex, aby zmienić wszystko na
index.html
:źródło
for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done
.Od najnowszej wersji 7.3, która jako trwałe wsparcie cofania, tryb ex i inne formy przetwarzania wsadowego vim są lepsze od innych metod innych niż vim, ponieważ nie zablokuje historii cofania.
Dodanie: „trwałe cofanie”, jeśli jest włączone, zachowuje wszystkie zmiany w pliku (do limitu) w historii cofania, między sesjami edycji vima. Jeśli plik jest edytowany przez zewnętrzny program, vim zresetuje historię cofania po wykryciu przez sumę kontrolną, że został zmieniony. vim -E pozwoli ci na edycję pliku, a edycja będzie w historii cofania.
źródło
To nie odpowiada na twoje pytanie dotyczące przetwarzania wsadowego, ale jest innym sposobem wyjaśnienia, czym jest tryb Ex. Wiesz, jak naciskasz
:
przejść do trybu wiersza poleceń i wprowadzać polecenia? Tryb Ex pozwala także na wprowadzanie tych samych poleceń, z wyjątkiem tego, że Vim nie opuszcza trybu Ex po wprowadzeniu polecenia, pozostaje w trybie Ex i można wprowadzić inne polecenie. Jest to więc coś w rodzaju REPL (czytaj, oceniaj, drukuj, zapętlaj), ale bez drukowania (więc tylko REL ...). Wrócę do tego, dlaczego możesz chcieć tego rodzaju REL później. Dlatego nazywa się trybem Ex, pozwala na wprowadzanie poleceń Ex, czyli tak samo jak tryb wiersza poleceń, pozwala na wprowadzanie poleceń Ex. Innym sposobem wyjaśnienia tego jest to, że pozwala on na wprowadzenie i natychmiastowe wykonanie kodu Vimscript / VimL. Vimscript / VimL to język, w którym można pisać wtyczki Vim. Jest to również język, w którym zapisujesz plik konfiguracyjny (prawdopodobnie .vimrc). Jest to również język używany podczas wprowadzania poleceń Ex z trybu wiersza poleceń lub trybu Ex. Z tego punktu widzenia tryb Ex można postrzegać jako REL VimL. Dlaczego chcesz VIML REL? Z tego samego powodu ludzie lubią REPL dla innych języków. Mogą być bardzo pomocne podczas debugowania kodu lub eksperymentowania z językiem, aby zobaczyć, jak to działa, szczególnie jeśli piszesz wtyczki w VimL lub bardzo dostosowujesz plik konfiguracyjny (co prawdopodobnie oznacza, że naruszasz zasadę SRP i powinieneś ją rozbić na wtyczki).źródło
:!python
itp.