[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Vim beim Beenden ein Script ausfuehren lassen



Hallo Andreas!

Andreas Pakulat schrieb am Dienstag, den 11. März 2008:

> kann man vim beim Beenden ein Skript ausfuehren lassen und dann
> entsprechend des Rueckgabewertes das Beended evtl. abbrechen (aehnlich
> dem Feature dass das Beenden abbricht wenn Aenderungen an der Datei noch
> nicht geschrieben wurden)?

Ja, hier mal ein Beispiel, gerade zusammengehackt. Das Script prüft,
ob ein Author angegeben ist und ob dieser "erlaubt" ist, zu speichern.

,----
| " Script to test for Author Name
| " when saving 
| " When allowed, save, else do not save
| "
| "Author:  AuthorA                            
| 
| function! CheckName()
|     " Allowed Authors
|     let allowed='AuthorA, AuthorB, AuthorC'
|     let oldPos=getpos('.')
|     let aList=split(allowed, '\w\zs,\s*')
|     let index=0
|     while index < len(aList)
|         let item=aList[index]
|         let aList[index]='\%(\<'.escape(item, ' \.+*').'\>\)'
|         let index = index + 1
|     endwhile
|     let val = join(aList,'\|')
|     :1
|     if search('^\s*"Author:\s*\%('.val.'\)\s*$','cpW')
|         exe ":write ". expand("<amatch>")
|     else
|         echo "Author not allowed to save\nNot saved!"
|     endif
|     call setpos('.', oldPos)
| endfu
| 
| augroup script
|     au!
|     au BufWriteCmd,FileWriteCmd * :call CheckName()
| augroup END
`----

einfach mal speichern und :so % und dann mit dem Author spielen.

> Wenn das geht, wo erfahre ich wie? Welche Stichworte brauche ich fuer
> die vim-Hilfe oder Google?

:h autocmd.txt
:h usr_40.txt
:h template
:h BufWriteCmd

Grüße
Christian
-- 
hundred-and-one symptoms of being an internet addict:
81. At social functions you introduce your husband as "my domain server."


Reply to: