将控制字符[SOH]显示为空白区域,或者在Notepad ++中显示

Meh*_*ANI 7 notepad++

我正在调试/监视一个日志文件,其中包含大量的控制字符[SOH]
这使得日志几乎不可读(对我来说,在NP ++上,但是必须这样,因为这个字符在我正在监视的协议中有一些用处) )

如何在NP ++上以更友好的方式显示该角色?

编辑:替换不是一个选项,因为我只想拖尾文件,而不是编辑它.

Ada*_*kes 18

介绍

Notepad ++使用Scintilla作为编辑器组件.Scintilla具有一个功能SCI_SETCONTROLCHARSYMBOL(int symbol),您可以在其中设置将用于控制字符的字符.他们从Scintilla Docs中描述了这些功能:

SCI_SETCONTROLCHARSYMBOL(int符号)

SCI_GETCONTROLCHARSYMBOL

默认情况下,Scintilla在圆角矩形中显示控制字符(代码小于32的字符)作为ASCII助记符:"NUL","SOH","STX","ETX","EOT","ENQ","ACK" ,"BEL","BS","HT","LF","VT","FF","CR","SO","SI","DLE","DC1","DC2"," DC3","DC4","NAK","SYN","ETB","CAN","EM","SUB","ESC","FS","GS","RS","US" .这些助记符来自信号的早期,尽管仍然使用了一些(例如,LF =换行,BS =后退空间,CR =回车率).

您可以选择使用ASCII代码在32到255范围内的指定符号替换这些助记符.如果将符号值设置为小于32,则所有控制字符都显示为助记符.您设置的符号将以为该字符设置的样式的字体呈现.您可以使用SCI_GETCONTROLCHARSYMBOL消息回读当前符号.默认符号值为0.

可能有一种"正确"的方式来做到这一点,但我会给你一个非常黑客的方式来完成这个.

技术

%APPDATA%\Notepad++\shortcuts.xml使用除Notepad ++之外的任何内容编辑文件.

将以下内容添加到<Macros>文件的部分以手动添加宏:

<Macro name="RemoveControl" Ctrl="no" Alt="no" Shift="no" Key="0">
        <Action type="0" message="2388" wParam="32" lParam="0" sParam="" />
</Macro>
Run Code Online (Sandbox Code Playgroud)

请注意,您可以设置一个快捷键用Ctrl,Alt,ShiftKey属性.在wParam将设置将被用来代替拼写出代码的字符.在这种情况下,代码32是ASCII标准中的空格.消息2388SCI_SETCONTROLCHARSYMBOL值的常量.

保存文件

使用

现在,您可以在运行时更改Notepad ++的行为.要使用它,请执行以下操作

打开Notepad ++ 只需打开编辑器即可.如果直接打开文件(即使用Notepad ++上下文菜单编辑),您将会遇到奇怪的行为.

从菜单(或快捷方式)激活宏. 如果有一种方法可以在启动时自动运行宏,那么在这里添加它会很不错

打开你的文件. 这里没什么新鲜的

笔记

  1. 具有控制字符的位置仍将被反转(默认情况下,黑色背景上的白色文本).
  2. 如果在打开文档时激活宏,它将不会立即生效.你必须做一些事情来强制窗口重绘.
  3. 查看Scintilla.h文件可能会打开其他可能被类似利用的选项.