如何在Notepad++单行长文本场景下显示搜索词的当前匹配序号与总匹配数
如何在Notepad++单行长文本场景下显示搜索词的当前匹配序号与总匹配数
我完全懂你的痛点!Notepad++原生的“查找下一个”功能在处理超长长单行文本时,确实没法像Chrome那样直观显示当前是第几个匹配、总共有多少个——毕竟“在当前文档中查找全部”在单行文本里只会把所有匹配堆在一起,根本没法区分序号。
不过不用改原文本,也不用换软件,用Python Script插件就能完美解决这个问题,下面给你一步步讲怎么做:
方法一:用Python Script插件自定义查找计数功能
1. 先安装Python Script插件
打开Notepad++,点击顶部菜单栏的插件 → 插件管理,在搜索框里搜Python Script,找到后点击安装,安装完成后重启Notepad++就行。
2. 创建自定义查找脚本
- 点击
插件→Python Script→New Script,给脚本起个好记的名字,比如FindWithCounter.py,点保存。 - 在弹出的编辑器里粘贴下面的代码:
from Npp import editor, notepad, STATUSBARSECTION def find_with_counter(): # 获取当前搜索框里的关键词 search_text = notepad.getCurrentSearchString() if not search_text: notepad.messageBox("请先在搜索框输入要查找的内容哦!", "提示") return # 获取当前文档的全部内容,统计总匹配数 content = editor.getText() total_matches = content.count(search_text) if total_matches == 0: notepad.messageBox("没找到匹配的内容呢!", "提示") return # 计算当前光标位置之前的匹配数,确定下一个匹配的序号 current_pos = editor.getCurrentPos() matches_before = content[:current_pos].count(search_text) # 查找下一个匹配的位置 next_pos = editor.findText(0, current_pos, len(content), search_text) # 如果到了最后一个,就回到第一个匹配 if next_pos == -1: next_pos = editor.findText(0, 0, len(content), search_text) current_match = 1 else: current_match = matches_before + 1 # 跳转到匹配位置并选中,同时在状态栏显示计数 editor.setSel(next_pos, next_pos + len(search_text)) editor.setStatusBarText(f"当前匹配: {current_match}/{total_matches}", STATUSBARSECTION.DOCPOS) # 执行脚本 find_with_counter()
3. 怎么用这个脚本?
- 先在Notepad++的搜索框里输入你要找的词(比如
calculator),不用点“查找下一个”。 - 点击
插件→Python Script→Scripts→FindWithCounter,就能跳转到第一个匹配,状态栏会显示当前匹配: 1/112(假设总共有112个)。 - 每次再点这个脚本,就会跳转到下一个匹配,序号自动递增,到最后一个后会回到第一个循环。
小调整:如果需要大小写不敏感搜索
把代码里的editor.findText(0, current_pos, len(content), search_text)改成editor.findText(1, current_pos, len(content), search_text)就行,第一个参数1代表忽略大小写。
更方便的用法:绑定快捷键
你可以给这个脚本绑定一个快捷键,比如Ctrl+Shift+F:
- 点击
插件→Python Script→Configuration - 在
Scripts列表里找到FindWithCounter.py,点击Modify,设置你想用的快捷键,确定后重启Notepad++,以后按快捷键就能直接调用啦!
方法二:试试现成插件(可选)
如果你不想自己写脚本,可以试试Notepad++插件库中的Find Count插件,它也能显示总匹配数,并且在查找时跟踪当前序号——不过我个人更推荐Python Script的方法,因为可以完全按照你的需求自定义行为。
备注:内容来源于stack exchange,提问作者rd51
相关产品推荐
相关产品推荐

