On 19/09/12 00:04, bilibop project wrote:
Hi,
I have written some syntax files (in /etc/vim/syntax/), and copied the
runtime filetype.vim in /etc/vim/ to tweak it.
I take the following example:
syntax file: /etc/vim/syntax/aptconf.vim
and, in filetype.vim:
========== BEGIN ==========
au BufNewFile,BufRead apt.conf setf aptconf
au BufNewFile,BufRead */apt.conf.d/* setf aptconf
=========== END ===========
But the apt.conf(5) manual page says that the file names must follow
some basic rules, such as:
- have either no or "conf" as filename extension
- only contain alphanumeric, hyphen (-), underscore (_) and period (.)
characters.
This means the filename must match the following BRE:
'^\([-_[:alnum:]]\+\|[-_.[:alnum:]]\+\.conf\)$'
So, I have written a function to check that and set the filetype:
========== BEGIN ==========
func! s:MatchNameSetf(ft,regexp)
if expand("<afile>:t") =~ a:regexp
exe 'setf ' . a:ft
endif
endfunc
=========== END ===========
And replaced the autocommand above by this one:
========== BEGIN ==========
au BufNewFile,BufRead */apt.conf.d/*
\ call
s:MatchNameSetf('aptconf','^\([-_[:alnum:]]\+\|[-_.[:alnum:]]\+\.conf\)$')
=========== END ===========
It works fine. But I'm curious, and tried that:
========== BEGIN ==========
au BufNewFile,BufRead */apt.conf.d/\([-_[:alnum:]]\+\|[-_.[:alnum:]]\+\.conf\)
setf aptconf
=========== END ===========
It works fine too... So now my question is: how filenames are they parsed in
the 'au'
command ? I thought regexp were not allowed, but only glob() wildcards and
braces
(as in the shell): see for cmusrc for example. And, from the two last
solutions, is there
someone to say me what is the best ?
Thanks
quidame
See ":help file-pattern": A backslash has special meaning as in Vim
regular expressions. So IIUC the fact of wrapping your Vim regex in \(
\) in the autocommand filename was enough to have Vim understand it
correctly.
As for what is the best… That last example is more self-contained, and
(compared to the length of autocommand + function in the other example)
shorter (though neither more nor less easy to understand at first
sight), so it looks more "elegant" to me, but that could be my
mathematician's training, where shortness one of the criteria of
elegance for a geometry demonstration or of an algebra problem solution.
Beauty, as is well known, is in the eye of the beholder.
Best regards,
Tony.
--
Pedaeration, n.:
The perfect body heat achieved by having one leg under the
sheet and one hanging off the edge of the bed.
-- Rich Hall, "Sniglets"
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php