Czy tryb Ex ma jakieś praktyczne zastosowanie?


115

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, ~/.vimrcaby 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?


13
Qi q:są zupełnie inne. Masz na myśli tylko Qprawo?
jamessan

@Jessessan, w rzeczywistości okazuje się, że nie byłam pewna ... masz rację, wydają się robić różne rzeczy, chociaż założyłem, że są w zasadzie takie same. Jeśli odpowiesz na to pytanie, może to pomóc w wyjaśnieniu, ponieważ oczywiście jestem zdezorientowany.
Andrew Ferrier,

To pytanie jest omawiane na Meta .
200_success

1
@AndrewFerrier Zapytałeś o 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.
Random832

4
Kiedy dowiesz się, co q/i q: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ć.
Sato Katsura

Odpowiedzi:


81

Qjest, jak stwierdzono, tryb ex. Nie jest całkiem użyteczne używanie interaktywne, ale istnieje, ponieważ Vima można użyć do emulacji starego expliku binarnego. W rzeczywistości wiele systemów udostępnia expolecenie, po prostu symbolicznie dowiązując je vim.

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/I q?polecenia istnieć, aby zapewnić taką samą funkcjonalność historii wyszukiwania.


63

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 vijest to tryb wizualny, exdlatego tryb Vim Ex jest po prostu emulacją ex(nadal uruchamiają ten sam kod), więc można przejść do trybu poleceń exz 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, exi 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, seda awkjednak 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 vimjest zorientowany na bufor - możesz przesuwać plik do przodu i do tyłu, jak chcesz, co czyni go tak potężnym.

Gruntownie:

sedto 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ć exstandardowego 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 pythonkonsoli), 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 bufdonie jest exmetodą zgodną z POSIX (zgodnie z instrukcją ), więc możesz rozważyć użycie findzamiast 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 retabwystarcza, ale jest kilka wad opisanych tutaj . Dodaj dodatkowe, -Vaby 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:


Można proszę pisać przykład „edycji (wielokrotny) pliki nieinteraktywnie” działanie, które jest prostsze do osiągnięcia z exniż z ed, sedalbo awk?
Sato Katsura

1
@SatoKatsura Dodano dwa praktyczne zastosowania, które dotyczą wielu plików.
kenorb

Przeglądałem dokumentację, aby lepiej zrozumieć extryb. Nie rozumiem, dlaczego masz komendę bang ( !) w poleceniu trimaliasu bufdo. Czy to nie po prostu porzuci wszystkie zmiany we wszystkich plikach oprócz ostatniego? Jeśli nie, dlaczego nie?
Wildcard,

@Wildcard Without w !zasadzie nie będzie działać, ponieważ za każdym razem, gdy przełączany jest bufor, exnarzeka na niezapisane zmiany (i zapisujemy zmiany na samym końcu xa). Ostrzeżenie można wyłączyć, ale o wiele łatwiej je dodać !.
kenorb

Rozumiem ... Chyba źle czytam dokumentację; określa, że bez! 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)
Wildcard

18

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.


13

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:

:%165,177s:here is a whole bunch of text I wnat to replace:here is the replacement:c

Aby zmienić szukany ciąg, nie można używać ruchów vim jak bw 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, kprzejść 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.


Ok dzięki. Czy na pewno q: jest wiersz polecenia Ex? Pomoc używa tylko wyrażenia „Ex” dla trybu wywołanego przez Q, ale to nie obsługuje standardowej edycji vim, o której mówisz - tylko q: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.
Andrew Ferrier

1
Szukałem, :help q:zanim zdecydowałem się użyć tego wyrażenia, ale mogę się mylić co do terminologii.
bsmith89

1
Mylę też tę terminologię. Zwykle mówię o wpisywaniu polecenia Ex jako czegoś następującego :, ale mogę tego źle użyć.
bsmith89

3
Treść twojej odpowiedzi jest poprawna, ale sposób, w jaki używasz terminologii, jest (dla mnie) nieco mylący. Myślę, że źle interpretujesz dokumentację. 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.
Bogaty

3
FWIW Myślę, że dokumentacja Vima też jest nieco zagmatwana, ponieważ miejscami odnosi się do wszystkich :poleceń jako poleceń „Ex”. IMHO tak naprawdę tylko polecenia faktycznie dostępne w Ex powinny być uważane za polecenia Ex.
Bogaty

6

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.


Przypomina mi ten wywiad . Nie pamiętam jednak, czy exkonkretnie został wspomniany.
Martin Tournoij,

Doskonały wgląd, nigdy bym o tym nie pomyślał. Dziękuję bardzo, świetna odpowiedź.
Andrew Ferrier

2

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.


-1

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

 :i 

następnie naciśnij „wprowadź i wpisz tekst. Wyjdź za pomocą ^ c. Lub wpisz wszystko w jednym wierszu poleceń, np

 :i my multiline text \with a second line.^c

1
Biorąc pod uwagę, że tryb Ex nie jest dokładnie tym samym, co tryb wiersza poleceń , wydaje się, że nie odpowiada to na pytanie. I jako dodatkowa uwaga: tryb poleceń jest niefortunnym synonimem trybu normalnego, a nie trybu wiersza poleceń.
8bittree,

Punkt „Tryb poleceń” został zajęty. Tylko pretekst, kiedy zmieniliśmy na vi nowy dodatek, wprowadzono nas jako „wizualne” (nie obecny tryb wizualny vim) w przeciwieństwie do „polecenia” - teraz np. Z drugiej strony wydaje się, że wiersz poleceń wywołuje to samo do_cmdline () co ex. Przyznaję, że nie sugeruje to żadnego „praktycznego zastosowania”.
if2
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.