在 VIM 中切换语法高亮的隐藏属性

2024-04-19

我目前有一个解析日志文件的语法文件,与以下内容非常相似[这是针对 syslog 的]:

syn match   syslogText  /.*$/
syn match   syslogFacility  /.\{-1,}:/  nextgroup=syslogText skipwhite
syn match   syslogHost  /\S\+/  nextgroup=syslogFacility,syslogText skipwhite
syn match   syslogDate  /^.\{-}\d\d:\d\d:\d\d/  nextgroup=syslogHost skipwhite

我想使用地图来切换给定组(比如说 syslogHost)是否被隐藏。有没有办法做类似以下伪代码的事情:

map <leader>ch :syn match syslogHost conceal!

从而在 syslogHost 之间切换定义:

syn match   syslogHost  /\S\+/  nextgroup=syslogFacility,syslogText skipwhite

and

syn match   syslogHost  /\S\+/  nextgroup=syslogFacility,syslogText skipwhite conceal

Thanks.


I think做到这一点的唯一方法是使用一个函数:

map <leader>ch :call ToggleGroupConceal('sysLogHost')<CR>

function! ToggleGroupConceal(group)
    " Get the existing syntax definition
    redir => syntax_def
    exe 'silent syn list' a:group
    redir END
    " Split into multiple lines
    let lines = split(syntax_def, "\n")
    " Clear the existing syntax definitions
    exe 'syn clear' a:group
    for line in lines
            " Only parse the lines that mention the desired group
            " (so don't try to parse the "--- Syntax items ---" line)
        if line =~ a:group
                    " Get the required bits (the syntax type and the full definition)
            let matcher = a:group . '\s\+xxx\s\+\(\k\+\)\s\+\(.*\)'
            let type = substitute(line, matcher, '\1', '')
            let definition = substitute(line, matcher, '\2', '')
                    " Either add or remove 'conceal' from the definition
            if definition =~ 'conceal'
                let definition = substitute(definition, ' conceal\>', '', '')
                exe 'syn' type a:group definition
            else
                exe 'syn' type a:group definition 'conceal'
            endif
        endif
    endfor
