如何让Vim在粘贴内容到空缓冲区后自动检测文件类型并启用语法高亮
解决Vim空缓冲区粘贴内容后自动检测文件类型的问题
你的TextChangedI * :filetype detect命令无效的原因有两个:
TextChangedI仅在插入模式下手动修改文本时触发,通过Ctrl-V粘贴(无论普通模式还是插入模式)通常不会触发该事件;- 空缓冲区未命名(无文件扩展名),
filetype detect需要缓冲区有足够内容才能通过内容启发式识别类型,单次粘贴操作可能没来得及触发检测。
以下是两种可行的自动检测方案,任选其一添加到你的~/.vimrc(或Neovim的~/.config/nvim/init.vim)中:
方案一:缓冲区首次修改时触发检测
这个方案只会在缓冲区从空变为有内容时触发一次检测,效率更高:
autocmd BufModifiedSet * if &buftype == '' && !&filetype && line('$') > 1 \ | filetype detect \ | endif
BufModifiedSet:当缓冲区标记为已修改时触发;- 条件判断确保只作用于普通编辑缓冲区(非终端、预览窗等)、尚未设置文件类型且内容多于一行的情况。
方案二:文本变更时触发检测
这个方案会在任何模式下文本发生变更时检测,适合频繁编辑粘贴内容的场景:
autocmd TextChanged * if &buftype == '' && !&filetype \ | filetype detect \ | endif
添加后,你再粘贴HTML、JSON或Python内容到空缓冲区时,Vim会自动识别并启用对应的语法高亮,和打开对应类型文件的效果一致。
内容的提问来源于stack exchange,提问作者Anthony Albert
相关产品推荐
相关产品推荐

