emacs 如何刷新缓冲区并保留突出显示 - 特别是对于日志

2024-03-23

I am often parsing log files, which I help visualize by highlighting specific char sequences via M-s h r + regex, aka the command highlight-regexp or hi-lock-face-buffer. Sometimes I will need to regenerate the log file, which is done via the C-x C-v or find-alternate-file command. Unfortunately, the regeneration also loses all of my highlighting.

TLDR有没有办法在保持所有突出显示的同时重新生成我的缓冲区文件?

Update我在用text-mode,并且正则表达式根据我的任务和日志文件的不同而有很大差异。我想要一些能够将我所有的突出显示内容转移到刷新的缓冲区中的东西。有些东西已经存在了吗?

Answer:所选答案使用add-hook为特定日志创建突出显示方案。此外,每个日志可以有不同的突出显示方案。结果是一个与特定日志文件名称匹配的自动突出显示方案,并且能够切换各种突出显示的方案。


您可以添加挂钩:

(add-hook 'text-mode-hook
          (lambda ()
            (font-lock-add-keywords nil '(("^\\([^,]*\\)," 1 'font-lock-function-name-face)))))

您想强调什么正则表达式?如果您根据日志使用多个正则表达式,则可能可以将它们全部挂接。或者您可以编写条件:哪个正则表达式来突出显示:

(add-hook 'text-mode-hook
          (lambda ()
            (if (condition)
                ;; condition true:
                (font-lock-add-keywords nil '((regexp1 1 'font-lock-function-name-face)))
              ;; condition false:
              (font-lock-add-keywords nil   '((regexp2 1 'font-lock-function-name-face)))
              )
            ))

此外,如果您控制日志的生成,您可以在第一行生成突出显示规则:

# -*- eval: (highlight-regexp REGEXP) -*-

