Uruchom skrypt bash z vima

21

Używam vima do tworzenia skryptów bash. Chodzi o to, że czasami nie chcę tworzyć nowego pliku, uczynić go wykonywalnym, wykonać go, a następnie usunąć. Mam na myśli skrypty, które zostaną użyte tylko raz.

Na przykład otwieram vima i wpisuję to:

#!/bin/bash

ll | while read line
do
    echo $line
done

Nie zapisałem tego pliku, po prostu używam vima, aby uprościć skrypty bash. Wiem, że mogę wykonać polecenie bash poprzez !vim. Ale co z wykonywaniem wszystkiego, co znajduje się w buforze?

St.Antario
źródło
4
Wiesz, że możesz edytować bieżący wiersz poleceń w Vimie <C-x><C-e>i wykonać go podczas zapisu, prawda?
romainl,
Jeśli uruchomisz bash z tą opcją set -o vi, możesz nacisnąć, Esc-vaby edytować wiersz poleceń w vi. Następnie Esc-:wqwykonać.
roblogic

Odpowiedzi:

35

Napisałem dość obszerną odpowiedź na ten temat przy przepełnieniu stosu . Podstawową ideą jest to, że skoro w poleceniu write chodzi o zapisywanie, a nie zapisywanie , możesz zapisać tekst w buforze do zewnętrznego programu, takiego jak python lub bash. W twoim przypadku chciałbyś zrobić coś takiego:

:w !bash

lub

:w !sh

Te polecenia dosłownie zapisują tekst w buforze bezpośrednio do określonego programu !, co jest wygodne, ponieważ wtedy nie trzeba zapisywać pliku. Oczywiście możesz także zrobić coś takiego:

:w | !bash %

który zapisuje twój plik, a następnie uruchamia go jako skrypt bash. Możesz wybrać, który z nich będzie dla ciebie bardziej sensowny.

DJMcMayhem
źródło
Czy istnieje sposób podania argumentów w ten sposób? Próbowałem, :w !bash -a testale dostałem „nie można wykonać pliku binarnego”
St.Antario
@ St.Antario Hmm. Jestem pewien, że musi być jakiś sposób, ale moja bash jest dość zardzewiała (używam głównie okien). Kiedy próbuję tego w cygwinie z pustym testplikiem, działa to dla mnie dobrze. Co ma zrobić polecenie i co powinno testzawierać?
DJMcMayhem
Moja rzeczywista sprawa jest dość skomplikowana, więc pozwól mi po prostu wydrukować przekazany argument. BTW, co masz na myśli, co powinien test zawierać? testjest tylko argumentem -a.
St.Antario
1
@ St.Antario Och, OK, rozumiem. Myślałem, że testpowinien to być plik. Nie jestem do końca pewien, co robić. Jeśli próbujesz czegoś złożonego, lepiej po prostu zapisać go w pliku. Warto zadać osobne pytanie, aby podać więcej szczegółów. Prawdopodobnie byłoby to również dobre pytanie dla Uniksa i Linuksa
DJMcMayhem
4

Scenariusz: pracujesz w powłoce bash. Najpierw upewnij się, że tryb edycji lokalnej to vi:

$ set -o vi

Teraz, gdy zauważysz, że pracujesz nad długim poleceniem, takim jak poniżej, naciśnij Esc+ v.

$ fjhwfq this is my long command

Spowoduje to załadowanie polecenia do visesji tymczasowej . Teraz możesz go edytować według własnego uznania, a nawet dodać kolejne polecenie ...

fjhwfq some long command
ls -l

Po zakończeniu edycji wpisz Esc :wqi polecenie (polecenia) zostaną wykonane, na przykład:

$ fjhwfq some long command
fjhwfq some long command
bash: fjhwfq: command not found
ls -l
total 44
-rw-r--r-- 1 ropata Domain Users 24073 Nov 10 14:17 _viminfo
drwxr-xr-x 1 ropata Domain Users     0 Jul 15 13:57 bin/
-rw-r--r-- 1 ropata Domain Users   956 Nov  7 10:43 custom_env
roblogic
źródło
3
może nie działać, jeśli masz nowego Macbooka bez Escklucza;)
roblogic
1
Nowe MacBooki nie mają Esckluczy !? Jak więc mogą korzystać z Vima?
Hubro
1
Teraz próbowałem go, nowy MacBook touchbar thingy robi pokazują Escklucz kiedy uruchomiony vim w terminalu.
roblogic