vim

Get "usable" window width in vim script


get the width of text field in vim

How do I get the width of 3 (marked with green color in the image) in vim script?

If there is no signs column, and there are no other "special columns", I can get it with

winwidth(0) - (max([len(line('$')), &numberwidth-1]) + 1)


Solution

  • I think, you should be able to get that width using:

    :set virtualedit=all
    :norm! g$
    :echo virtcol('.')
    

    Alternatively, you could check, whether a signcolumn is present (e.g. using redir)

    :redir =>a |exe "sil sign place buffer=".bufnr('')|redir end
    :let signlist=split(a, '\n')
    :let width=winwidth(0) - ((&number||&relativenumber) ? &numberwidth : 0) - &foldcolumn - (len(signlist) > 1 ? 2 : 0)