Vim ma tryb Ex, który można wprowadzić Q, wprowadzając , oraz tryb wiersza poleceń, który można wprowadzić za pomocą q:. Powszechną skargą wśród nowych użytkowników vima jest to, że wchodzą oni w te tryby przypadkowo, gdy próbują wyjść z vima. W związku z tym wyłączam te klucze w moim, ~/.vimrc
aby zapobiec przypadkowemu uderzeniu ich (szczególnie q:):
map q: <Nop>
nnoremap Q <nop>
Chociaż przeczytałem dokumentację vima na temat Ex , jestem średnio doświadczonym użytkownikiem Vima i rozumiem podstawową ideę tego, wciąż staram się znaleźć dla niego jakiekolwiek zastosowanie w moim codziennym użyciu vim. Zasadniczo wydaje się to mniej użyteczne niż zwykłe wpisanie standardowej komendy wiersza poleceń vim z prefiksem :, ponieważ zmiany nie są natychmiast powtarzane.
Czy Ex ma jakieś praktyczne zastosowanie w nowoczesnym Vimie? Czy jest coś łatwiejszego do zrobienia w trybie Ex niż przy użyciu standardowych poleceń? Jaka jest różnica między trybem wiersza poleceń a trybem ex?
Q
iq:
są zupełnie inne. Masz na myśli tylkoQ
prawo?q:
konkretnie i wymieniłeś to jako jedną z dwóch kluczowych sekwencji, z którą masz największy problem. Dwie odpowiedzi tutaj mogą być przydatne dla osób, które szukają go za pomocą prawidłowego terminu.q/
iq:
robisz, prawdopodobnie będziesz uważał je za jedne z najbardziej przydatnych poleceń w Vimie. I tak, już wiesz, jak z nich korzystać, po prostu jeszcze nie wiesz, co oni robią. Obejrzyj ten screencast, aby się dowiedzieć.Odpowiedzi:
Q
jest, jak stwierdzono, tryb ex. Nie jest całkiem użyteczne używanie interaktywne, ale istnieje, ponieważ Vima można użyć do emulacji staregoex
pliku binarnego. W rzeczywistości wiele systemów udostępniaex
polecenie, po prostu symbolicznie dowiązując jevim
.q:
, lub:<C-f>
zamiast tego umożliwia przeglądanie historii wiersza poleceń i edytowanie jej jak zwykłego bufora. Ułatwia to odnalezienie poprzedniej komendy, edycję jej za pomocą normalnych komend Vima, a następnie uruchomienie zmodyfikowanej komendy.q/
Iq?
polecenia istnieć, aby zapewnić taką samą funkcjonalność historii wyszukiwania.źródło
Vim w trybie Ex jest przydatny, gdy:
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?Edycja plików nieinteraktywnie jest najczęściej wykorzystywany i ludzi wykorzystuje je w podobny sposób,
sed
aawk
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 gdyvim
jest zorientowany na bufor - możesz przesuwać plik do przodu i do tyłu, jak chcesz, co czyni go tak potężnym.Gruntownie:
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 zed
) .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:
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
:Uwaga: Używanie
bufdo
nie jestex
metodą zgodną z POSIX (zgodnie z instrukcją ), więc możesz rozważyć użyciefind
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 .:
Drugi konwertuje wszystkie tabulatory na spacje (rekurencyjnie), np .:
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ź:
Jak przekonwertować plik kodu źródłowego na HTML?
Na przykład
Dowiedz się więcej o trybie Ex na:
źródło
ex
niż zed
,sed
alboawk
?ex
tryb. Nie rozumiem, dlaczego masz komendę bang (!
) w poleceniutrim
aliasubufdo
. Czy to nie po prostu porzuci wszystkie zmiany we wszystkich plikach oprócz ostatniego? Jeśli nie, dlaczego nie?!
zasadzie nie będzie działać, ponieważ za każdym razem, gdy przełączany jest bufor,ex
narzeka na niezapisane zmiany (i zapisujemy zmiany na samym końcuxa
). Ostrzeżenie można wyłączyć, ale o wiele łatwiej je dodać!
.!
komenda nie powiedzie się, jeśli bufor nie może być opuszczony, ale nie precyzuje, które!
spowoduje, że bufor nie wyrzucić .... Więc, czy „opuszczony” w tym przypadku oznacza „spadła , ponieważ nie zawiera niczego, co nie zostało zapisane na dysku „? Albo co? (Patrzę na:help bufdo
)Rzadko używam trybu ex, ale kiedy go potrzebuję, jestem wdzięczny za jego istnienie.
Czasami uzyskuję dostęp do systemów za pośrednictwem ssh przez VPN, a połączenia te mogą czasem być wolne. Co gorsza, czasami muszę edytować plik po stronie zdalnej, który oprócz tego, że stoi za ssh i VPN, korzysta z wolnego połączenia szeregowego (więc 9600 bodów plus duże opóźnienie sieci).
W takich momentach sprzężenie wizualne i aktualizacje ekranu stają się bardziej przeszkodą, ponieważ to, co widzę, jest opóźnione (efekt przypomina rozmowę do mikrofonu, ale z głośnikami daleko, jak na stadionie sportowym. Działania stają się niepewne. i czasami mylone z powodu opóźnionego sprzężenia zwrotnego).
W takim przypadku nieudzielanie echa zmian jest przydatną zaletą, ponieważ mogę zrobić więcej w krótszym czasie, gdy nie czekam na aktualizację ekranu.
Kiedy skończę wprowadzać zmiany, wracam do trybu wizualnego, aby dokonać jednorazowej aktualizacji ekranu, aby przejrzeć moją pracę. Następnie mogę wrócić do trybu ex-save lub zapisać, ponieważ skończyłem.
źródło
Okno wiersza poleceń jest przydatne do pisania długich skomplikowanych poleceń. Ponieważ historia poleceń otwiera się jako okno, możesz użyć dowolnej nawigacji vim lub edytować polecenie / mapowanie.
Załóżmy, że chcesz edytować długie polecenie podstawienia, które uruchomiłeś raz, ale popełniłeś błąd:
Aby zmienić szukany ciąg, nie można używać ruchów vim jak
b
w wierszu Ex do nawigacji (chociaż uważam, że istnieją kluczowe odwzorowania dla tej nawigacji). Zamiast tego większość ludzi naciskałaby klawisz strzałki w lewo kilka razy.Lepszy sposób: naciśnij,
q:
aby przejść do okna wiersza polecenia,k
przejść do ostatniego polecenia i normalnymi ruchami nawigować do części polecenia, którą chcesz zmienić. Chce zmienić całe słowo, nie ma problemu:ciw
.źródło
q:
jest wiersz polecenia Ex? Pomoc używa tylko wyrażenia „Ex” dla trybu wywołanego przezQ
, ale to nie obsługuje standardowej edycji vim, o której mówisz - tylkoq:
robi, co pomoc po prostu nazywa „trybem wiersza poleceń”. Wiem, że na początku myliłem te dwie rzeczy, ale prawdopodobnie powinniśmy upewnić się, że nie mamy wątpliwości co do tego rozróżnienia.:help q:
zanim zdecydowałem się użyć tego wyrażenia, ale mogę się mylić co do terminologii.:
, ale mogę tego źle użyć.q:
nie otwiera wiersza polecenia Ex. Otwiera okno historii poleceń , w którym można edytować bieżące i poprzednie polecenia Ex. Wiersz polecenia Ex jest dostępny po naciśnięciu:
w trybie normalnym.:
poleceń jako poleceń „Ex”. IMHO tak naprawdę tylko polecenia faktycznie dostępne w Ex powinny być uważane za polecenia Ex.Osoba o częściowym wzroku, która oślepła, powiedziała mi, że przechodzi na eks, więc to jedno z nich. Sam jestem znacznie starszy od vi i dawno temu przeszedłem z ed na ex (tak, wiem, „ed jest edytorem standardowym”). Jedyne, co robię w trybie vi, to odbijanie%, aby dopasować pareny podczas pisania kodu Lisp.
źródło
ex
konkretnie został wspomniany.Oprócz wspomnianych już zastosowań ex jest także sposobem edycji plików na konsoli linux, jeśli tak się dzieje na platformie S / 390, a konsola okazuje się zorientowana liniowo zamiast ekranowo.
źródło
Pierwotny „ex” był zaktualizowaną wersją edytora tekstu „ed” w systemie Unix. W 2BSD dodano tryb wizualny, a nowy edytor nazwano „vi”.
Jeśli ktoś chce użyć linii poleceń ex, przejdzie do trybu poleceń klawiszem „:”. Tak więc, w moim najlepszym rozumieniu, ex nie ma nostalgii, po części chodzi o tryb poleceń.
Możesz także przejść do trybu wstawiania przez
następnie naciśnij „wprowadź i wpisz tekst. Wyjdź za pomocą ^ c. Lub wpisz wszystko w jednym wierszu poleceń, np
źródło