Funkcjonalność podobna do grep dla Notepad ++?

52

Chciałbym mieć funkcjonalność podobną do grep w Notepad ++.

W najprostszej wersji chciałbym móc skopiować wszystkie wiersze z bieżącego bufora zawierającego słowo foodo nowego bufora. Mogę użyć wtyczki TextFX, aby ukryć wszystkie linie bez foo, ale to nie robi wszystkiego, co chcę (jest stracone na Alt- TabNie mogę skopiować tylko pasujących linii itp.).

Frank Meulenaar
źródło

Odpowiedzi:

79

Ctrl+ F-> przejdź do zakładki Oznacz -> przełącz linię zakładek -> Kliknij Oznacz wszystko .

Wybierz menu Szukaj -> Zakładka -> Kopiuj zaznaczone linie .

kev
źródło
5
Fajnie dzięki. Możesz „wyciąć zakładki” dla biednego mężczyzny grep -v.
ARRG
2
W późniejszych wersjach, np. 5.4.5, nie ma zakładki „Zaznacz”. Zamiast tego na karcie „Znajdź” znajduje się pole wyboru „Zaznacz linię”. A „Kopiuj linie bukmacherskie” znajduje się bezpośrednio w menu „Szukaj”.
Peter Mortensen
@ARRG Nie możesz znaleźć wyciętych linii zakładek lub Skopiuj linie zakładek w bieżącej wersji, gdzie to jest?
Nicolas Thery
Działa jak Urok :-)
Sundararaj Govindasamy,
12

Właśnie zastanawiałem się nad tym samym pytaniem. Nie jestem pewien, czy jesteś tego świadomy; w oknie dialogowym Znajdź możesz znaleźć wszystko w bieżącym dokumencie, który wyświetli okno u dołu z pasującymi liniami. Następnie możesz skopiować to do nowego dokumentu.

Niestety, zawiera pewne dodatkowe informacje w wynikach (numer wiersza itp.), Ale możesz je odfiltrować za pomocą trybu kolumnowego.

Nick S.
źródło
1
Dodane numery wierszy mogą nawet być cechą :)
Frank Meulenaar
2
Ta wtyczka może okazać się przydatna code.google.com/p/searchplus
Amarghosh
@Amarghosh Ładna wtyczka, ale brakuje jej trochę ergonomii (dlaczego przyciski i brak skrótów klawiaturowych?). Niezły chwyt :)
Benj,
@Benji Alt-Q uruchomi wtyczkę. Mimo że w oknie wtyczki nie ma klawiszy skrótów, włączona jest podstawowa nawigacja po kartach. Jeśli wtyczka jest wystarczająco zainteresowana, spróbuję dodać więcej funkcji, gdy będę miał trochę czasu. Dzięki za opinie :)
Amarghosh
2

Innym doskonałym rozwiązaniem jest użycie wtyczki NppExec w celu dodania polecenia grep do Notepad ++.

Główną zaletą w stosunku do rozwiązania „Zakładki” jest to, że działa on znacznie szybciej, zwłaszcza w przypadku dużych plików i nie trzeba modyfikować oryginalnego pliku. Pamiętaj, że musisz raz utworzyć mały skrypt, aby udostępnić tę funkcję w Notepad ++.

Mój przykład rozwiązania dotyczy systemu Windows i używam findstr , który jest narzędziem polecenia podobnym do grep, dostępnym na wszystkich komputerach z systemem Windows. Ale możesz oczywiście użyć dowolnego innego klona grep do wyboru.

Krok 1: Zainstaluj wtyczkę NppExec

Idź do Plugins / Plugin Manager / Show Plugin Manager, przewiń w dół do NppExec, wybierz tę wtyczkę i kliknij Zainstaluj. Może być konieczne ponowne uruchomienie Notepad ++, aby zakończyć proces instalacji.

Krok 2: Utwórz mały skrypt dla NppExec

Idź do Plugins / NppExec / Execute, wprowadź następujący skrypt i zapisz go jako „grep”:

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

(proszę dokładnie sprawdzić, czy ścieżka dla pliku OUTFILE działa w danym środowisku)

Krok 3: Dodaj pozycję menu dla skryptu (opcjonalnie)

Przejdź do Plugins / NppExec / Advanced Options, wybierz skrypt „grep” pod Associated scripti kliknij OK, aby zapisać. Uruchom ponownie Notatnik zgodnie z żądaniem NppExec, aby zakończyć dodawanie nowego elementu menu.

Krok 4: Dodaj skrót do skryptu (opcjonalnie)

Idź do Settings / Shortcut Mapper / Plugin commands, przewiń w dół, aby znaleźć polecenie skryptu „grep” i zdefiniuj dla niego skrót. na przykładALT-G

