Sunday, February 23, 2014

Re: Negated autocmd filetype match

On 23/02/14 09:15, Nick Dev wrote:
> I have a function that strips trailing whitespace on save. In my .vimrc I have the line
>
> autocmd BufWritePre * if &ft =~ 'sh\|perl\|python\....' | :call <SID>StripTrailingWhitespaces() | endif
>
> What I would like is to negate that into matching everything but "condition".
>
> This works OK for known filetypes:
>
> autocmd BufWritePre * if &ft !=# 'text' | :call <SID>StripTrailingWhitespaces() | endif
>
> but I also want to match when filetype is not set. I have tried various with no luck.

When 'filetype' is not set it is set to the empty string, so !=# 'text'
should match "everything other than 'text', even the empty string" and also

if &ft == "" || &ft =~# 'sh$\|^perl\|^python'

where =~# means "match pattern and don't ignore case", remember, so this
would match anything ending in "sh", anything beginning in "perl" or
"python", or the empty string (which is special-cased before the || ).
You could alternatively represent the empty string inside the pattern by
^$ (i.e. start immediately followed by end) as follows:

if &ft =~# '^$\|sh$\|^perl\|^python'

Of course, it is important to use single quotes here, not double quotes,
to avoid making the backslashes "special" when evaluating the quoted
string — they are part of the pattern on the RHS of the =~# operator.

>
> I was also advised to use:
>
> autocmd FileType * if <amatch> !=# 'text' | ...
>
>
> but can't see how that is correct, nor can I get it to work.
>
see above


Best regards,
Tony.
--
There was a young man of Ostend
Who let a girl play with his end.
She took hold of Rover,
And felt it all over,
And it did what she didn't intend.

--
--
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

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments: