使用文件类型插件文件(ftplugin)更改vim/neovim中的文件类型

使用文件类型插件文件(ftplugin)更改vim/neovim中的文件类型,vim,markdown,vi,neovim,multimarkdown,Vim,Markdown,Vi,Neovim,Multimarkdown,自动执行创建多标记注释的步骤。我想让neovim根据第一行的内容更改文件的文件类型。我所有的多重降价笔记都以标题开头,例如 标题:欧几里得距离 理想情况下,我希望将其保留在init.vim.vimrc文件中,但是当我将以下内容放入../ftplugin/txt.vim文件时,neovim不会在读取/打开时更新缓冲区 如何让neovim检查文件的第一行并更改其类型或至少更改其语法。Thx 我知道运行时不会监视所有文件。自动检查文件类型并进行更改的唯一方法是使用autocmd,通过init.vim.

自动执行创建多标记注释的步骤。我想让neovim根据第一行的内容更改文件的文件类型。我所有的多重降价笔记都以标题开头,例如

标题:欧几里得距离

理想情况下,我希望将其保留在init.vim.vimrc文件中,但是当我将以下内容放入../ftplugin/txt.vim文件时,neovim不会在读取/打开时更新缓冲区

如何让neovim检查文件的第一行并更改其类型或至少更改其语法。Thx

我知道运行时不会监视所有文件。自动检查文件类型并进行更改的唯一方法是使用autocmd,通过init.vim.vimrc获取ftplugin/txt.vim文件的源代码。根据:h新文件类型B部分,您可以执行以下操作:

augroup txt_to_markdown
    autocmd!
    autocmd BufRead * if &filetype == 'text && getline(1) =~ '^title:' | set filetype=markdown | endif
augroup END
根据:h新文件类型B部分,您可以执行以下操作:

augroup txt_to_markdown
    autocmd!
    autocmd BufRead * if &filetype == 'text && getline(1) =~ '^title:' | set filetype=markdown | endif
augroup END

这与@PeterRincker的答案是一样的,但我认为您应该遵循,因为如果您的文件类型只能通过检查文件内容来检测,那么您的描述与您的用例完全匹配

这样,您就可以将以下内容放入~/.vim/scripts.vim中:


这与@PeterRincker的答案是一样的,但我认为您应该遵循,因为如果您的文件类型只能通过检查文件内容来检测,那么您的描述与您的用例完全匹配

这样,您就可以将以下内容放入~/.vim/scripts.vim中:


title.$与title:Euclidean距离不匹配。也许您的意思是:^title:@PeterRincker感谢您的回复您共享的正则表达式确实捕获了文件的第一行。我将更新我的问题,因为我的主要问题是neovim在打开/读取新缓冲区时不会更改文件类型。每次打开缓冲区时,我都必须获取ftplugin/txt.vim的源代码。title.$与title:Euclidean Distance不匹配。也许您的意思是:^title:@PeterRincker感谢您的回复您共享的正则表达式确实捕获了文件的第一行。我将更新我的问题,因为我的主要问题是neovim在打开/读取新缓冲区时不会更改文件类型。每次打开缓冲区时,我都必须获取ftplugin/txt.vim的源代码。
if did_filetype()   " filetype already set..
    finish      " ..don't do these checks
endif
if getline(1) =~ '^title:'
    setfiletype markdown
endif