在 vim 中编辑 git 提交消息时防止自动换行
Prevent automatic line wrapping when editing git commit message in vim
我想做这个问题的反面:
Automatically wrap long Git commit messages in Vim
不知何故,git 决定将我的提交消息包装成 72 个字符。我根本不希望它们被包裹起来......而且我没有做任何事情来启用包裹。
现在,当我已经在编辑提交评论时,我当然可以输入:
:set textwidth&
这将停止包装,但我不想每次都这样做。
附加信息:
- 我正在使用 Devuan GNU/Linux 3 (~= Debian 10)。
:set ft?
说 filetype=gitcommit
- 当我刚开始 vim 或使用 vim 编辑任何现有文件时,没有发生换行。
您正在获取 git 提交消息的这些设置,因为 Vim 识别文件类型 (gitcommit
) 并为其加载特定于文件类型的设置。
在本例中,它来自文件 $VIMRUNTIME/ftplugin/gitcommit.vim
,其中包括以下行:
setlocal nomodeline tabstop=8 formatoptions+=tl textwidth=72
您可以通过将 gitcommit
的另一个文件类型插件添加到您的主目录来覆盖它,该插件将在 Vim 运行 时间之后加载。
您可以使用名为 ~/.vim/after/ftplugin/gitcommit.vim
的文件执行此操作(假设您使用的是 Vim,如果您使用 NeoVim,则路径的初始部分将有所不同。) after
目录用于最后加载的插件文件,因此通过将文件放在那里,您将确保您的代码 运行 在 上面提到了一个。
在该文件中,您可以添加一个命令来撤消换行的不良影响,例如:
setlocal textwidth&
或者:
setlocal formatoptions-=t formatoptions-=l
这两个设置中的任何一个都将防止在第 72 列自动换行。更改 'formatoptions'
rather than resetting 'textwidth'
is that by only changing 'formatoptions'
you can still use commands such as gq
以手动格式化文本块以符合 72 个字符的行宽限制的优点,如果您愿意的话所以。这样你就可以两全其美了。
无论您决定设置两个选项中的哪个,请确保您使用 :setlocal
而不是 :set
,因为该插件仅为该缓冲区加载,您应该尝试只修改选项单独在该缓冲区上并避免触及全局选项。
另一种方法是向您的 vimrc 添加一个自动命令。如果您在
之后的任何时间添加它
filetype plugin on
行,它将覆盖 ftplugin 中的任何内容。我用它来关闭 git 提交中的包装。
" Stops gitcommit from auto wrapping
au Filetype gitcommit call SetGitCommit()
func SetGitCommit()
setlocal formatoptions-=tl
endfunc
我想做这个问题的反面:
Automatically wrap long Git commit messages in Vim
不知何故,git 决定将我的提交消息包装成 72 个字符。我根本不希望它们被包裹起来......而且我没有做任何事情来启用包裹。
现在,当我已经在编辑提交评论时,我当然可以输入:
:set textwidth&
这将停止包装,但我不想每次都这样做。
附加信息:
- 我正在使用 Devuan GNU/Linux 3 (~= Debian 10)。
:set ft?
说filetype=gitcommit
- 当我刚开始 vim 或使用 vim 编辑任何现有文件时,没有发生换行。
您正在获取 git 提交消息的这些设置,因为 Vim 识别文件类型 (gitcommit
) 并为其加载特定于文件类型的设置。
在本例中,它来自文件 $VIMRUNTIME/ftplugin/gitcommit.vim
,其中包括以下行:
setlocal nomodeline tabstop=8 formatoptions+=tl textwidth=72
您可以通过将 gitcommit
的另一个文件类型插件添加到您的主目录来覆盖它,该插件将在 Vim 运行 时间之后加载。
您可以使用名为 ~/.vim/after/ftplugin/gitcommit.vim
的文件执行此操作(假设您使用的是 Vim,如果您使用 NeoVim,则路径的初始部分将有所不同。) after
目录用于最后加载的插件文件,因此通过将文件放在那里,您将确保您的代码 运行 在 上面提到了一个。
在该文件中,您可以添加一个命令来撤消换行的不良影响,例如:
setlocal textwidth&
或者:
setlocal formatoptions-=t formatoptions-=l
这两个设置中的任何一个都将防止在第 72 列自动换行。更改 'formatoptions'
rather than resetting 'textwidth'
is that by only changing 'formatoptions'
you can still use commands such as gq
以手动格式化文本块以符合 72 个字符的行宽限制的优点,如果您愿意的话所以。这样你就可以两全其美了。
无论您决定设置两个选项中的哪个,请确保您使用 :setlocal
而不是 :set
,因为该插件仅为该缓冲区加载,您应该尝试只修改选项单独在该缓冲区上并避免触及全局选项。
另一种方法是向您的 vimrc 添加一个自动命令。如果您在
之后的任何时间添加它filetype plugin on
行,它将覆盖 ftplugin 中的任何内容。我用它来关闭 git 提交中的包装。
" Stops gitcommit from auto wrapping
au Filetype gitcommit call SetGitCommit()
func SetGitCommit()
setlocal formatoptions-=tl
endfunc