Eseguire lo script bash da vim


21

Uso vim per gli script bash. a volte non voglio creare un nuovo file, renderlo eseguibile, eseguirlo e quindi rimuoverlo. Intendo gli script che verranno usati una sola volta.

Ad esempio, apro vim e digito questo:

#!/bin/bash

ll | while read line
do
    echo $line
done

Non ho salvato questo file, ho solo usato vim per semplificare il bash-scripting. So di poter eseguire un comando bash tramite !in vim. Ma per quanto riguarda l'esecuzione di tutto ciò che è nel buffer?


4
Sai che puoi modificare l'attuale riga di comando in Vim <C-x><C-e>ed eseguirla in scrittura, giusto?
Romainl,

Se esegui bash con questa opzione set -o vi, puoi premere Esc-vper modificare la riga di comando in vi. Quindi Esc-:wqeseguire.
roblogic,

Risposte:


35

Ho scritto una risposta piuttosto ampia a riguardo su stack-overflow . L'idea di base è che, poiché il comando di scrittura è di circa la scrittura non è il salvataggio , è possibile scrivere il testo nel buffer di in un programma esterno, come Python o bash. Nel tuo caso, vorresti fare qualcosa del tipo:

:w !bash

o

:w !sh

Questi comandi letteralmente scrivono semplicemente il testo nel buffer direttamente nel programma specificato !, il che è comodo perché non è necessario salvare un file. Naturalmente, puoi anche fare qualcosa del tipo:

:w | !bash %

che salva il tuo file e quindi lo esegue come uno script bash. Puoi scegliere quello che ha più senso per te.


C'è un modo per fornire opzioni un argomento in questo modo? Ho provato :w !bash -a testma ho ottenuto "impossibile eseguire il file binario"
St.Antario

@Antario Hmm. Sono sicuro che ci deve essere un modo, ma il mio bash è piuttosto arrugginito (uso principalmente Windows). Quando lo provo in cygwin con un testfile vuoto , funziona bene per me. Cosa dovrebbe fare il comando e cosa dovrebbe testcontenere?
DJMcMayhem

Il mio caso reale è piuttosto complicato, quindi lascia che stampi semplicemente l'argomento passato. A proposito, cosa intendi con cosa dovrebbe test contenere? testè solo un argomento per -a.
Sant'Antario,

1
@Antario Oh, ok vedo. Pensavo testdovesse essere un file. Non sono proprio sicuro di cosa fare. Se stai provando qualcosa di complesso, potrebbe essere meglio salvarlo in un file. Potrebbe valere la pena porre una domanda separata in modo da poter fornire maggiori dettagli. Probabilmente sarebbe anche una buona domanda per Unix e Linux
DJMcMayhem

4

Scenario: stai lavorando in bash shell. Innanzitutto, assicurati che la modalità di modifica locale sia vi:

$ set -o vi

Ora, quando ti ritrovi a lavorare su un comando lungo come il seguente, premi Esc+ v.

$ fjhwfq this is my long command

Questo caricherà il tuo comando in una visessione temporanea . Ora puoi modificarlo come desideri e persino aggiungere un altro comando ...

fjhwfq some long command
ls -l

Al termine della modifica, digitare Esc :wqe verranno eseguiti i comandi, ad esempio:

$ 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

3
potrebbe non funzionare se hai un nuovo macbook senza Escchiave;)
roblogic

1
I nuovi MacBook non hanno le Escchiavi !? Come possono usare Vim allora?
Hubro,

1
Ora ho provato, il nuovo MacBook touchbar thingy fa mostrare un Esctasto durante l'esecuzione Vim in un terminale.
roblogic,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.