【问题标题】:set textwidth in vim without overriding filetype specific在 vim 中设置 textwidth 而不覆盖特定的文件类型
【发布时间】:2013-03-29 23:43:07
【问题描述】:

我希望 vim 中默认的 textwidth 为 80,但如果特定文件类型有自己的文本宽度(特别是 gitcommit where tw=72),我希望 vim 支持该宽度。

在我的 .vimrc 中有一行:

set tw=80

我也试过了

setlocal tw=80

但是这似乎覆盖了 gitcommit 宽度 72。

如果我删除该行,则 git 提交工作正常(在 72 处换行)但文本文件(例如)不会自动换行。

如果没有指定其他内容,是否可以将 vim 换行到 80,否则请遵循特定的文件类型说明?

顺便说一句,我认为这直到最近才起作用。我已经尝试从我的 .virmrc 中删除所有其他内容,但设置 tw=80 除外,但这没有任何区别。

编辑:如果我打开一个 git commit 消息编辑器,然后运行

:verbose set tw?

vim 显示:

   textwidth=80
        Last set from ~/.vimrc

【问题讨论】:

    标签: vim word-wrap


    【解决方案1】:

    Vim 涵盖了全局与缓冲区本地选项。正如您所描述的,您应该在您的~/.vimrc 中使用:set 全局默认值,并且某些文件类型可能会使用:setlocal 覆盖全局默认值。

    要排除故障,请尝试

    :verbose set tw?
    

    这应该告诉你最后修改选项值的地方。

    编辑

    对于ft=gitcommit,只有在(全局值)为空时才设置textwidth的特殊逻辑:

    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
    

    您的全局设置阻止此设置生效。解决办法是自己无条件设置textwidth:在~/.vim/after/ftplugin/gitcommit.vim,放这个:

        setlocal textwidth=72
        let b:undo_ftplugin .= "|setl tw<"
    

    【讨论】:

    • 感谢您的提示,看起来我的 tw 在 git 提交时仍然是从我的 .vimrc 设置的...用此信息更新了问题。
    • 那么,现在你有了全局值但是文件类型丢失了?!这与您最初报告的情况完全相反吗?
    • 不,问题是如果我在 .vimrc 中设置文本宽度,它会覆盖 git 提交设置。那就是它在 80 而不是 72 处换行。这是我得到的行为,您的建议确认 .vimrc 即使在 git commit 消息编辑器中也设置宽度。
    • 这个答案是纯金。我终于明白如何覆盖我的插件设置的烦人的映射了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多