Vim 评论格式选项重复不起作用

Vim Comments Format Options Repeat Not Working

我将文件类型的 comments 选项设置为 b:*。如果我打开这样的文件,我可以用 set comments? 来验证这一点。现在我进一步明确设置 formatoptions 以使用 r 在新行上重复注释。毕竟调用set formatoptions?return总和j1tcqln。 如果打开一个新行 o 并写类似 * This is a comment 的内容,点击 <CR 我希望在新行上得到一个 * es,导致 r 选项, 但事实并非如此。
检查 +comments 功能是否可用 :echo has('comments') 是肯定的并且 returns 1.
这里有什么问题?

编辑:
这是我的 ftplugin/markdown.vim:

setlocal comments=b:*,b:-,b:+,b:>
setlocal formatoptions+=r
setlocal formatoptions-=c
echom 'Format: ' . &formatoptions

打开这种类型的文件时,最后一行留下正确的信息。但是之后手动调用 :echo &formatoptions,它又是错误的输出。

似乎无论我在这个ftplugin之后做什么,它都不再存在了,即使它已经被执行了。

编辑:
看起来我的 ftplugin/usr/share/nvim/runtime/ftplguin/ 中的默认值覆盖了。这有意义吗?我怎么能把它们混在一起?

解决方案是在 ftplugin 文件的 header 处添加:

if exists('b:did_ftplugin') | finish | endif
let b:did_ftplugin = 1

然后是必要的,因为如果设置了此变量,/usr/share/nvim 中的 ftplugin 会在之后加载并且不会被执行。

文件类型插件按此顺序获取,每个插件都可能覆盖前一个:

$HOME/.vim/ftplugin/markdown.vim
$VIMRUNTIME/ftplugin/markdown.vim
$HOME/.vim/after/ftplugin/markdown.vim

--- 编辑 ---

第一个位置适合两种场景:

  • 您正在为 Vim、
  • 本身不支持的语言创建支持脚本
  • 您想阻止 Vim 获取特定文件类型的默认支持脚本(您答案中的解决方案)。

第二个地点禁止入内。这样做的四个主要原因:

  • 您的更改可以并且将会在未来的更新中被覆盖,
  • 您的更改可能会使 Vim 不稳定,
  • 不得不对您的配置进行 sudo 操作会很快变得烦人,
  • 你的东西放入你的 $HOME.

第三个位置是最后一个来源,因此它允许您有选择地覆盖默认设置并添加您自己的设置。这是您自己的文件类型特定设置最安全的地方。