(假设 # 是日志中的注释字符)。

Edit:

这是 defun,它可以切换突出显示TestQueryLogic or invoking fork-join and testGudermann:

(defun testing-MapAppLog.txt ()
  "Toggle highlighting `TestQueryLogic' or `invoking fork-join' and `testGudermann'."
  (interactive)
  (cond
   ((get this-command 'state)
    (highlight-regexp "TestQueryLogic"     font-lock-variable-name-face)
    (highlight-regexp "invoking fork-join" font-lock-type-face)
    (unhighlight-regexp "testGudermann")
    (message "Highlighting: TestQueryLogic, invoking fork-join")
    (put this-command 'state nil))
   (t
    (unhighlight-regexp "TestQueryLogic")
    (unhighlight-regexp "invoking fork-join")
    (highlight-regexp "testGudermann" font-lock-preprocessor-face)
    (message "Highlighting: testGudermann")
    (put this-command 'state t))))

所以调用一次来突出显示TestQueryLogic, invoking fork-join,再次调用以突出显示testGudermann反而。您可以绑定到一个键:

(define-key text-mode-map (kbd "M-s t") 'testing-MapAppLog.txt)

然后根据您想要突出显示的内容按一次或两次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

emacs 如何刷新缓冲区并保留突出显示 - 特别是对于日志 的相关文章

随机推荐

  • 悬停时的 jQuery 卡片动画

    当鼠标悬停在其中一张卡片上时 其余卡片应正确地逐一减小大小 例如 将鼠标悬停在卡片 1 上 目前我的解决方案是一一添加和删除类 但我想知道是否有更好的方法使用 jQuery 来完成它 card mouseover function card
  • 超出低磁盘水位线 [??%]

    我在我的开发机器 一台笔记本 中使用 Elasticsearch 1 4 4 一切都设置为默认值 因为我从未更改过任何设置 当我启动它时 我通常会收到以下消息 2015 10 27 09 38 31 588 INFO node Milan
  • Android 应用程序关闭时如何保持 Web 套接字连接处于活动状态

    我正在寻找一个应用程序 向 websocket 发送消息 以便在计算机内的特定参数发生变化时启用通知 参数在计算机中发生变化 通过 websocket 传输 然后到达我的应用程序 这部分是正确的 对吧 即使我的应用程序关闭 我如何接收这些
  • 如何在 Linux (Raspberry Pi) 上从帧缓冲区获取像素颜色

    我正在尝试编写一个小程序来根据屏幕上某些像素的颜色来控制 RGB LED 的颜色 由于这是在运行 Raspbmc 的 Raspberry Pi 上 我无法使用 XLib 因为所有内容都是从帧缓冲区中绘制的 不确定这是否属实 但从我在常见问题
  • 禁用功能区按钮

    我想禁用而不是隐藏特定列表类型上的功能区按钮 特别是 Ribbon ListItem New NewListItem 在网络上 我可以找到很多帖子向我展示删除 隐藏按钮的方法 但没有一个真正有价值的帖子可以告诉我如何在自定义列表类型中禁用现
  • Streamlit:如何使用按钮重新加载页面并在每次单击后存储以前的信息

    我的应用程序的目的是在填写表格后构建一个 可下载的 tsv 文件 每个表格页面都与新学生的信息相关 所以我总是有相同的页面结构 每个学生都有相同的表格 我想要的是添加一个按钮 为每个新学生生成一个新页面 最后 结束 按钮应显示表格 例如使用
  • 如何增加 Visual Studio 中的错误限制?

    在 Visual Studio 中构建应用程序时 当超过错误计数时显示以下错误 fatal error C1003 error count exceeds 100 stopping compilation 有没有办法提高错误限制 此限制是硬
  • 在 Node 中以编程方式创建证书和证书密钥

    使用 node js 我想编写代码以编程方式执行与以下操作等效的操作 openssl genrsa des3 passout pass x out server pass key 2048 openssl rsa passin pass x
  • 引起原因:java.lang.NoClassDefFoundError:com/fasterxml/jackson/databind/JsonMappingException$Reference

    我对 Java 完全陌生 我正在尝试显示 JSON 数据 为此我决定使用 Jackson 库 但我收到错误 我在用 jackson annotations 2 3 0 jar jackson core 2 4 2 jar jackson d
  • 如何在材料表中使用自定义“editComponent”?

    我正在尝试在我的项目中使用 材料表 我的 图标 列包含图标名称 我需要通过从外部对话框中选择它来更改此图标 我在从外部对话框更新表数据时遇到问题 当我使用 输入 元素并更改图标名称时 它可以正常工作 editComponent props
  • 如何使用堆栈安装包?

    使用 cabal 我可以使用以下命令安装 hakyll cabal install hakyll 我怎样才能使用堆栈做同样的事情 stack install hakyll stack提供了一套精选的软件包 不会炸毁您的机器 如果您想检查哪些
  • Lambda 似乎不适用于 VS2010 中的引用类

    Visual Studio 2010 中最酷的 C 新功能之一是 lambda 表达式 但是 我无法让他们在托管类中工作 class UnmanagedClass void Foo Creating empty lambda within
  • 在 jboss 7 中使用 java 服务包装器时出现问题

    我正在尝试使用 Java 服务包装器使用此配置将 Jboss 7 1 0 Final 安装为服务 这是一个草案conf 因此请忽略绝对路径 Java Application wrapper java command java wrapper
  • 扩展Page类

    是否可以扩展 C 的 WPF 工具包中的 Page 类 或任何其他 WPF 类 我尝试做的事情 public class ExtendedPage Page protected void doStuff lots of joy n plea
  • 使用java查找堆栈的索引(仅使用push、pop和peek方法)

    新程序员在这里学习java 我试图计算一个循环需要多少步才能停止考虑用户输入的内容 请记住 学校里的某些人设置了限制sigh您只能使用堆栈中的某些方法 这些方法是push pop 和peek Input first input是添加了多少元
  • 锁定分支,使其无法暂存/提交? (仅合并/等)

    我有一个master develop我喜欢的分支系统 但它有一个基本规则 没有提交develop or master 仅合并 这很棒 但最近我不小心在我的开发分支上做了一些更改 提交 这让我很恼火 我考虑将这些提交的所有权从develop进
  • Qt 应用程序抛出“dyld:未找到符号:__cg_jpeg_resync_to_restart”

    我变得众所周知dyldOS X 上的问题 Qt pro文件 INCLUDEPATH usr local Cellar libpng 1 6 23 include usr local Cellar jpeg 8d include LIBS L
  • 用于密码存在验证的自定义错误消息

    看起来这应该很简单 注册新用户时 我想要空白用户名和密码的自定义错误 对于用户名来说效果很好 validates name presence message Please enter a name length maximum 50 mes
  • C++ 单例设计模式替代方案

    我讨厌死马当活马医 也就是说 在过去的几天里 我已经阅读了很多关于单例模式使用的相互冲突的文章 这个问题不是关于哪个是一般更好的选择 而是关于什么对我的用例有意义 我正在做的宠物项目是一个游戏 我目前正在编写的一些代码 我倾向于使用单例模式
  • emacs 如何刷新缓冲区并保留突出显示 - 特别是对于日志

    I am often parsing log files which I help visualize by highlighting specific char sequences via M s h r regex aka the co