Vim Tips Wiki
Register
Advertisement
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Tip 739 Printable Monobook Previous Next

created 2004 · complexity basic · author Bounga · version 6.0


I wanted to write a good looking statusline, grouping all the informations I need about a file and the environment. The needed things were the filename, the format of this file, its type, the position (line, column) of the cursor, the relative position in the file (%) and the date (day/month/year - hours:minutes).

There is one thing to always remember when you write a statusline. You have to escape all the blank characters and the " characters. To escape a character you have to use \, so if you want a whitespace you have to do "\ ".

Now here is the statusline:

set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}

This is true for any option set using the :set command. It is possible to work around this using single-quoted strings and the let command.

Comments

I think it is better

set statusline=%F%m%r%h%w\ (%{&ff}){%Y}[%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}

Try this:

set statusline=%<%F%h%m%r%h%w%y\ %{&ff}\ %{strftime(\"%d/%m/%Y-%H:%M\")}%=\ col:%c%V\ ascii:%b\ pos:%o\ lin:%l\,%L\ %P

if you want above statusline appear when there is single window, try:

set laststatus=2

--- The status line is update on potentially *each* key stroke. So having a too dynamic modeline is going to make vim really slow.


To see the file modified time on status line

set statusline=%{strftime(\"%c\",getftime(expand(\"%:p\")))}

Here's the statusline I'm currently using:

set statusline=%<%F%h%m%r%h%w%y\ %{&ff}\ %{strftime(\"%c\",getftime(expand(\"%:p\")))}%=\ lin:%l\,%L\ col:%c%V\ pos:%o\ ascii:%b\ %P

Here's my one (Shervin Emami), it's similar to the ones above but also shows the buffer number, and puts some stuff on the right of the screen:

set statusline=[%n]\ %<%F\ \ \ [%M%R%H%W%Y][%{&ff}]\ \ %=\ line:%l/%L\ col:%c\ \ \ %p%%\ \ \ @%{strftime(\"%H:%M:%S\")}

This is what the statusline will look like:

[1] ~/.vimrc   [VIM][unix]                              line:132/133 col:0   99%   @20:40:11

Or if you want something even better, you might as well use vim-airline.

Advertisement