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,$,您可以使用%范围. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |