A cosa serve la modalità EX per l'elaborazione batch?


20

Il tutorial menziona che la modalità Ex è per l'elaborazione batch. Dal momento che è un fastidio, piuttosto che uno strumento, per me, vorrei vedere alcuni esempi pratici. Chi lo usa? Perché?

A cosa serve la modalità EX per l'elaborazione batch?


@Masi: collega i tuoi account in modo che i post migrati vengano associati al tuo account SU dopo la migrazione.
Greg Hewgill,

Risposte:


4

Vim in modalità Ex (noto anche come ex) è utile quando:

  • Hai bisogno di modificare (più) file in modo non interattivo (come parte dello script).
  • La tua connessione è molto lenta o lo schermo non viene aggiornato dopo le tue azioni.
  • Mappature e abbreviazioni sono disabilitate.
  • Tasti comuni come Escapeo Controlnon funzionano correttamente.

La modifica dei file in modo non interattivo è l'uso più comune e le persone lo usano in modo simile in quanto sede awk, tuttavia sono più orientati al flusso - leggono il file solo dall'inizio alla fine mentre vimè orientato al buffer - puoi spostarti avanti e indietro nel file come preferisci. In secondo luogo, le espressioni regolari di vim sono più potenti delle espressioni di awk e sed (non sono progettate per funzionare con più righe), ad esempio vim può corrispondere su più righe e supporta zero corrispondenze.

Ex è anche un editor (diretto predecessore di vi) e in Vim - la modalità Ex emula ex( usano ancora lo stesso codice), quindi è possibile accedere alla modalità di comando exall'interno di vi e viceversa. C'è la modalità Ex ( vim -e) e la modalità Ex migliorata che consente comandi più avanzati rispetto alla modalità Ex compatibile vi ( vim -E). Vedi: Qual è la differenza tra la modalità Ex e la modalità Ex migliorata?

Ex è la radice di una famiglia di editor: edit, ex e vi. Ex è un super-set di ed, con l'estensione più notevole è una funzione di modifica del display. ex (1)


Esempio 1

Ecco semplice esempio di cambiare 127a 128del vostro hostsfile di e stampare l'output:

ex -s +%s/127/128/g +%p +q! /etc/hosts

è equivalente a:

sed s/127/128/g /etc/hosts

Per una soluzione più avanzata, potresti avere un file con comandi vim e usarlo con un approccio più classico al reindirizzamento I / O:

echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts

Esempio 2

Puoi anche utilizzare i plugin vim per eseguire alcune attività.

Ad esempio il seguente one-liner convertirà il tuo file di codice sorgente in html usando uno dei plugin standard:

ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c

Genera file html (con l'evidenziazione della sintassi) dal tuo codice (scritto in qualsiasi lingua supportata) che è pronto per la stampa o per la pubblicazione sul tuo sito web.


Esempio 3

O qualche vero esempio dal vivo dalle specifiche RPM :

vim -E -s Makefile <<-EOF
   :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
   :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
   :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
   :update
   :quit
EOF

Esempio 4

Il seguente script creerà un nuovo file html scaricando html del sito di esempio e sostituendone il corpo con una tabella 20x20 generata automaticamente con numeri casuali al suo interno:

" table.vim
%!curl -s example.com 
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq

Uso:

ex -s table.html < table.vim

Funzionerà su * nix come i sistemi con curl installato. Aggiungi -Vper vedere lo script in azione.

Altri esempi:


Guarda anche:


22

Ex-Mode è principalmente per eseguire la stessa azione su un numero di file.

Supponi di avere 25 file .html tutti con:

<a href="/superuser//home.html"> ...

Invece di aprire ognuno di questi, è possibile utilizzare la modalità Ex per cambiare tutto in index.html:

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF

7
Un'implementazione completa, e più concisa, sarebbe for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done.
intuito il

6

A partire dalla recente 7.3, che come supporto di annullamento persistente, la modalità ex e altre forme di elaborazione batch di VIM è superiore ad altri metodi non-VIM, poiché non ostruirà la cronologia degli annullamenti.

Aggiunta: 'annullamento persistente' se abilitato, mantiene tutte le modifiche a un file (fino a un limite) nella cronologia degli annullamenti, attraverso le sessioni di modifica di VIM. Se il file viene modificato da un programma esterno, vim reimposterà la cronologia degli annullamenti quando rileva dal checksum che è cambiato. vim -E ti consentirà di modificare in batch un file e la modifica sarà nella cronologia degli annullamenti.


2
Sembra abbastanza inverosimile, ma è sicuramente ragionevole e intelligente! +1
Tarrasch,

1

Questo non risponde alla tua domanda sull'elaborazione batch, ma è un altro modo per spiegare cos'è la modalità Ex. Sai come premi:andare in modalità riga di comando e inserire i comandi? Bene la modalità Ex ti consente anche di inserire gli stessi comandi, tranne che Vim non esce dalla modalità Ex dopo aver inserito un comando, rimane in modalità Ex e puoi inserire un altro comando. Quindi è un po 'come un REPL (leggi, valuta, stampa, loop), ma senza la stampa (quindi solo un REL ...). Tornerò sul perché potresti desiderare quel tipo di REL più tardi. Ecco perché si chiama modalità Ex, ti permette di inserire i comandi Ex, che è la stessa cosa che fa la modalità riga di comando, ti permette di inserire un comando Ex. Un altro modo di spiegarlo è che ti permette di entrare ed esegue immediatamente il codice Vimscript / VimL. Vimscript / VimL è una lingua che puoi usare per scrivere plugin Vim. È anche la lingua che usi per scrivere il tuo file di configurazione (probabilmente .vimrc). È anche la lingua utilizzata quando si immettono i comandi Ex dalla modalità riga di comando o dalla modalità Ex. Quindi, da quel punto di vista, la modalità Ex può essere vista come un REL VimL. Perché vorresti un VimL REL? Per lo stesso motivo, le persone amano i REPL per altre lingue. Possono essere davvero utili per il debug del codice o per sperimentare la lingua per vedere come funzionano le cose, specialmente se stai scrivendo plugin in VimL o personalizzando altamente il tuo file di configurazione (il che probabilmente significherebbe che stai violando l'entità SRP e dovresti suddividerlo in plugins).


Sarebbe bello avere alcuni esempi come video per mostrare l'utilità della modalità ex. Non me ne sono mai reso conto perché posso usare Linux Window Manager e la modalità visiva di :!python
VIM
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.