L’esecuzione di VIM comandi in uno script di shell

Sto scrivendo uno script bash che esegue un programma a riga di comando (Gromacs), consente di salvare i risultati, modifica i file di input, e quindi con passanti attraverso il processo di nuovo. Sto cercando di usare VIM per modificare il file di testo di input, ma non sono stato in grado di trovare un modo per eseguire gli interni VIM comandi come :1234, w, x, dd, ect. dall’ .sh file dopo aver aperto il mio file di input in VIM (“vim conf.gro”).

C’è qualche modo pratico per eseguire VIM comandi da shell script?

  • Hai provato a vim eccellente sistema di guida, o anche man vim? All’interno di vim, tipo :help -c (o leggere tutte le informazioni a partire vim con :help arguments)
  • Sei sicuro che è necessario utilizzare vim piuttosto che in un altro editor come sed? È possibile utilizzare vim nella sua ex modalità che non utilizza l’intero schermo (ed è meglio, quindi, per l’uso negli script)? Che cosa stai cercando di fare nel tuo script modifica?

 

3 Replies
  1. 13

    Penso vim -w/W and vim -s è quello che stai cercando.

    Il “vim operazioni/sequenza di tasti”, è possibile registrare con vim -w test.keys input.file inoltre, si potrebbe scrivere test.keys troppo. ad esempio, salva questo nel file:

    ggwxjddZZ

    questo farà:

    move to 1st line, 
    move to next word,
    delete one char,
    move to next line, 
    del the line. 
    save and quit.

    con questo test.keys file, si potrebbe fare:

    vim -s test.keys myInput.file

    tuo “myInput.file di” elaborata dalle operazioni di cui sopra, e salvato. si potrebbe avere quella linea nel vostro script di shell.

    vimgolf sta usando lo stesso modo di salvare gli utenti di soluzione.

    • +1 io non conoscevo il -s bandiera. Grazie
  2. 10

    Si può script Vim via -c bandiera.

    vim  -c "set ff=dos" -c wq mine.mak

    Tuttavia, che solo si ottiene finora.

    • Dei comandi che hai dato sembra che si sta tentando di eseguire alcuni comandi normali. Sarà necessario utilizzare :normal. ad esempio, :norm dd
    • Scrivere tutto questo nella riga di comando è in cerca di guai. Vi suggerisco di fare un vim file (ad esempio commands.vim) e poi :source via -S.
    • Probabilmente si vuole ottenere una buona e conformabile di vim ex comandi. Date un’occhiata a :h ex-cmd-index

    Così si finisce con qualcosa di simile a questo. Con tutto il vim comandi all’interno di commands.vim.

    vim -S commands.vim mine.mak

    Si potrebbe anche voler guardare in utilizzando sed e/o awk per l’elaborazione del testo.

    • Questo è esattamente quello che stavo cercando. Ho già avuto una soluzione per vim, e quindi non voglio prendere un’altra lingua/strumento.
  3. 6

    Alternative

    A meno che non si ha realmente bisogno di una speciale Vim di funzionalità, è probabilmente meglio usare non-strumenti interattivi come sed, awk, o Perl /Python /Ruby /il linguaggio di scripting preferito qui.

    Detto questo, è possibile utilizzare Vim in modalità non interattiva:

    Silenzioso In Modalità Batch

    Molto semplice elaborazione di testo (per es. usando Vim come una maggiore ‘sed’ o ‘awk’, magari beneficiando l’avanzata delle espressioni regolari in un :substitute comando), utilizzare Ex-modalità di.

    REM Windows
    call vim -N -u NONE -n -es -S "commands.ex" "filespec"

    Nota: silent modalità batch (:help -s-ex) scombina la console di Windows, in modo che si può avere a che fare un cls per pulizia dopo il Vim eseguire.

    # Unix
    vim -T dumb --noplugin -n -es -S "commands.ex" "filespec"

    Attenzione: Vim si blocchi in attesa di un input se il "commands.ex" file non esiste; meglio controllare in anticipo per la sua esistenza! In alternativa, Vim in grado di leggere i comandi da stdin. È inoltre possibile compilare un nuovo buffer con il testo letto da stdin, e leggere i comandi da stderr se si utilizza il - argomento.

    Completa Automazione

    Più avanzate di elaborazione che coinvolge più di windows, e automazione reale di Vim (dove è possibile interagire con l’utente o lasciare Vim in esecuzione per consentire all’utente di prendere il sopravvento), utilizzare:

    vim -N -u NONE -n -c "set nomore" -S "commands.vim" "filespec"

    Ecco una sintesi di argomenti:

    -T dumb           Avoids errors in case the terminal detection goes wrong.
    -N -u NONE        Do not load vimrc and plugins, alternatively:
    --noplugin        Do not load plugins.
    -n                No swapfile.
    -es               Ex mode + silent batch mode -s-ex
                    Attention: Must be given in that order!
    -S ...            Source script.
    -c 'set nomore'   Suppress the more-prompt when the screen is filled
                    with messages or output to avoid blocking.

Lascia un commento