Zalety korzystania z set -o vi


55

Widziałem wielu programistów używających tego polecenia, aby ustawić opcję vi. Nigdy nie zrozumiałem prawdziwego wykorzystania tego?

W przypadku korzystania z poleceń bash pomaga przejście na vi?

Odpowiedzi:


58

Ustawiając edycję readline na emacs (domyślną) lub vi ( set -o vi), zasadniczo ujednolicasz swoje polecenia edycyjne w powłoce i wybranym edytorze 1 .

Tak więc, jeśli chcesz edytować polecenie w powłoce, używasz tych samych poleceń 2, które byś zrobił, gdybyś był w edytorze tekstu. Oznacza to, że musisz zapamiętać tylko jedną składnię poleceń i (jeśli nie byłoby to wystarczającą zaletą) prawdopodobnie spowodowałoby to, że edytowanie w obu środowiskach było szybsze i mniej podatne na błędy ...

Możesz dodatkowo wykorzystać tę relację w trybie vi, wyciągając dowolne polecenie z historii powłoki, naciskając, Escapeaby przejść do trybu poleceń, a następnie naciskając v, co otworzy edytor $ EDITOR z załadowanym poleceniem, umożliwiającym bardziej złożoną edycję z pełną mocą vima. Po zakończeniu edycji polecenia według własnego uznania, :wqa polecenie zostanie ponownie wykonane w powłoce.


1. Zakładając oczywiście, że używasz Emacsa lub Vi / m jako edytora.
2. Lub, dokładniej, jego podzbiór ...


1
Mam świętego Graala:) ....
— Sathyam

3
Sztuczka Esc-v jest jedną z najlepszych cech, set -o viktórych większość ludzi nie zna. Jest to szczególnie ważne, jeśli chcesz wydać to samo polecenie wiele razy z różnymi argumentami (jako wiele poleceń z wiersza poleceń).
— Michael Goldshteyn

2
Sztuczka Esc-v nie jest tak naprawdę specyficzną zaletą set -o vi. Przy domyślnym ustawieniu set -o EMACSCx, Ce wyświetli okno emacsa (lub $EDITOR, jeśli ustawione), w którym możesz edytować polecenie przed jego uruchomieniem.
— John Gowers

8

Tryb Vi to ogromna poprawa użyteczności, jeśli używasz mobilnego klienta SSH, takiego jak ConnectBot na Androida.

Wynika to ze zmniejszonego polegania na klawiszach modyfikujących.

Vim jest znacznie łatwiejszy w użyciu z wirtualną klawiaturą na smartfonie lub tablecie niż ... cokolwiek innego, w tym natywne metody edycji wbudowane w interfejs użytkownika Androida. Jak na ironię, łatwiej jest edytować źródła C za pomocą Vima w sesji SSH niż edytować, powiedzmy, wiadomość błyskawiczną z własnym widgetem edycji platformy w tym celu.

Tryb Shell vi zapewnia podobną korzyść.


Mam nadzieję, że na klawiaturze telefonu jest tryb vi. Wspominasz, że to tak, jakby już istniało. Jak uzyskać tryb vi na telefonie?
— meh

6

Pozwala edytować rzeczy w linii poleceń za pomocą trybów i operacji vi.

Przykład pomoże uczynić go bardziej zrozumiałym:

Ty pisz cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

ale pojawia się błąd - nie powinieneś file1.txtpisaćfile1.xt

Bez tej opcji naciśniesz strzałkę w górę, a następnie strzałkę w lewo i pozwól, aby powtarzała się ... 35 razy, aż dojdziesz do, .xta następnie wpiszesz dodatkowe t. Całkowita liczba naciśnięć klawiszy: 37 .

Z tym zestawem opcji możesz (na przykład) nacisnąć raz strzałkę w górę, następnie Escape w trybie poleceń, 0, aby przejść na początek linii, a następnie /xt[return]przejść do, xta następnie możesz iwpisać tryb wstawiania i wpisać brakujące t. To może wydawać się niezwykle skomplikowane pod pewnymi względami, ale jeśli jesteś użytkownikiem vima, to polecenie jest już bardzo dobrze znane. Łączna liczba naciśnięć klawiszy: 9