endfunction
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 VIM 中切换语法高亮的隐藏属性 的相关文章

  • 在vim中禁用omnicomplete或ftplugin或其他东西

    我正在尝试禁用 sql 中的 自动 全向 任意 完成 这对我来说是个问题 因为我用过
  • 更改背景颜色

    好吧 我对 vim 还很陌生 我不知道如何更改背景颜色 我正在编辑 vimrc 文件来设置这些颜色 但找不到任何背景颜色 我正在使用一个配色方案 我只需要知道如何覆盖它或者要查找什么 以便我可以在我的 color theme vim 文件中
  • Vim 滚动时保持光标位置

    有没有办法在滚动时使 Vim gVim 中的 cusror 位置保持在屏幕外 与许多 Windows 编辑器类似 我了解标记 并且确实使用它们 我也知道 标记 最后编辑位置 但正在寻找其他想法 我问这个问题是因为有时我想将光标保留在某个位置
  • 关闭文件而不退出 VIM 应用程序?

    我用 e and w用于编辑和写入文件的命令 我不确定是否有 close 命令可以在不离开Vim的情况下关闭当前文件 I know that the q command can be used to close a file but if
  • 可以使 ctag 遵循 #include 指令吗?

    我正在尝试在我的 Makefile 中创建一个目标来自动创建tags使用 ctags 文件 我有一个源文件列表 cpp 文件 但我没有所有头文件的列表 我使用g MM创建标头依赖项列表 我本以为 ctags 会遵循任何 include生成标
  • 适用于 neovim / vim8 的 C# LSP 自动完成客户端

    我尝试了多种方法来使其发挥作用 但似乎没有简单的方法 是的 有大量的插件和配置 但截至 2019 年 10 月 它们无法正常工作 OmniSharp Vim https github com OmniSharp omnisharp vim客
  • vim:无法加载库 libpython

    我不让 vim 与 python 支持一起工作 我使用以下配置编译 vim 7 4 972 configure enable shared with features huge enable multibyte enable cscope
  • Vim:用字符填充行

    如何在一行或多行末尾重复添加字符 将行填充到特定列 例如 x 代表第 40 列 不是该行上的字符 并且文本后没有空格或制表符 line one x line two x line three x line eleventy billion
  • 如何在vim中每隔几行添加一行

    我想使用 vim 编辑器在文件 大约 1000 行 中每 3 行添加一行 有人可以帮我吗 谢谢 艾丽莎 有一个 vim 特定的正则表达式可以做到这一点 s n n n 0 r g s 是 vim ex 命令来替换整个文件 n 是包含行尾的一
  • 使用 Webpack 波形符别名时通过 Vim 中的“gf”解析 JavaScript 模块

    我是使用波浪号的 Vue js 项目的新成员 模块导入中的符号 如 import WhateverApi from api whatever 项目存储库包含所有类型的文件 Vagrant 机器 Laravel 后端应用程序 配置文件和 Vu
  • 选项卡视觉选择

    In many GUIs when I select a section of text and then hit the Tab or Shift Tab button the selected section will indent i
  • Vim - 删除多行中的直到(包括)字符

    我有这个代码 def foo c Char c match case a B 我的光标位于后面的空格上 我想删除所有内容 直到 包括 我怎样才能做到这一点 我可以在光标位于第一行任意位置时执行相同操作吗 块中的任何位置 并将光标放在 d e
  • 如何在vim中的相同行数前面插入多行?

    假设我有两个文本块 其中之一在我的剪贴板中 one two three 另一个位于我正在 vim 中编辑的文件中 AAA BBB CCC 如何在第二个块前面插入第一个块以获得以下结果 oneAAA twoBBB threeCCC 我希望有一
  • 为什么 "map! :q " 在 vi​​m 中不起作用?

    I input map
  • 切换 git 分支时如何处理 vim 缓冲区?

    因此 我在 vim 缓冲区中打开了大量文件 并且正在使用 git 处理功能分支 突然 我意识到我需要恢复到主分支来进行快速修复 提交后 我将 vim 会话保持打开状态并切换回 master 分支 但是 当我尝试从缓冲区加载我需要的文件时 我
  • 在 Vim 中搜索并替换为递增值

    假设我写了一个简单的 CSS 规则 如下所示 star 10 background url stars png no repeat 0 0 而我需要10个 所以我复制了9次 star 10 background url stars png
  • 文件保存期间语法突出显示随机消失

    我正在使用 vim 编辑一些 python 文件 最近偶尔会出现在 vim 中保存缓冲区后语法高亮消失的情况 我尝试重置syntax on and set filetype python但无济于事 我根本不知道是什么原因导致了这个问题 所以
  • 在 Vim 中以反转模式突出显示匹配项

    如何在 Vim 中使用 match 命令突出显示与给定模式不匹配的文本 所以 我想要相反的 match myGroup foo 好吧 你可以这样做 match myBaseHighlight foo 2match myGroup where
  • 带有 Viper 和 Vimpulse 的 Emacs 缺少哪些 Vim 功能?

    Emacs 的一些重要功能在 Vim 中是缺失的 例如 comint 模式 并且没有脚本 插件可以替代它们 与 Emacs 相比 Vim 也有一些优点 例如模式编辑和通常更好的默认快捷键 然而 Viper 模式让我两者兼而有之 Vimpul
  • Redhat Vim 中的可视化块插入

    我的 ec2 服务器附带了 redhat vim ec2 user vim version VIM Vi IMproved 7 2 2008 Aug 9 compiled Jul 7 2012 08 03 48 Included patch

