On 23/12/11 03:52, stardiviner wrote:
I want to make a condition in statusline setting.
for example: when fileformat is unix, show "unix" with black color in
statusline, if fileformat is
"dos", then show in statusline with *red* color.
here is my statusline setting in my vimrc file:
<code>
" item form: %-0{minwid}.{maxwid}{item} --> minwid: min-width,
" %4 width, %-4 padding on the right instead of the left. %= switch to
right side.
" %04l pad with zeros instead of spaces. like 0012.
" %.20F change the maximum width. The path will be truncated if
necessary:<hapters/17.markdown.
" Require: fugitive, current-func-info,
set
statusline=\%#StatusSeparator#\|\%#StatusBufferNumber#\b\:%n\%#StatusSeparator#\|
\\%#StatusReadOnly#\ \%r\ \%#StatusModFlag#\%m\
\%#StatusList#\%q
\\ %=\
%<%-15(\%#StatusNormal#\%{&ff}\%#StatusChar#\X\%#StatusNormal#\%{&fenc}%)
\\ \%#StatusChar#\X\ \%#StatusLineNumber#\%-(L:%l/%L\
C:%c%V%)\ \%#StatusPercent#\%P
"" FIXME write this function.
"function StatusLineFileFormat(ff)
"if&ff == 'unix'
"return a:ff
"elseif&ff == 'dos'
"return a:ff " show with red color in statusline.
"endif
"endfunction
</code>
I do not know vimscript language, so I do not know how to write upper
StatusLineFIleFormat()
function. :P
The problem is not easy.
You can display any expression on the statusline by entering between %{
and } in the 'statusline' code. Or you can set any rainbow of colours by
using either %#HighlightName# or (for User1 to User9) %1* to %9* or (to
return to StatusLine or StatusLineNC) %*, but all these come at the same
level as %{} and are thus not subject to expression evaluation.
Maybe include a distinct field for each possible 'fileformat', which
would resolve to the empty string if the file has a different
'fileformat', like this (showing only the relevant part of the ":set
statusline=..." statement) (all quotes are single quotes) (untested)
%1*%{&ff=='unix'?'[u*x]':''}%2*%{&ff=='dos'?'[dos]':''}%3*%{&ff\ !=\
'unix'\ &&\ &ff\ !=\ 'dos'?'['\ .\ &ff\ .\ ']':''}%*
and somewhere else (possibly in a custom colorscheme if you have one)
hi User1 ctermbg=black ctermfg=white guibg=black guifg=white
hi User2 ctermbg=red ctermfg=white guibg=red guifg=white
hi User3 ctermbg=yellow ctermfg=red guibg=yellow guifg=red
which would display one of the following:
[u*x] (in white on black) if 'fileformat' is unix
[dos] (in white on red) if 'fileformat' is dos
or otherwise the 'fileformat' value between brackets (probably [mac]) in
red on yellow
without even the need for a function.
This of course assumes that you're not going to find yourself on a
monochrome terminal with only "black" "lightgrey" "darkgrey" and "white"
(but possibly in amber or green): for such a terminal you would need
term= highlight settings but it's been years (decades maybe) since I've
seen one in operation.
Best regards,
Tony.
--
... so long as the people do not care to exercise their freedom, those
who wish to tyrranize will do so; for tyrants are active and ardent,
and will devote themselves in the name of any number of gods, religious
and otherwise, to put shackles upon sleeping men.
-- Voltarine de Cleyre
--
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