Grep-подобная функциональность для Notepad ++?

52

Я хотел бы иметь некоторые grep-подобные функции в Notepad ++.

В этой простейшей версии я хотел бы иметь возможность копировать все строки из текущего буфера, содержащие слово, fooв новый буфер. Я могу использовать плагин TextFX, чтобы скрыть все строки без foo, но это не делает все, что я хочу (он потерян Alt- Tabя не могу скопировать только совпадающие строки и т. Д.).

Фрэнк Мейленаар
источник

Ответы:

79

Ctrl+ F-> перейти на вкладку « Пометить » -> переключить строку «Закладка» -> нажать « Пометить все» .

Выберите меню Поиск -> Закладка -> Копировать отмеченные строки .

кэв
источник
5
Здорово спасибо Вы можете «вырезать линии закладок» и для бедняков grep -v.
ARRG
2
В более поздних версиях, например, 5.4.5, вкладка «Пометить» отсутствует. Вместо этого на вкладке «Найти» есть флажок «Пометить линию». А «Копировать закладки» прямо в меню «Поиск».
Питер Мортенсен
@ARRG Не можете найти вырезанные строки с закладками или Копировать строки с закладками в текущей версии, где это?
Николас Тери
Работать как очарование :-)
Сундарадж Говиндасами
12

Я просто смотрел на этот же вопрос. Я не уверен, если вы знаете; в диалоговом окне «Найти» вы можете найти все в текущем документе, в результате чего внизу появится всплывающее окно с соответствующими строками. Затем вы можете скопировать это в новый документ.

К сожалению, в результаты включена некоторая посторонняя информация (номер строки и т. Д.), Но вы можете отфильтровать ее, используя режим столбца.

Ник С
источник
1
Добавленные номера строк могут даже быть особенностью :)
Фрэнк Мейленаар
2
Вы можете найти этот плагин полезным code.google.com/p/searchplus
Amarghosh
@ Amarghosh Хороший плагин, но не хватает эргономики (почему кнопки и нет сочетаний клавиш?). Хороший улов :)
Benj
@Benji Alt-Q запустит плагин. Даже если в окне плагина нет сочетаний клавиш, базовая навигация по вкладкам включена. Если интерес к плагину будет достаточно, я постараюсь добавить больше возможностей, когда у меня будет время. Спасибо за отзыв :)
Amarghosh
2

Другим отличным решением является использование плагина NppExec для добавления команды grep для Notepad ++.

Основным преимуществом решения «Закладки» является то, что оно работает намного быстрее, особенно для больших файлов, и вам не нужно изменять исходный файл. Обратите внимание, что вам нужно создать небольшой скрипт один раз, чтобы сделать эту функцию доступной в Notepad ++.

Мой пример решения для Windows, и я использую findstr , который является grep-подобным командным инструментом, доступным на всех машинах Windows. Но вы также можете использовать любой другой клон grep по вашему выбору.

Шаг 1: Установите плагин NppExec

Перейдите Plugins / Plugin Manager / Show Plugin Manager, прокрутите вниз до NppExec, выберите этот плагин и нажмите «Установить». Возможно, вам придется перезапустить 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
Большое спасибо за отзыв. Я добавлю это к моему ответу.
Эрик Калкокен,
Еще одно небольшое замечание: $(FULL_CURRENT_PATH)не будет возвращать пути, если файл еще не сохранен. Вы можете ожидать, что он будет находиться где-то (временный каталог?), Но не совсем. Эта ситуация с несохраненным файлом может быть довольно распространенной, просто вставьте что-нибудь из журнала, чтобы выполнить поиск grep ... мы могли бы усовершенствовать этот сценарий, чтобы сохранить файл, если он еще не сохранен, - но для простоты я просто напомню себе, что нужно сохранить вручную перед grepping. Благодарю.
17
Работает ли это, если строка поиска содержит пробелы? или другие специальные символы?
G-Man говорит: «Восстановите Монику»
Да, это работает
Эрик Калкокен
-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 findst $ (найти ) $ (AUTOSAVEFILE)> $ (OUTFILE)
NPP_OPEN $ (OUTFILE)

Kasumiru
источник
Где находятся этапы 1, 2, 3 и 4?
Pierre.Vriens
(1) Мы предпочитаем, в максимально возможной степени, чтобы ответы стояли отдельно. Похоже, что есть (по крайней мере) один шаг, который необходимо сделать, прежде чем кто-то сможет использовать ваш ответ (подсказка: Шаг 1); пожалуйста, включите это в свой ответ. (2) Похоже, что ваш ответ стоит на плечах ответа Эрика Калкокена . Если вы собираетесь это сделать, вы должны прямо сказать об этом. … (Продолжение)
G-Man говорит «Восстановить Монику»
(Продолжение)… (3) Ваш ответ лучше, чем ответ Эрика? Если да, пожалуйста, объясните, как и почему. (На самом деле, было бы неплохо, если бы вы объяснили, что делает ответ и как его использовать.) Если нет, почему вы опубликовали его? (4) Считаете ли вы, что лучше использовать жестко заданное имя выходного файла, а не то, которое основано на текущем имени файла? (5) Есть ли какое-то преимущество в работе findstrс автосохранением, а не с текущим файлом? (6) Почему в вашем ответе используется и то C:\temp и другоеC:\tmp ? …… Пожалуйста, не отвечайте в комментариях; отредактируйте свой ответ, чтобы сделать его более понятным и полным.
G-Man говорит: «Восстановите Монику»
(1) «Один шаг, который должен быть сделан перед кем-то» - все Эрик переходит от 1 до 4. (2) У вас должно быть 50 репутации, чтобы комментировать. (чтобы прокомментировать сообщение Эрика) (3) Да, мой ответ немного лучше, потому что ответ Эрика не работает до сохранения документа на жесткий диск. Я хочу сохранить временный файл только для grep. «что делает ответ и как его использовать» - мой код просто сохраняет открытый текст в notepad ++ во временный файл в hdd. Это строка «NPP_SAVEAS», просто автоматически сохраняющая текст на жестком диске. (4) Нет! точно нет. (5) Да! Ядро Erik не работает, перед сохранением на жесткий диск, посмотрите мой (3) ответ.
Касумиру
(6) Извините, я спешил и ошибался, у моего windows cygwin есть tmp и temp dirs. «Пожалуйста, не отвечайте в комментариях» - извините, но я написал свой ответ, прежде чем читать этот комментарий
Kasumiru