gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:38:30 26 4
gpt4 key购买 nike

在 Vim 中,只有当且仅当文件类型为 markdown、text 或 none(即 NULL)时,我才想要设置某个映射。指定“无”是困难的部分。

如果 :set filetype?,下面的命令有效返回 filetype=markdownfiletype=text .但如果 :set filetype?返回 filetype= (在我的状态行中显示为 none)它不起作用。

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

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

注意:映射是人为的,因为它不是问题的有趣部分。

最佳答案

这是一种方法:

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未检测到文件类型时不会触发事件,您必须使用原始文件类型检测事件,并检查空文件类型。将这些行放在 :filetype on 之后在您的 ~/.vimrc ,这样 autocmd 的顺序是正确的。

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

如果你对全局映射没问题,你也可以去掉所有的 autocmds 并在运行时只执行文件类型检查(如果真的有必要;对于你的例子,我没有看到其他文件类型的不良行为),例如与 :help :map-expr :
nnoremap <expr> <leader>f index(['markdown', 'text', ''], &filetype) == -1 ? '': ':1,$! cat')

后记
  • 您的映射不完整,即它使光标处于命令行模式;这是故意的吗?追加 <CR>完成它。
  • 而不是 1,$ ,您可以使用 %范围。
  • 关于vim - 当filetype为none时如何设置autocmd生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46678615/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com