【问题标题】:in vimrc apply certain highlighting rules only for certain filetype在 vimrc 中,仅对某些文件类型应用某些突出显示规则
【发布时间】:2018-11-30 01:37:09
【问题描述】:

在我的 vimrc 中,我有一个脚本可以在 * * 双星 * * 之间用粗体转换文本(实际上就像在这个编辑器中一样),但我不希望它应用于我的 js 或 c 或当然,任何编程文件,所以我试图让它只在它是一个 .txt 文件时运行:

if (&filetype=='text')
    set concealcursor=n
    set conceallevel=3
    hi AsteriskBold ctermfg=Green cterm=bold
    autocmd BufEnter * syn match Asterisks contained "**" conceal
    autocmd BufEnter * syn match AsteriskBold "\*\*.*\*\*" contains=Asterisks
endif

但显然“如果”的条件不起作用,因为此规则不再适用于我的任何文件、文本或非文本

编辑 => 解决方案

阅读答案后,我在我的 vimrc 中选择了这个解决方案(尽管它不是 ingo 解释的 vim 工作的最佳方式)

au BufEnter *.txt setf text "(set a filetype unless it already exist)
au filetype text set cocu=n cole=3
au filetype text hi AsteriskBold ctermfg=Green cterm=bold
au filetype text syn match Asterisks contained "**" conceal
au filetype text syn match AsteriskBold "\*\*.*\*\*" contains=Asterisks

【问题讨论】:

    标签: vim file-type


    【解决方案1】:

    文件类型

    文件类型特定设置进入~/.vim/after/ftplugin/text.vim。 (这要求您有 :filetype plugin on;使用 after 目录允许您覆盖由 $VIMRUNTIME/ftplugin/text.vim 完成的任何默认文件类型设置。)或者,您可以直接在您的 @ 中定义 :autocmd FileType text ... 987654326@,但是一旦您进行了许多自定义,这往往会变得笨拙。

    语法

    对于:syntax 命令,有一个对应的目录~/.vim/after/syntax/text.vim。 (Vim 目前没有提供专用的 text 语法;您可以删除 after 部分,并将您的语法作为主要部分。)

    按照语法脚本约定,您的语法组应以文件类型为前缀;例如textAsterisks:hi 组也必须重命名;但是,通常语法脚本使用:hi def link 将语法组链接到(更通用的)突出显示组:hi def link textAsteriskBold AsteriskBold。更多信息在usr_44.txt末尾。

    突出显示组

    这些是全局的,您可以将您的 :hi 命令直接放入您的 ~/.vimrc 并只定义一次。

    隐藏

    隐藏设置是window-local,但文件类型和语法适用于缓冲区。通过使用:set(而不是:setlocal),这些设置将被从显示文本文件的窗口打开的任何新窗口继承。根据您的工作流程(以及您编辑的其他文件类型是否使用隐藏),您可能永远不会注意到这一点,并且没有好的解决方法(只有大量的 :autocmd 可以尝试调整这些)。请注意这一点。

    【讨论】:

    • 非常有趣!我没有将其标记为已接受的答案,因为它不会立即解决我的问题,但会提供有关实际工作方式的信息
    • Stack Overflow 应该教你,而不是给你现成的答案,你只需要复制和粘贴。 (特别是你的问题可以在不同的层面上通过不同的努力来解决。)但是当然,你可以再等一段时间:-)
    • 当然,但同时,我了解了 augroup 命令,并且我的 if 语句语法不正确,我仍然需要自己弄清楚为什么需要 augroup,因为每个 au 命令行从文件类型的验证开始,所以它不是一个准备好使用的答案,我觉得它更接近我的确切问题,但是我已经非常仔细地阅读了你的帖子,以便将来使用它,它真的很有帮助
    【解决方案2】:

    您正在寻找augroup

    请参阅 :help augroup:help filetype

    例如:

    augroup asteriskbold
        au!
        au BufNewFile,BufRead *.txt,*.md,*.mkd,*.markdown,*.mdwn set concealcursor=n conceallevel=3
        au BufNewFile,BufRead *.txt,*.md,*.mkd,*.markdown,*.mdwn hi AsteriskBold ctermfg=Green cterm=bold
        au BufNewFile,BufRead *.txt,*.md,*.mkd,*.markdown,*.mdwn syn match Asterisks contained "**" conceal
        au BufNewFile,BufRead *.txt,*.md,*.mkd,*.markdown,*.mdwn syn match AsteriskBold "\*\*.*\*\*" contains=Asterisks
    augroup end
    

    【讨论】:

    • 您在不必要地重复 文件类型检测。如果 OP 已经为 text 文件类型设置了该文件类型,您可以简单地跳到上面并使用 au FileType text。请注意,与这种方法相比,我仍然更喜欢(内置)文件类型插件。
    • 好的!谢谢英戈!
    • 目前我喜欢把我的所有设置都放在我的 vimrc 中,因为我没有很多设置,而且我经常在新电脑上工作,所以很容易保存我的 vimrc 并拥有我的所有设置在一个地方
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2016-01-19
    相关资源
    最近更新 更多