随机推荐

  • 从 Metro Style App c# 加载 C 库 (gsdll32.dll)

    我想使用 Metro Style App c 中的 gsdll32 dll 我加载dll如下 DllImport gsdll32 dll EntryPoint gsapi delete instance private static ext
  • 如何用序列图来展示一个类与另一个类之间的关系,以该类的实例的实例作为输入?

    我将使用之前的相同示例question https stackoverflow com questions 66934927 how to represent the relationship between an instance of
  • 如何使图像视图的选择器仅更改背景而不更改图像源?

    我有一个 ImageView 同时设置了图像 src 和背景颜色 该图像位于 gridview 项目布局的布局中 我想创建一个 xml 选择器 当选择该项目时 图像背景会改变 但图像 src 不会改变 类似于带有文本图标的android主菜
  • 如何在elasticsearch中配置synonym_path

    我对 elasticsearch 很陌生 我想使用同义词 我在配置文件中添加了这些行 index analysis analyzer synonym type custom tokenizer whitespace filter synon
  • Lisp / Clojure:编写函数生成宏是个好主意吗?

    这个问题 https stackoverflow com q 7852351 346587要求创建一个 Clojure 宏来生成多个函数 我们找到了一种方法来做到这一点 但仍被 这是一个好主意吗 的问题所困扰 我的第一反应是并不真地 有两个
  • 无法从 sonarqube 服务器更新数据

    当 sonarlint eclipse 要求我刷新我的 sonarqube 数据 更新所有项目绑定 时 我收到以下错误 Unable to update data from server cerbere Unable to move C w
  • pthread_join() 用于异步线程

    我写了一个简单的演示程序 以便我可以理解pthread join 功能 我知道如何使用pthread condition wait 函数允许异步线程 但我试图了解如何使用pthread join 功能 在下面的程序中我通过线程1s ID t
  • 部分 GSON 反序列化

    我正在实施一个自定义JsonDeserializer因为处理所需的业务逻辑 但有些部分可以用标准方式解析 这是否可能 自己处理一些元素并让一些嵌套元素自动处理 这是 JSON id 10 games PZ definition count
  • 将项目 own_to 关系添加到 Active Admin

    我正在为我的 Rails 应用程序使用活动管理 我有一个客户模型 它属于一个部门 也属于一个交货时间 在我的管理文件夹中 我有一个用于主动管理的 customer rb 文件 该文件看起来像这样 ActiveAdmin register C
  • 如何将数据库从本地主机移动到实时服务器

    我使用 Xampp 构建了一个数据库和网站 它允许我使用和测试 php 以及托管在本地主机上的数据库 我现在想将其移至实时服务器 我已使用 123 reg 将网站移至实时服务器 如何移动数据库 我尝试导出 phpmyadmin 数据库并将
  • 从单独的键和值列表创建字典(dict)

    我想将这些结合起来 keys name age food values Monty 42 spam 放入单个字典中 name Monty age 42 food spam 我怎样才能做到这一点 像这样 keys a b c values 1
  • .htaccess:如何通过IP限制对单个文件的访问?

    我已经查看了所有内容 但不断遇到有关目录级 IP 限制的相同信息 通常如下所示 Order Deny Allow Deny from all Allow from 123 123 123 123 是否可以将相同类型的访问限制绑定到页面 文档
  • 高级分析对于所选进程不可用

    我正在尝试使用 3 0 中的 Android Studio 分析器分析 APK 由于我使用的不是 Android 7 0 因此我必须在模块配置中显式打开高级分析 问题是 完成此操作后 Android Studio 仍然显示 高级分析对于所选
  • 如何在管理面板中显示插件激活通知?

    当我激活测试插件时 我试图在管理面板中显示通知 我怎样才能显示它 那个方法是什么 对于插件激活 不能直接使用 admin notices 挂钩 因为存在重定向 解决方法是将您的通知存储在选项表中 并在下次检查 另外 如果您还想涵盖插件升级和
  • Django 表单验证:获取 JSON 格式的错误

    我有这个非常简单的 Django 表单 from django import forms class RegistrationForm forms Form Username forms CharField Password forms C
  • c# listview取消选择项目

    我正在开发一个 Windows 应用程序 它有一个包含一堆项目的 ListView 当用户单击某个项目时 应用程序会显示该项目的详细信息 这 然后用户就有机会编辑这些详细信息 用户应该单击 每次更改后都会单击 保存 按钮 但当然这种情况并不
  • 如何解析没有对象名称的 JSON 数组

    我将如何在 Java 中解析这个 JSON 数组 我很困惑 因为没有对象 谢谢 编辑 我是个白痴 我应该阅读文档 这可能就是它的用途 id 63565 name Buca di Beppo user null phone 408 377 7
  • Python Flask 导入未导入模块的错误

    我有一个在 Google App Engine 中运行的 Flask 应用程序 昨天 我部署了应用程序的新版本 其中仅更改了 HTML 样式 它按预期部署 今天 我意识到我没有更改每个相应 HTML 页面的标题 因此我只更改了每个 HTML
  • android服务的onCreate未调用

    我想以静态方式启动服务 所以从我的活动中我打电话 SpeechActivationService makeStartServiceIntent this getApplicationContext WordActivator 这是从服务类扩
  • 在 VIM 中切换语法高亮的隐藏属性

    我目前有一个解析日志文件的语法文件 与以下内容非常相似 这是针对 syslog 的 syn match syslogText syn match syslogFacility 1 nextgroup syslogText skipwhite