Du er her: Hjem --> Annet --> Blog --> Vi og batchoppdatering av filer

Vi og batchoppdatering av filer

Vi, og den nyere versjonen Vim, er teksteditorer med avansert funksjonalitet. I denne blogposten vil vi se på hvordan vi kan gjøre samme endring i mange tekstfiler på raskest mulig måte. Dette kalles ofte for en "batch"-jobb.

Et praktisk eksempel der dette er aktuelt er i vedlikeholdet av dette nettstedet. www.psdigital.no består av statiske html-filer. Hovedmenyen er den samme på hver eneste side. Dersom vi vil endre i hovedmenyen må vi i utganspunktet åpne hver eneste html-fil (rundt 50 stk filer) og skrive inn den samme endringen i hver fil. Dette tar lang tid, gir god sjanse for feil, og er drit kjedelig! Finnes det en bedre måte å gjøre det på med Vi (eller Vim)?

Det er flere måter å gjøre dette på. For eksempel:

Batch oppdatering med avansert map i Vi

Lage forkortelse i insert mode: abbreviation

Har vi en lang setning eller uttrykk som skal gjentas ofte, kan man lage en forkortelse.
:ab ps Firmaet heter psdigtal
I insert mode kan man skrive ps og space og da vil ps erstattes med Firmaet heter psdigital

Lage forkortelse i command mode: map (macro)

Vi må vite hvilke bokstaver vi kan bruke som egendefinerte shortcuts. I Vi er dette: g, K, q, V, v. (I Vim er dette annerledes.)

Hvis vi vil ha med Return, Esc, Backspace, Delete eller andre spesialtaster, må disse escapes med Ctrl-v. Må altså taste Ctrl-v før spesialtasten.

Se Learning the Vi editor, kapittel 7.3

Source map fra fil

Hvis vi lager en map, og så lukker Vi, er mappen mistet når vi åpner Vi igjen. Vil vi beholde en map er en løsning å skrive den til en fil, og så lese denne filen inn i Vi. Å lese en slik fil inn i en map i Vi gjøres med source kommandoen.

Åpne ett vindu med flere buffere

vi fil1.html fil2.html fil3.html test.txt test.html
vi *html
Nå åpnes alle html-filene i katalogen vi står i som buffere i samme vindu. Bare en buffer vises i vinduet om gangen. Vi kan bytte fra buffer til buffer med kommandoer som:

Oppdatere menyen i psdigital.no

Jeg lagret følgende to linjer i en fil mymap

Vi map datatips.

Fig. 1 Vi map for å raskt endre menyen på denne hjemmesiden. Først endre bits-or-bytes meny innslaget, deretter utvides menyen med datatips.

Først kommando er mappet til v. Jeg ønsket å endre et eksisterende menyinnslag: bits // bytes skal heller være bits & bytes. Algoritmen er rett og slett å søke opp den gamle strengen, og erstatte den med den nye. Vi gjør en manuell bekreftelse før substitusjonen skjer.

Andre kommando er mappet til q. Jeg ønsket å utvide hjemmesiden med en side for datatips for forbrukere. Andre kommando legger til dette menyinnslaget. Innslaget skal være to linjer over bits-or-bytes innslaget. Først finner vi bits-or-bytes linjen. Deretter går vi to linjer opp og legger til en ny linje (2ko). Her skriver vi inn riktig html kode. Deretter legger til vi noen space på begynnelsen av linjen slik at den får riktig innrykk.

Jeg åpnet alle html filene i vi, sourcet mymap, kjørte de to mappene på hver enkelt fil. Jeg måtte gjøre noen få manuelle steg per fil. Samtidig fikk jeg manuelt sjekket at ikke noe så feil ut.

Referanser

  1. O'reilly: Learning the Vi editor, sixth edtion
    https://docstore.mik.ua/orelly/unix3/vi/index.htm
  2. O'reilly: Learning the Vi editor, sixth edtion
    https://docstore.mik.ua/orelly/unix3/vi/ch07_03.htm
  3. Learning the vi Editor/Vim/Modes
    https://en.m.wikibooks.org/wiki/Learning_the_vi_Editor/Vim/Modes
  4. :source command
    http://vim.1045645.n5.nabble.com/source-command-td5711594.html
  5. Learn Vimscript the Hard Way, Basic Mapping
    http://learnvimscriptthehardway.stevelosh.com/chapters/03.html
  6. How can I edit multiple files in VIM?
    https://unix.stackexchange.com/questions/27586/how-can-i-edit-multiple-files-in-vim
  7. Mapping keys in Vim - Tutorial (Part 1)
    https://vim.fandom.com/wiki/Mapping_keys_in_Vim_-_Tutorial_(Part_1)
Telefon: 67 20 71 21 / 92 60 51 57 Logo-tema