Fungsi mirip grep untuk Notepad ++?

52

Saya ingin memiliki beberapa fungsi mirip grep di Notepad ++.

Di dalamnya versi paling sederhana, saya ingin dapat menyalin semua baris dari buffer saat ini yang mengandung kata fooke buffer baru. Saya dapat menggunakan plugin TextFX untuk menyembunyikan semua baris tanpa foo, tapi itu tidak melakukan semua yang saya inginkan (hilang pada Alt- Tab, saya tidak dapat menyalin hanya baris yang cocok, dll.).

Frank Meulenaar
sumber

Jawaban:

79

Ctrl+ F-> pergi ke tab Tandai -> beralih baris Bookmark -> Klik Tandai Semua .

Pilih menu Cari -> Bookmark -> Salin Bookmarked Garis .

kev
sumber
5
Terima kasih banyak. Anda dapat 'memotong garis yang ditandai' untuk pria miskin grep -vjuga.
ARRG
2
Dalam versi yang lebih baru, misalnya 5.4.5, tidak ada tab "Tandai". Sebagai gantinya, ada kotak centang, "Tandai Baris", di tab "Temukan". Dan "Salin Bookmarded Lines" langsung di menu "Cari".
Peter Mortensen
@ARRG Tidak dapat menemukan garis yang di-bookmark atau Salin garis yang di-bookmark dalam versi saat ini, di mana itu?
Nicolas Thery
Bekerja seperti Mantra :-)
Sundararaj Govindasamy
12

Saya hanya melihat pertanyaan yang sama. Saya tidak yakin apakah Anda sadar; dalam dialog Temukan, Anda dapat Temukan Semua dalam Dokumen Saat Ini yang akan memunculkan jendela di bagian bawah yang menunjukkan garis yang cocok. Kemudian Anda dapat menyalinnya ke dokumen baru.

Sayangnya, ini menyertakan beberapa informasi asing dalam hasil (nomor baris, dll.), Tetapi Anda dapat memfilternya menggunakan mode kolom.

Nick S
sumber
1
Nomor baris yang ditambahkan bahkan mungkin menjadi fitur :)
Frank Meulenaar
2
Anda mungkin menemukan plugin ini bermanfaat code.google.com/p/searchplus
Amarghosh
@Amarghosh Plugin yang bagus, tetapi tidak memiliki sedikit ergonomi (mengapa tombol dan tidak ada pintasan keyboard?). Tangkapan yang bagus :)
Benj
@Benji Alt-Q akan meluncurkan plugin. Meskipun tidak ada tombol pintasan di dalam jendela plugin, navigasi tab dasar telah diaktifkan. Jika ada cukup minat pada plugin, saya akan mencoba untuk menambahkan lebih banyak fitur karena saya punya waktu. Terima kasih atas umpan baliknya :)
Amarghosh
2

Solusi hebat lainnya adalah dengan menggunakan plugin NppExec untuk menambahkan perintah grep untuk Notepad ++.

Keuntungan utama dari solusi "Bookmarks" adalah berjalan lebih cepat terutama untuk file besar dan Anda tidak perlu memodifikasi file asli Anda. Perhatikan bahwa Anda harus membuat skrip kecil satu kali untuk membuat fitur ini tersedia di Notepad ++ Anda.

Contoh solusi saya adalah untuk Windows dan saya menggunakan findstr , yang merupakan alat perintah seperti grep yang tersedia di semua mesin Windows. Tetapi Anda tentu saja dapat juga menggunakan klon grep lain pilihan Anda.

Langkah 1: Instal plugin NppExec

Pergi ke Plugins / Plugin Manager / Show Plugin Manager, gulir ke bawah ke NppExec, pilih plugin ini dan klik Install. Anda mungkin harus me-restart Notepad ++ Anda untuk menyelesaikan proses instalasi.

Langkah 2: Buat skrip kecil untuk NppExec

Pergi ke Plugins / NppExec / Execute, masukkan skrip berikut dan simpan sebagai "grep":

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

(harap periksa ulang apakah jalur untuk OUTFILE berfungsi untuk lingkungan Anda)

Langkah 3: Tambahkan item menu untuk skrip Anda (Opsional)

Pergi ke Plugins / NppExec / Advanced Options, pilih skrip "grep" di bawah Associated scriptdan klik OK untuk menyimpan. Mulai ulang Notepad seperti yang diminta oleh NppExec untuk melengkapi penambahan item menu baru.

Langkah 4: Tambahkan pintasan untuk skrip Anda (Opsional)

Pergi ke Settings / Shortcut Mapper / Plugin commands, gulir ke bawah untuk menemukan perintah skrip Anda "grep" dan tentukan pintasan untuk itu. misalnyaALT-G

