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.