I am using :set textwidth=80
to make the Vim editor do hard wrapping automatically. However, sometimes for certain lines within a file (e.g. tables in LaTeX), I do not want Vim to do any hard wrapping automatically. Is there a way to mark certain lines to disable hard wrapping in Vim? Or automatically :set textwidth=0
just for specified lines?
There's nothing out-of-the-box, but you can build a solution with an :autocmd <buffer>
on the CursorMoved,CursorMovedI
events. On each move of the cursor, you have to check whether you're currently in one of those "certain lines", and modify the local 'textwidth'
option accordingly:
autocmd CursorMoved,CursorMovedI <buffer> if IsSpecialLine() | setlocal textwidth=0 | else | setlocal textwidth=80 | endif
Put this into ~/.vim/after/ftplugin/tex.vim
. (This requires that you have :filetype plugin on
; use of the after directory allows you to override any default filetype settings done by $VIMRUNTIME/ftplugin/tex.vim
.) Alternatively, you could define an :autocmd FileType tex autocmd ...
directly in your ~/.vimrc
, but this tends to become unwieldy once you have many customizations.
For the IsSpecialLine()
function, you probably need to match a regular expression on the current line (getline('.') =~# "..."
). If you can identify the "certain lines" through syntax highlighting, my OnSyntaxChange plugin can do all the work for you.