Unix VIM textwidth没有效果

Unix VIM textwidth没有效果,unix,vim,text-editor,neovim,Unix,Vim,Text Editor,Neovim,这感觉像是一个愚蠢的问题,但我在互联网(或VIM帮助)上找不到答案。我在Mac OS X上使用VIM 7.2。我只想把我的行换行为72个字符,但是 :set textwidth=72 没有效果。textwidth设置正确(我可以看到,当我只是查询“:set textwidth”时),但设置textwidth后键入的现有行和新行都不会被包装。如果我开始新的生产线,仍然没有包装。打开并关闭文件,无更改。我也尝试过:设置wrapmargin=72(textwidth=0),但没有效果 我在这里遗漏

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

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

我在这里遗漏了什么?

什么

:set formatexpr?
:set indentexpr?
:set cindent?
:set filetype?
:set paste?
:filetype
印刷品

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


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

除非请求,否则Vim不会执行任何操作<如果在
formatoptions
中有
t
(仅限非注释)、
c
(仅限注释)或两者都有,则code>textwidth将对当前编辑的行产生影响(如果
a
不存在,则仅当您达到
textwidth
设置的边距时才会自动换行),或者如果您使用
gq
重新格式化文本。如果我没有弄错,您可以设置这样的
formatexpr
formatprg
,这样
textwidth
将被忽略。

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

  • gg
    表示:转到缓冲区的开头
  • gq
    意思是:重新格式化议案中包含的文本
  • G
    表示:转到缓冲区的末尾
(如Zyx post中所述,如果格式选项设置正确,它将起作用)

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


类似于
vim:tw=72
的东西应该会起作用。

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

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

仅仅用(
:set tw=79&&:set formatoptions+=t
)更新.vimrc是不起作用的,因为fplugins是在vimrc之后生成的

以下是我遵循的步骤:

1) 了解您当前的格式选项(在vim中)

2) 按照vimdocs()的建议创建filetype.vim文件

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

瞧!下次打开文件时,它会将textwidth设置为所需的字符

作为调试帮助,您可以通过在命令前面加上verbose来检查哪个文件覆盖了vimrc设置。例如,如果我想检查谁最后更新了formatoptions,我会键入

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

可能会帮助您

我遇到了完全相同的问题,并发现以下方法足以很好地解决这个问题:

autocmd FileType python setlocal textwidth=79 formatoptions+=t
请随意更改
python
作为您选择的文件类型(例如
*
或逗号分隔列表
python、ruby、go、sh、javascript

有关
格式选项的详细信息,请参见
:h fo table


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


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

还可以尝试
:设置粘贴?
。那一个也会干扰。对我来说,它是
:set paste
,我已经映射到一个前导序列。谢谢你@patrickvacekNice!你让我很开心。这是解决老年退休金问题的办法。答案是更新不遵守textwidth的文件的最佳方法,但它不会使文件类型开始遵守textwidth。
:verbose set formatoptions? 
formatoptions=croqlt
Last set from ~/.vim/after/ftplugin/fortan.vim
set formatoptions+=t
autocmd FileType python setlocal textwidth=79 formatoptions+=t