Do czego służy tryb EX przetwarzania wsadowego?

20

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?

Do czego służy tryb EX przetwarzania wsadowego?

Léo Léopold Hertz 준영
źródło
@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:

ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c

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 :

vim -E -s Makefile <<-EOF
   :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
   :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
   :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
   :update
   :quit
EOF

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:

" table.vim
%!curl -s example.com 
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq

Stosowanie:

ex -s table.html < table.vim

Będzie to działać na systemach podobnych do * nix z zainstalowanym curl. Dodaj, -Vaby zobaczyć skrypt w akcji.

Więcej przykładów:


Zobacz też:

kenorb
źródło
22

Tryb Ex służy głównie do wykonywania tej samej akcji na wielu plikach.

Załóżmy, że masz 25 plików .html z:

<a href="/superuser//home.html"> ...

Zamiast otwierać każdy z nich, możesz użyć trybu Ex, aby zmienić wszystko na index.html:

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF
Jack M.
źródło
7
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.

u0b34a0f6ae
źródło
2
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).

still_dreaming_1
źródło
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.
Léo Léopold Hertz 준영