Buffer di connessione al comando esterno in Vim


92

Sono una specie di novizio di Vim. Vorrei inviare il contenuto del buffer corrente allo stdin del comando esterno (diciamo posta). Il mio scopo finale è impostare una scorciatoia per inviare rapidamente e-mail dall'attuale buffer di Vim. Immagino che dovrebbe essere una cosa banale, ma non sono riuscito a trovare un modo per inviare il buffer Vim a un comando esterno. Grazie in anticipo.


Risposte:


130

È possibile utilizzare :w !cmdper scrivere il buffer corrente nello stdin di un comando esterno. Da :help :w_c:

: [range] w [rite] [++ opt]! {cmd}

Eseguire {cmd}con [range]linee come input standard (notare lo spazio davanti a '!'). {cmd}viene eseguito come con ":!{cmd}", any '!'viene sostituito con il comando precedente |:!|.

Un comando correlato è :%!cmdche fa la stessa cosa e quindi sostituisce il buffer corrente con l'output del comando. Quindi :%!sortinvocerebbe il comando di ordinamento esterno per ordinare il buffer corrente in posizione.


6
Questo è utile per formattare json come: :'<,'>!python -mjson.toolo:%!python -mjson.tool
TrinitronX

1
Per la formattazione, usa :%!gofmtsenza l'ultima %, in quanto ciò provocherebbe l'utilizzo della versione salvata (che potrebbe differire dal buffer corrente)
thomasrutter

Esiste un modo per sostituire il buffer corrente con l'output del comando solo in caso di successo? Se il comando restituisce un valore diverso da zero, non sostituire il buffer?
thomasrutter

@thomasrutter se il buffer viene sostituito con un messaggio di errore invece dell'output previsto, puoi semplicemente premere uper annullare
törzsmókus

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.