我希望 vim 中的 textwidth 默认为 80,但如果特定文件类型有自己的文本宽度(特别是 tw=72 的 gitcommit),我希望 vim 遵守该宽度。
在我的 .vimrc 中,我有一行:
set tw=80
Run Code Online (Sandbox Code Playgroud)
我也试过
setlocal tw=80
Run Code Online (Sandbox Code Playgroud)
然而,这似乎覆盖了 72 的 gitcommit 宽度。
如果我删除该行,则 git commit 可以正常工作(在 72 处换行),但文本文件(例如)不会自动换行。
如果没有指定其他内容,是否可以将 vim 换行到 80,否则请遵循特定的文件类型说明?
顺便说一句,我认为这直到最近才有效。我曾尝试从我的 .virmrc 中删除所有其他内容,但设置 tw=80,但这没有任何区别。
编辑:如果我打开一个 git commit 消息编辑器,然后运行
:verbose set tw?
vim 显示:
textwidth=80
Last set from ~/.vimrc
Run Code Online (Sandbox Code Playgroud)
Vim 已将其涵盖在全局与缓冲区本地选项中。当你描述,你应该:set
在你的全局的缺省值~/.vimrc
,有些文件类型可以覆盖与全球默认:setlocal
。
要进行故障排除,请尝试
:verbose set tw?
Run Code Online (Sandbox Code Playgroud)
这应该会告诉您最后修改选项值的位置。
对于ft=gitcommit
,它具有特殊的逻辑,仅在(全局值)为空时才设置文本宽度:
if &textwidth == 0
" make sure that log messages play nice with git-log on standard terminals
setlocal textwidth=72
let b:undo_ftplugin .= "|setl tw<"
endif
Run Code Online (Sandbox Code Playgroud)
您的全局设置会阻止此操作生效。解决办法是自己无条件设置textwidth:在~/.vim/after/ftplugin/gitcommit.vim
,把这个:
setlocal textwidth=72
let b:undo_ftplugin .= "|setl tw<"
Run Code Online (Sandbox Code Playgroud)