Notepad ++的类似Grep的功能?


52

我想在Notepad ++中使用类似grep的功能。

在最简单的版本中,我希望能够将包含该单词的当前缓冲区中的所有行复制foo到新缓冲区。我可以使用TextFX插件来隐藏所有的行foo,但是这并没有完成我想要的所有(它丢失了Alt- Tab,我不能只复制匹配的行等)。

Answers:


78

Ctrl+ F- >转到标记选项卡 - >切换书签行 - >单击全部标记

选择菜单搜索 - > 书签 - > 复制书签行


5
很好,谢谢。你也可以为一个穷人'剪下书签线' grep -v
ARRG 2013年

2
在更高版本中,例如5.4.5,没有任何“标记”选项卡。相反,“查找”选项卡中有一个“标记线”复选框。并且“复制书籍线”直接位于“搜索”菜单中。
彼得·莫特森

@ARRG在当前版本中找不到剪切书签线或复制书签线,它在哪里?
Nicolas Thery 2016年

工作像魅力:-)
Sundararaj Govindasamy

12

我只是在研究同样的问题。我不确定你是否知道; 在“查找”对话框中,您可以在“当前文档”中查找“全部”,这将在底部弹出一个窗口,显示匹配的行。然后,您可以将其复制到新文档中。

不幸的是,它在结果中包含了一些无关的信息(行号等),但您可以使用列模式对其进行过滤。


1
添加的行号甚至可能是一个功能:)
Frank Meulenaar

2
你可能会发现这个插件很有用code.google.com/p/searchplus
Amarghosh

@Amarghosh不错的插件,但缺乏一点人体工程学(为什么按钮和没有键盘快捷键?)。很好抓:)
Benj 2013年

@Benji Alt-Q将启动该插件。即使插件窗口中没有快捷键,也已启用基本选项卡导航。如果对插件有足够的兴趣,我会尝试添加更多功能,因为我有时间。感谢您的反馈:)
Amarghosh 2013年

2

另一个很好的解决方案是使用NppExec插件为Notepad ++添加grep命令。

“书签”解决方案的主要优点是运行速度更快,特别是对于大型文件而言,您无需修改​​原始文件。请注意,您必须创建一个小脚本,才能在Notepad ++中使用此功能。

我的解决方案示例适用于Windows,我使用findstr,这是一种类似grep的命令工具,可在所有Windows机器上使用。但是你当然也可以使用你选择的任何其他grep克隆

第1步:安装NppExec插件

转到Plugins / Plugin Manager / Show Plugin Manager,向下滚动到NppExec,选择此插件并单击Install。您可能必须重新启动Notepad ++才能完成安装过程。

第2步:为NppExec创建一个小脚本

转到Plugins / NppExec / Execute,输入以下脚本并将其另存为“grep”:

SET local OUTFILE = "c:\temp\$(FILE_NAME).temp"
INPUTBOX "Input filter string"
cmd /c findstr $(INPUT) "$(FULL_CURRENT_PATH)" >$(OUTFILE)
NPP_OPEN $(OUTFILE)

(请仔细检查OUTFILE的路径是否适用于您的环境)

第3步:为脚本添加菜单项(可选)

转到Plugins / NppExec / Advanced Options,选择脚本“grep”,Associated script然后单击“确定”保存。按照NppExec的要求重新启动记事本,以完成添加新菜单项。

第4步:为脚本添加快捷方式(可选)

转到Settings / Shortcut Mapper / Plugin commands,向下滚动以找到您的脚本命令“grep”并为其定义快捷方式。例如ALT-G


首先,感谢一个很好的答案,等待好几年才被投票......: - )我认为我的脚本有问题,但是没有用。然后我注意到我们应该调整路径等,但你没有明确提到它,所以我只是盲目地复制粘贴!我的工作如此之快,让我慢下来: - )
pgr 2017年

非常感谢您的反馈。我会在我的回答中加上这个。
Erik Kalkoken 2017年

另一个小注意事项:$(FULL_CURRENT_PATH)如果文件尚未保存,则不会返回任何路径。你可能希望它驻留在某个地方(临时目录?),但不是真的。这个未保存的文件情况可能很常见,你只需要从日志中粘贴一些内容就可以了...我们可以完善这个脚本来保存文件,如果它还没有保存 - 但为了简单起见,我只想提醒自己保存在grepping之前手动。谢谢。
pgr

如果搜索字符串包含空格,这是否有效?或其他特殊字符?
G-Man

是的,做的工作
埃里克Kalkoken

-1

第5步:创建快速保存和grep文档的脚本

转到Plugins / NppExec / Execute,输入以下脚本并将其另存为“grep”:

SET local AUTOSAVEFILE =“%tmp%\ NpPPautosave.tmp”
SET local OUTFILE =“%tmp%\ NpPPautosaveToGrep.temp”
NPP_SAVEAS“%tmp%\ NpPPfile.tmp”
INPUTBOX“GREP的输入字符串”
cmd / c findstr $(INPUT )$(AUTOSAVEFILE)> $(OUTFILE)
NPP_OPEN $(OUTFILE)


步骤1,2,3和4在哪里?
Pierre.Vriens

(1)我们最好尽可能地回答这些问题。看起来在某人可以使用你的答案之前必须完成(至少)一步(提示:步骤1); 请在答案中加入。(2)你的回答非常强烈地站在了Erik Kalkoken的回答的肩膀上。如果你要这样做,你应该明确地这样说。...(续)
G-Man

(续)......(3)你的答案比Erik好吗?如果是这样,请解释如何以及为什么。(事实上​​,如果您能解释答案的作用以及如何使用它会很好。)如果没有,为什么要发布它?(4)您是否认为使用硬编码的输出文件名而不是基于当前文件名的文件名更优越?(5)运行findstrautosavefile而不是当前文件是否有一些优势?(6)为什么你的答案中使用两个 C:\tempC:\tmp?......请不要回复评论; 编辑你的答案,使其更清晰,更完整。
G-Man

(1)“在某人之前必须完成的一步” - 所有Erik都从1到4发挥作用。(2)你必须有50个声誉才能发表评论。(评论Erik的帖子)(3)是的,我的回答更好,因为在将文档保存到硬盘之前,Erik的回答不起作用。我不想保存临时文件只是为了grep它。“答案是什么,以及如何使用它” - 我的代码只是将记事本++中打开的文本保存到hdd中的临时文件中。这是“NPP_SAVEAS”行只是自动保存hdd上的文本。(4)不!确切地说没有。(5)是的!Erik核心不起作用,在保存到硬盘之前,请查看我的(3)答案。
Kasumiru

(6)Sory,我匆忙和错误,我的windows cygwin有tmp和temp dirs。“请不要回复评论” - 索里,但我在阅读此评论之前写了我的答案
Kasumiru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.