Erik Kalkoken
sumber
Pertama-tama, terima kasih atas jawaban yang bagus yang telah menunggu bertahun-tahun untuk dihapuskan ...: -) Saya pikir saya mengalami beberapa masalah dengan skrip, itu tidak berhasil. Kemudian saya perhatikan kita seharusnya mengadaptasi jalur, dll., Tetapi Anda tidak menyebutkannya secara eksplisit sehingga saya hanya menyalin-menempel secara membabi buta! Saya bekerja sangat cepat hingga memperlambat saya: -)
pgr
terima kasih banyak atas umpan baliknya. Saya akan menambahkan itu ke jawaban saya.
Erik Kalkoken
Catatan kecil lainnya: $(FULL_CURRENT_PATH)tidak akan mengembalikan jalur apa pun jika file belum disimpan. Anda mungkin mengharapkannya berada di suatu tempat (direktori temp?), Tetapi tidak juga. Situasi file yang belum disimpan ini mungkin cukup umum, Anda tinggal menempelkan sesuatu dari log untuk menerima ... kami mungkin menyempurnakan skrip ini untuk menyimpan file jika belum disimpan - tetapi untuk kesederhanaan saya hanya akan mengingatkan diri saya untuk menyimpan secara manual sebelum menangkap. Terima kasih.
pgr
Apakah ini berfungsi jika string pencarian berisi spasi? atau karakter khusus lainnya?
G-Man Mengatakan 'Reinstate Monica'
Ya itu berhasil
Erik Kalkoken
-1

Langkah 5: Buat skrip untuk menyimpan dan mengambil dokumen dengan cepat

Pergi ke Plugins / NppExec / Execute, masukkan skrip berikut dan simpan sebagai "grep":

SET AUTOSAVEFILE lokal = "% tmp% \ NpPPautosave.tmp"
SET OUTFILE lokal = "% tmp% \ NpPPautosaveToGrep.temp"
NPP_SAVEAS "% tmp% \ NpPPfile.tmp"
INPUTBOX "Input string untuk GREP"
cmd / c findstr $ (INPUT $ ) $ (AUTOSAVEFILE)> $ (OUTFILE)
NPP_OPEN $ (OUTFILE)

Kasumiru
sumber
Di mana langkah 1, 2, 3 dan 4?
Pierre.Vriens
(1) Kami lebih suka, sejauh mungkin, bahwa jawaban berdiri sendiri. Sepertinya ada (setidaknya) satu langkah yang harus dilakukan sebelum seseorang dapat menggunakan jawaban Anda (petunjuk: Langkah 1); harap sertakan dalam jawaban Anda. (2) Tampaknya jawaban Anda sangat kuat berada di pundak jawaban Erik Kalkoken . Jika Anda akan melakukan itu, Anda harus mengatakannya secara eksplisit. … (Lanjutan)
G-Man Mengatakan 'Reinstate Monica'
(Lanjutan) ... (3) Apakah jawaban Anda lebih baik daripada jawaban Erik? Jika demikian, tolong jelaskan bagaimana dan mengapa. (Sebenarnya, alangkah baiknya jika Anda akan menjelaskan apa jawabannya, dan bagaimana menggunakannya.) Jika tidak, mengapa Anda mempostingnya? (4) Apakah Anda percaya bahwa lebih baik menggunakan nama file keluaran yang dikodekan daripada yang didasarkan pada nama file saat ini? (5) Apakah ada keuntungan menjalankan findstrpada autosavefile daripada file saat ini? (6) Mengapa jawaban Anda menggunakan keduanya C:\temp dan C:\tmp? ... ... Tolong jangan menanggapi dalam komentar; edit jawaban Anda untuk membuatnya lebih jelas dan lebih lengkap.
G-Man Mengatakan 'Reinstate Monica'
(1) "satu langkah yang harus dilakukan sebelum seseorang" - semua Erik spteps dari 1 hingga 4. (2) Anda harus memiliki 50 reputasi untuk berkomentar. (untuk mengomentari pos Erik) (3) Ya, jawaban saya lebih kecil, karena jawaban Erik tidak berfungsi sebelum dokumen disimpan ke harddisk. Saya tidak ingin menyimpan file sementara hanya untuk mendapatkannya. "apa jawabannya, dan bagaimana menggunakannya" - kode saya hanya menyimpan teks yang dibuka di notepad ++ ke file sementara di hdd. Ini adalah baris "NPP_SAVEAS" hanya secara otomatis menyimpan teks pada hdd. (4) Tidak! tepatnya tidak. (5) Ya! Inti Erik tidak berfungsi, sebelum disimpan ke harddisk, lihat jawaban (3) saya.
Kasumiru
(6) Sory, saya sedang terburu-buru dan salah, windows cygwin saya punya tmp dan temps. "Tolong jangan menanggapi dalam komentar" - sory, tapi saya sudah menulis jawaban saya sebelum membaca komentar ini
Kasumiru