VIM textwidth无效

问题描述 投票:20回答:7

这感觉就像一个愚蠢的问题,但我无法在互联网上找到答案(或在VIM帮助中)。我在Mac OS X上使用的是VIM 7.2。我想做的就是用72个字符包裹我的行,但是这样做

:set textwidth=72 

没有效果。正确设置了textwidth(我可以看到当我只查询“:set textwidth”时),但是在设置textwidth之后我输入的现有行和新行都没有被包装。如果我开始换行,仍然不会换行。打开并关闭文件,无需更改。我也尝试过:set wrapmargin = 72(textwidth = 0),没有效果。

我在这里错过了什么?

unix vim text-editor neovim
7个回答
16
投票

尝试gggqGto将新文本宽度应用于整个缓冲区。

  • gg的意思是:去缓冲区的开头
  • gq表示:重新格式化动议中包含的文本
  • G表示:转到缓冲区的末尾

(如果格式选项设置正确,它将起作用,详见Zyx帖子)

另一方面,您还可以通过在文件的开头或结尾添加modeline来显示宽度为72个字符的现有文本。见:help modeline

vim:tw=72这样的东西应该有效。


10
投票

是什么

:set formatexpr?
:set indentexpr?
:set cindent?
:set filetype?
:set paste?
:filetype

打印。

至少其中一个(我认为所有这些)将覆盖textwidth的设置。

例如,如果您正在编辑C源文件,则C缩进规则会覆盖textwidth


8
投票

我正在寻找同一个问题的答案,并且在我在VIM文档中找到解决方案之前不得不喋喋不休。所以,我想我会更新线程并节省其他时间。

我的问题是默认的ftplugin是禁用textwidth。

只是用(:set tw=79 && :set formatoptions+=t)更新你的.vimrc是行不通的,因为fplugins是在vimrc之后提供的。

以下是我遵循的步骤:

1)找出你当前的格式选项(在vim内)

:set formatoptions?
formatoptions=croql (note no 't')

2)根据vimdocs(http://vimdoc.sourceforge.net/htmldoc/filetype.html#ftplugin-overrule)的建议创建一个filetype.vim文件

Overrule the settings after loading the global plugin.
You must create a new filetype plugin in a directory from the end of
'runtimepath'.  For Unix, for example, you could use this file:
    vim ~/.vim/after/ftplugin/fortran.vim
In this file you can change just those settings that you want to change.

3)在该文件中添加行:set formatoptions+=t && :set textwidth=79

瞧!下次打开文件时,它会将textwidth设置为您想要的字符。

作为调试辅助工具,您可以通过在verbose前添加命令来检查哪个文件覆盖了您的vimrc设置。因此对于例如如果我想检查谁最后更新了formatoptions,我会输入

:verbose set formatoptions? 
formatoptions=croqlt
Last set from ~/.vim/after/ftplugin/fortan.vim

6
投票

除非有要求,否则Vim不会做任何事情。 textwidth将对当前编辑的行产生影响,如果你有t(仅用于非评论),c(仅用于评论)或两者都在formatoptions(如果a不在那里,那么只有当你到达边缘时它才会自动换行由textwidth设置),或者如果您使用gq重新格式化您的文本。如果我没有误会,你可以设置这样的formatexprformatprg,以便textwidth将被忽略。


2
投票
set formatoptions+=t

This可能会帮助你


2
投票

我有完全相同的问题,发现以下问题很好地解决了我:

autocmd FileType python setlocal textwidth=79 formatoptions+=t

随意更改python作为您的文件类型(例如*或逗号分隔列表python,ruby,go,sh,javascript

有关:h fo-table的详细信息,请参阅formatoptions


0
投票

我正在使用Neovim并且也遇到了这个问题。在我的textwidth中将init.vim设置为80之后,当我打开文件时,文本文件的内容不会改变。对于现有文本,我们必须使用gggqG手动格式化它。

当您在一行中键入新字符时,textwidth选项将起作用(如果字符数达到80,您将自动获得换行符)。

© www.soinside.com 2019 - 2024. All rights reserved.