28

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

:set textwidth=72 

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

我在这里想念什么?

4

7 回答 7

24

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

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

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

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

类似的东西vim:tw=72应该可以工作。

于 2011-02-28T07:54:58.110 回答
12

做什么

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

打印。

至少其中一个(我认为所有这些)将覆盖textwidth.

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

于 2011-02-28T00:04:23.130 回答
12

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

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

仅仅用 ( ) 更新你的 .vimrc 是:set tw=79 && :set formatoptions+=t行不通的,因为 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

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

作为调试帮助,您始终可以通过在命令前添加详细信息来检查哪个文件覆盖了您的 vimrc 设置。因此,例如,如果我想检查谁最后更新了格式选项,我会输入

:verbose set formatoptions? 
formatoptions=croqlt
Last set from ~/.vim/after/ftplugin/fortan.vim
于 2013-09-05T22:27:16.737 回答
7

除非请求,否则 Vim 不会做任何事情。textwidth如果您有t(仅用于非评论)、c(仅用于评论)或两者都在formatoptions(如果a不存在,那么它将仅在您达到由 设置的边距时自动换行textwidth),或如果您使用gq重新格式化您的文本。如果我没记错的话,你可以设置这样formatexprformatprg那样textwidth将被忽略。

于 2011-02-28T04:44:46.067 回答
3
set formatoptions+=t

可能会帮助你

于 2014-04-28T16:47:35.147 回答
2

我遇到了完全相同的问题,并发现以下问题对我来说已经足够好:

autocmd FileType python setlocal textwidth=79 formatoptions+=t

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

详情见:h fo-table_formatoptions

于 2016-06-13T08:00:39.217 回答
1

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

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

于 2019-03-21T12:43:09.590 回答