1
Możesz także użyć kilku Alt+Bs lub A Ctrl+Alt+] .w trybie Emacsa, więc nie wydaje mi się to dobrym przykładem.
— Mikel

2
Skoro jesteśmy w golfa: tryb Emacs: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi mode: Up, F, ., a, t, Enter= 7. :)
— Mikel

@Mikel zapomniałeś, że tryb vi zaczyna się w trybie wstawiania, więc też Esctam jesteś , to martwy żar.
— dragon788

5

Nie jestem pewien, czy istnieje bezpośrednia korzyść. Jestem viużytkownikiem od ponad 20 lat. Jestem także screenużytkownikiem jeszcze dłużej i innych programów, które używają vikluczy. Naturalnie wolę ustawić tryb „vi” w bash. Ale pracuję również na setkach serwerów w mojej pracy, większość z nich jest ustawiona na domyślny tryb „emacs”. Więc muszę użyć obu trybów. Ale tak naprawdę to tylko kwestia preferencji.


Podobna sytuacja dla mnie - używam dużo vima, ale zawsze znajdowałem mniej pracy, aby stać się biegłym w domyślnych klawiszach readline podobnych do emacsa (które mogą być tak wygodne jak podzbiór vi) niż dodawanie przełączania linii do trybu vi na każdym nowym systemie, z którym się spotykam.
— jw013

1
Nie pracuję na setkach serwerów, ale używam sshrc, aby zachować konfigurację bash na różnych komputerach podczas sshing. Oczywiście to nie pomaga, gdy korzystam z lokalnej maszyny, na której nie ma moich .bashrcrzeczy.
— Kyle Strand

4

Główną zaletą jest modalna edycja linii poleceń. Jeśli znasz Vima i lubisz jego filozofię, korzyści muszą być oczywiste. Jeśli masz z tym doświadczenie, pamięć mięśni palca sprawi, że będziesz edytować swoje błyskawiczne polecenia.

Uwaga : Jeśli nie lubisz edycji modalnej, powinieneś nauczyć się korzystać z (domyślnego) trybu emacs. Oto kilka fajnych skrótów klawiaturowych, które będą działać na każdym procesie readline, na przykład bash.


1

Jeśli się przyzwyczaisz vi, ustawisz tryb vi jako edytor powłoki. To byłby oczywisty powód. Drugi jest wtedy, gdy bashnie jest dostępna domyślnie w niektórych systemach operacyjnych (głównie UNIX jak AIX, Solaris), więc funkcja historia powłoka nie jest dostępny, więc sposób można uzyskać minione poleceń przez ustawienie edytora powłoki do vi, i Esc, Ctrl+ Klub Ctrl+L


1

Pozwala na łatwą nawigację i edycję wiersza poleceń za pomocą skrótów vima, np. Szybkie przejście do jednego słowa w prawo, usunięcie słowa.

Według domyślnych skrótów, kiedy musisz przejść do końca linii, musisz Ctrl+ e, podczas gdy za pomocą set -o vi, po prostu naciskasz $, jak w vimie.


1

Prawdopodobnie późno na imprezę, ale dla mnie korzystanie z trybu vi polega bardziej na tworzeniu interaktywnych skryptów ... na przykład

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

bardzo prosty przykład tego, co może być dość skomplikowane .. użycie ESCkvpowoduje przejście do sesji vi, w której można zmodyfikować skrypt, a następnie :wquruchamia się.


1
Może to być dobry przykład użycia bash w vitrybie, ale jest to zły przykład kodu bash. (1) Używanie danych wyjściowych lsjako danych wejściowych do dowolnego innego przetwarzania jest złym pomysłem. (2) $(…)Składnia podstawiania poleceń jest powszechnie uważana za bardziej czytelną niż `…`składnia. (3) Zawsze powinieneś cytować zmienne powłoki, chyba że masz dobry powód, aby tego nie robić i jesteś pewien, że wiesz, co robisz.
— G-Man,
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.