Thursday, August 30, 2012

Re: How do I define function for toggling textwidth (and echoing along)?

Am 25.08.2012 11:07, schrieb Santosh Kumar:
> By default I have textwidth set to 78:
> set textwidth=78
>
> By this setting if I type more than 78 characters in a line, those
> will be moved to next line.
> I want a mapping that will toogle that textwidth to 0 (or say disable
> textwidth), so that I can type long sentences in a single line.
>
> Currently I have this mapping:
> nnoremap <silent> <leader>tw :exe "set textwidth=" . (&tw ? 0 : 78)<cr>

This one is more verbose, without visual clutter:

:nn <expr> <Leader>tw printf(":setl tw=%d<CR>", &tw==0 ? 78 : 0)

> This does the work but I don't get notified if the work has been done.
> All I want is along with toggling the setting I should be notified
> (i.e. if textwidth is zero then show textwidth=0 at statusline).

An example how to play with the statusline:
:h 'stl

" standard statusline
" set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

set statusline=%<%f\ %h%m%r%{TwLeft()}%=%-14.(%l,%c%V%)\ %P

" remaining textwidth
func! TwLeft()
let ioff = mode()==#"i" ? 1 : 0
if &tw == 0 || virtcol(".") > &tw + ioff
return ""
else
let left = &tw + ioff - virtcol(".")
return printf('[%d %s left]', left, left==1 ? "char" : "chars")
endif
endfunc

--
Andy

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

No comments: