On Jan 22, 2008 8:27 AM, John Beckett <[EMAIL PROTECTED]> wrote:
> My preference would be for Vim to be distributed in a "locked
> down" state, where modelines had only very limited functionality
> (local tab settings etc), and a user would have to put something
> in their vimrc to enable more modeline features.
For your own sites, you can do something like this:
" This function will check if VIM finds modelines and, if yes, will let you
" choose if you want to execute them. Edit default to enable or disable,
" according to your needs. You can use y and n, as well.
function s:CheckForModelines()
" 'default' may only be set to e, d, y or n
let default = 'y'
if default != 'e' && default != 'd' && default != 'y' && default != 'n'
echoerr "Error in function CheckForModelines: Please set
default to 'e', 'd', 'y' or 'n'"
endif
if !exists('+modelines') || &modelines < 1 || ( !&modeline &&
!exists('b:modeline') )
return -1
endif
let m=''
if &modelines>line('$')
sil exe '%g/\<vim:\|\<vi:\|\<ex:/let m=m."\n".getline(".")'
else
sil exe '1,'.&modelines.'g/\<vim:\|\<vi:\|\<ex:/let
m=m."\n".getline(".")'
sil exe '$-'.(&modelines-1).',$g/\<vim:\|\<vi:\|\<ex:/let
m=m."\n".getline(".")'
endif
if strlen(m)
echo m
let j = '-'
while j != 'e' && j != 'd' && j != 'y' && j != 'n' && j != ''
if default == 'e' || default == 'y'
let j = input('Modelines found! [E]nable
[d]isable):','','expression')
elseif default == 'd' || default == 'n'
let j = input('Modelines found! [e]nable
[D]isable):','','expression')
endif
endwhile
let &l:modeline = (j=='e' || (j=='' && default=='e'))
let b:modeline = 1
endif
endfunction
au BufReadPost * call s:CheckForModelines()
If you use a lot of huge files, you might want to add a check to not go through
them.
RIchard
--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---