在任意宽度的窗口中在Vim中以80个字符进行软包装

时间:2009-06-12 21:18:31

标签: vim textwrapping

我想使用Vim的soft wrap功能(:set wrap)将一些代码包装为80个字符,无论我的实际窗口宽度如何。

我还没有找到办法做到这一点 - 所有软包装似乎都与窗户的宽度相关

  • textwidthwrapmargin都用于硬包装(它们会在文件中插入换行符)
  • 垂直拆分成多个窗口并使用:vertical resize 80(可能带:set breakat=允许任何字符的中断)其中一个工作(即使它有点hackish),但在使用时中断:set number因为行号占用可变数量的列(取决于文件长度),这些是80的一部分。

有没有办法在vim中这样做? It doesn't look promising, according to other sources

现在我的近似值只是将/^.\{80}\zs.\+作为我的默认搜索,因此它至少会突出显示。我想为它添加一个:syntax项,但是当它与其他语法项重叠时就会破坏,所以我放弃了这个想法。

5 个答案:

答案 0 :(得分:35)

你可以

  • 通过:set numberwidth=6
  • 为行号列设置较大的最小宽度
  • 然后您可以使用:set columns=86(或使用鼠标)将窗口调整到合适的大小。

如果你编辑一个包含一百万行的文件,你可能会遇到麻烦,但这不太可能。你也是这样浪费6列屏幕空间。所以仍然存在各种各样的问题。

您可以使用:match突出显示第80列,如herehere

除此之外我无法看到任何方法。看起来它虽然是一个不错的功能。

答案 1 :(得分:16)

我没有软包装的解决方案,但是对于标记色谱柱,从Vim 7.3开始(2010-08-15发布):set colorcolumn=80将突出显示第80列。颜色取决于您的颜色语法文件。

请参阅Vim 80 column layout concerns:h colorcolumn

答案 2 :(得分:16)

试试这个:

set columns=80
autocmd VimResized * if (&columns > 80) | set columns=80 | endif
set wrap
set linebreak
set showbreak=+++

如果始终需要80列,则可以删除if (&columns > 80) |

答案 3 :(得分:1)

您是否尝试过'linebreak'

        *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
  'linebreak' 'lbr' boolean (default off)
        local to window
        {not in Vi}
        {not available when compiled without the  |+linebreak|
        feature}
If on Vim will wrap long lines at a character in 'breakat' rather
than at the last character that fits on the screen.  Unlike
'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
it only affects the way the file is displayed, not its contents.  The
value of 'showbreak' is used to put in front of wrapped lines.
This option is not used when the 'wrap' option is off or 'list' is on.
Note that <Tab> characters after an <EOL> are mostly not displayed
with the right amount of white space.

答案 4 :(得分:0)

没有好的方法。如果我们修改@eborisch答案,我们可以用setlocal softwrap来临时autocmd。如果我们每次进入缓冲区时都调整大小,并且在设置了局部变量softwrap时将大小调整为特定长度,那么我们将获得所需的行为。

让我们假设要包装到80列,我们可以在.vimrc中编写以下内容。

augroup softwrap
    autocmd VimResized * if (exists('b:softwrap') && &columns > 80) | set columns=80 | endif
    autocmd BufEnter * set columns=999
augroup END

要打开特定缓冲区的模式,请使用以下命令:

let b:softwrap=1
set columns=80