Vim w trybie 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.
Zasadniczo vi
jest to tryb wizualny, ex
dlatego tryb Vim Ex jest po prostu emulacją ex
(nadal uruchamiają ten sam kod), więc można przejść do trybu poleceń ex
z poziomu vi i odwrotnie. W rzeczywistości istnieją dwa tryby: tryb Ex ( vim -e
) i ulepszony tryb Ex, który pozwala na stosowanie bardziej zaawansowanych poleceń niż tryb Ex kompatybilny z vi ( vim -E
). Zobacz: Jaka jest różnica między trybem Ex a ulepszonym trybem Ex?
Ex jest korzeniem rodziny redakcji: edit
, ex
i vi
. Ex jest supersetem ed
, a najbardziej znaczącym rozszerzeniem jest funkcja edycji ekranu. ex (1)
Edycja plików nieinteraktywnie jest najczęściej wykorzystywany i ludzi wykorzystuje je w podobny sposób, sed
a awk
jednak oni są bardziej zorientowane na strumień - one tylko odczytać pliku do przodu od początku do końca (nie są one przeznaczone do pracy z wieloma liniami ) podczas gdy vim
jest zorientowany na bufor - możesz przesuwać plik do przodu i do tyłu, jak chcesz, co czyni go tak potężnym.
Gruntownie:
sed
to iterator S tream ED , a nie edytor plików.
Niemniej jednak wydaje się, że ludzie nadużywają go podczas próby edycji plików, a prawda jest taka, że nie edytuje plików. Po drugie, opcje takie jak in-place ( -i
) są niestandardowymi rozszerzeniami FreeBSD i mogą nie być dostępne w innych systemach operacyjnych. Jeśli więc chcesz uniknąć kodu, którego nie można przenieść, narzutu we / wy i złych efektów ubocznych (takich jak niszczenie dowiązań symbolicznych), powinieneś użyć ex
standardowego edytora BashFAQ opartego na komendach UNIX (wraz z ed
) .
Inne rzeczy, które uważam za przydatne w trybie Ex, to używanie go jako placu zabaw (podobnego do python
konsoli), w którym możesz wykonywać wiele poleceń z rzędu, pracować / debugować wyrażenia regularne, sprawdzać konfigurację vima, wykonywać polecenia zewnętrzne lub pracować z rejestrami itp. .
Na przykład:
let @d = '<td></td>'
let @r = '<tr>' . repeat(@d, 5) . '</tr>'
echo @r
let @t = '<table>' . repeat(@r, 5) . '</table>'
reg
co jest łatwiejsze w trybie Ex niż w trybie normalnym (gdzie widać tylko swoje ostatnie polecenie).
Praktyczne zastosowania
Mam w sobie następujące aliasy .bash_aliases
:
alias trim="ex +'bufdo!%s/\s\+$//e' -scxa"
alias retab="ex +'set ts=2' +'bufdo retab' -scxa"
Uwaga: Używanie bufdo
nie jest ex
metodą zgodną z POSIX (zgodnie z instrukcją ), więc możesz rozważyć użycie find
zamiast niego. !
Służy do wymuszenia przełączanie buforów bez zapisywania (inaczej ostrzeżenie jest generowany).
Pierwszego używam do przycinania końcowych spacji we wszystkich moich plikach źródłowych, np .:
trim **/*.php
Drugi konwertuje wszystkie tabulatory na spacje (rekurencyjnie), np .:
retab **/*.php
Dla mnie używanie retab
wystarcza, ale jest kilka wad opisanych tutaj . Dodaj dodatkowe, -V
aby zwiększyć wyjściową szczegółowość.
Zauważ, że powyższe przykłady używają zsh / bash4 globbing ( **
), więc upewnij się, że twoja powłoka je obsługuje i jest włączona.
Aby uzyskać bardziej praktyczne przykłady (takie jak analizowanie plików HTML), sprawdź:
Dowiedz się więcej o trybie Ex na:
Q
iq:
są zupełnie inne. Masz na myśli tylkoQ
prawo?