vim – 当filetype为none时,如何设置autocmd生效?

在Vim中,我希望仅当文件类型为markdown,text或none(即NULL)时才设置某个映射集.指定“无”是困难的部分.

以下命令适用于:set filetype?返回filetype = markdown或filetype = text.但是如果:设置文件类型?返回filetype =(在我的状态行中显示为none)它不起作用.

autocmd FileType markdown,text,none  nnoremap <leader>f :%! cat<CR>

没有设置指定文件类型的正确方法是什么?换句话说,只有在未设置文件类型(或文本或降价)时才应定义此映射.在任何其他文件类型上,映射应该是未定义的.

注意:映射是设计的,因为它不是问题的有趣部分.

解决方法

这是一种方式:

autocmd FileType markdown,text nnoremap <buffer> <leader>f :1,$! cat
autocmd BufNewFile,BufRead * if empty(&filetype) | execute 'nnoremap <buffer> <leader>f :1,$! cat' | endif

由于未检测到文件类型时未触发FileType事件,因此必须使用原始文件类型检测事件,并检查空文件类型.将这些行放在〜/ .vimrc中的filetype之后,以便autocmd排序正确.

请注意,您的问题中的代码仍定义全局映射(在加载其中一个文件类型之后);你需要添加< buffer>使这些映射真正本地化. (并且100%正确使用< Localleader>,尽管大多数用户没有为此定义单独的密钥.)

如果您对全局映射没有问题,您还可以在运行时删除所有autocmds并执行文件类型检查(如果这确实是必要的;我没有看到您的示例中的其他文件类型的错误行为),例如with:help:map-expr:

nnoremap <expr> <leader>f index(['markdown','text',''],&filetype) == -1 ? '': ':1,$! cat')

后记

>您的映射不完整,即它将光标留在命令行模式;那打算?追加< CR>完成它.>而不是1,$,您可以使用%范围.

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...