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?
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?
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
a awk
jednak są bardziej zorientowani na strumień - odczytują plik od początku do końca, podczas gdy vim
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 komend ex
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?
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)
Oto prosty przykład zmiany 127
do 128
swojego hosts
pliku 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
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.
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
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,
-V
aby zobaczyć skrypt w akcji.
Więcej przykładów:
Zobacz też:
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
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.
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).
:!python
itp.