加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:49:58 所属栏目:安全 来源:网络整理
导读:在Vim中,我希望仅当文件类型为markdown,text或none(即NULL)时才设置某个映射集.指定“无”是困难的部分. 以下命令适用于:set filetype?返回filetype = markdown或filetype = text.但是如果:设置文件类型?返回filetype =(在我的状态行中显示为none)它不起
在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,$,您可以使用%范围.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读