Erik Kalkoken
źródło
Przede wszystkim dzięki za świetną odpowiedź, która czekała wiele lat na głosowanie ...: -) Myślałem, że mam pewne problemy ze skryptem, to nie zadziałało. Potem zauważyłem, że powinniśmy dostosować ścieżki itp., Ale nie wspomniałeś o tym wyraźnie, więc po prostu wkleiłem na ślepo! Pracuję tak szybko, że spowalnia mnie: -)
pgr
wielkie dzięki za opinie. Dodam to do mojej odpowiedzi.
Erik Kalkoken
Kolejna mała uwaga: $(FULL_CURRENT_PATH)nie zwróci żadnej ścieżki, jeśli plik nie został jeszcze zapisany. Można się spodziewać, że gdzieś się znajduje (katalog tymczasowy?), Ale tak naprawdę nie. Ta niezapisana sytuacja pliku może być dość powszechna, wystarczy wkleić coś z dziennika, aby go grep ... możemy udoskonalić ten skrypt, aby zapisać plik, jeśli jeszcze nie został zapisany - ale dla uproszczenia przypomnę sobie, aby zapisać ręcznie przed greppingiem. Dzięki.
pgr
Czy to działa, jeśli szukany ciąg zawiera spacje? lub inne znaki specjalne?
G-Man mówi „Przywróć Monikę”
Tak, to działa
Erik Kalkoken
-1

Krok 5: Utwórz skrypt do szybkiego zapisywania i grepowania dokumentu

Przejdź do Plugins / NppExec / Execute, wprowadź następujący skrypt i zapisz go jako „grep”:

USTAW lokalny AUTOSAVEFILE = "% tmp% \ NpPPautosave.tmp"
USTAW lokalny OUTFILE = "% tmp% \ NpPPautosaveToGrep.temp"
NPP_SAVEAS "% tmp% \ NpPPfile.tmp"
INPUTBOX "Ciąg wejściowy dla GREP"
cmd / c znaleźć ) $ (AUTOSAVEFILE)> $ (OUTFILE)
NPP_OPEN $ (OUTFILE)

Kasumiru
źródło
Gdzie jest krok 1, 2, 3 i 4?
Pierre.Vriens
(1) Wolimy, w możliwie największym stopniu, samodzielne odpowiedzi. Wygląda na to, że jest (przynajmniej) jeden krok, który należy zrobić, zanim ktoś będzie mógł użyć Twojej odpowiedzi (wskazówka: Krok 1); dołącz to do swojej odpowiedzi. (2) Wydaje się bardzo mocno, że twoja odpowiedź stoi na barkach odpowiedzi Erika Kalkokena . Jeśli masz zamiar to zrobić, powinieneś to wyraźnie powiedzieć. … (Ciąg dalszy)
G-Man mówi „Reinstate Monica”
(Ciąg dalszy)… (3) Czy twoja odpowiedź jest lepsza niż odpowiedź Erika? Jeśli tak, proszę wyjaśnić, jak i dlaczego. (W rzeczywistości byłoby miło, gdybyś wyjaśnił, na czym polega odpowiedź i jak z niej korzystać.) Jeśli nie, to dlaczego opublikowałeś ją? (4) Czy uważasz, że lepsze jest użycie zakodowanej wyjściowej nazwy pliku niż takiej, która jest oparta na bieżącej nazwie pliku? (5) Czy jest jakaś zaleta uruchamiania findstrna pliku autozapisu zamiast na bieżącym pliku? (6) Dlaczego twoja odpowiedź używa zarówno C:\temp i C:\tmp? …… Proszę nie odpowiadać w komentarzach; edytuj swoją odpowiedź, aby była jaśniejsza i bardziej kompletna.
G-Man mówi „Reinstate Monica”
(1) „jeden krok, który musi być zrobiony przed kimś” - wszyscy Erik mówią od 1 do 4. (2) Aby móc komentować, musisz mieć 50 punktów reputacji. (aby skomentować post Erika) (3) Tak, moja odpowiedź jest nieco lepsza, ponieważ odpowiedź Erika nie działa, zanim dokument nie zostanie zapisany na dysku twardym. Nie chcę zapisywać pliku tymczasowego tylko dla grep. „co robi odpowiedź i jak z niej korzystać” - mój kod zapisuje właśnie otwarty tekst w notatniku ++ do pliku tymczasowego na dysku twardym. Jest to wiersz „NPP_SAVEAS”, po prostu automatycznie zapisuj tekst na dysku twardym. (4) Nie! dokładnie nie. (5) Tak! Rdzeń Erika nie działa, przed zapisaniem na dysk twardy spójrz na moją (3) odpowiedź.
Kasumiru
(6) Sory, spieszyłem się i pomyliłem, moje okna cygwin mają katalog tmp i temp. „Proszę nie odpowiadać w komentarzach” - sory, ale napisałem swoją odpowiedź przed przeczytaniem tego komentarza
Kasumiru