Seberapa jauh mimpi dari pencarian "file sempurna"

Apakah Anda sering menjalankan pencarian pada file teks? Saya - setiap hari selama lebih dari 25 tahun.


Tugas saya sangat berbeda dalam kompleksitas dan ruang lingkup.


Pertama, sebagai seorang programmer, tentu saja, saya perlu mencari dalam kode. Tugas-tugas ini sederhana (set folder dan file kecil) dan cepat (hasilnya muncul segera).


Kedua, sebagai operator, saya harus mencari ratusan (kadang-kadang ribuan) folder di antara ribuan (kadang-kadang ratusan ribu) file. Ini adalah tugas yang sulit baik dari segi volume hasil dan dalam hal waktu mereka. Biasanya, hasil pencarian tersebut masih membutuhkan pemrosesan manual atau perangkat lunak lebih lanjut.


Semua pekerjaan dilakukan pada Windows.


Saya akan memberi tahu Anda di mana keinginan membuat saya memiliki alat yang cocok untuk tugas-tugas tersebut.


Pada awalnya adalah TextPad


Selama lebih dari 10 tahun, TextPad telah menjadi alat utama saya yang mudah .
Kemudian (sebelum dan sedikit setelah tahun 2000) ia melakukan pekerjaan yang sangat baik.


Pencarian file tampak seperti ini ( TextPad , 2004)


TextPad_fif


Tayangan

(+) Ada beberapa pengaturan dalam dialog, sehingga tidak mengaburkan isi file.
(+) Tab dengan hasil pencarian memiliki perilaku khusus - Enter / DvKlik memungkinkan Anda untuk membuka fragmen yang ditemukan. Jika tidak, ini adalah teks biasa "di memori" editor.
(+) Ada pengaturan File counts only diperuntukkan untuk pencarian bukan fragmen sendiri, tetapi hanya jumlah mereka dalam file. Ini secara signifikan mempercepat pencarian awal .
(-) Ada beberapa pengaturan dan beberapa perintah dalam dialog. Kotak dialog adalah ukuran tetap.
(-) Bahasa seni ekspresi reguler, misalnya, alih-alih yang diterima sekarang perlu menulis [:word:] .
Secara umum, itu berkualitas tinggi, tetapi sederhana.




Gulungan dan perbandingan


Keterbatasan TextPad dan pembekuannya menyebabkan uji coba konstan editor lain.
Sekarang Anda tidak dapat mengingat semua yang sudah dicoba, tetapi di antaranya adalah:


  • MS Visual Studio . Monster berat.
  • Gerhana Juga monster.
  • IntelliJ IDEA . Menawan Dilayani dan berfungsi sebagai penyedia contoh bagaimana Anda dapat melakukannya dengan nyaman .


    Tayangan

    IDEA lama itu sudah hilang. Sebagai perbandingan, implementasi saat ini di PyCharm , 2017.1.3
    Pycharm_fif
    (+) Jumlah pengaturan dan mode yang tak terbayangkan.
    (+) Kemandirian dialog: hasil, kode sumber, dan statistik pencarian terlihat.
    (-) Tidak ada batasan pada kedalaman pencarian di folder - baik satu atau sekaligus.
    (-) Tidak (saya tidak tahu caranya) mencari di beberapa folder.
    (-) Tidak (saya tidak tahu caranya) menampilkan hasil dalam format teks.


    Secara umum, itu kuat, tetapi tidak universal.




  • Notepad ++ . Saya tidak ingat apa yang mencegahnya beralih.
  • SublimeText3 , 2013. Alat peretas - pekerjaan luar biasa, dana minimum, tetapi perlu banyak diingat .


    Tayangan

    Sublime_fif
    (+) Kontrol minimum.
    (-) Pengaturan berbeda "tempat mencari" semuanya dalam satu bidang. Penting untuk memperhitungkan interaksi mereka.
    (-) Hanya dialog terlampir .
    (+) Hasilnya langsung jatuh ke tab teks, dan hasilnya visual.
    (-) Memperbaiki hasil format: path lengkap dan nama file, kemudian baris ditemukan di dalamnya. Dari lokalisasi fragmen yang ditemukan hanya ada nomor baris.
    (+) Ada pengaturan "Konteks", sehingga garis yang ditemukan dengan tetangga masuk ke dalam Hasil.






Ada pria seperti itu


Berdasarkan prinsip "Tidak ada alat yang sempurna? Buat," mengubah arah upaya.
Dia mulai memperhatikan responsif para pengembang. Dan pada 2012, saya beruntung dengan SynWrite .


Satu-satunya pengembang, Alexei Torgashin, menerima sebagian besar ide, dibuat dengan cepat dan efisien. Waktu implementasi yang khas adalah satu atau dua hari. Di forum saya bertanya kepadanya tentang hasil akhir, kemudian sekitar satu lagi, lalu sekitar sepuluh, dan lebih ... Di suatu tempat di selusin ketiga saya menyadari bahwa kami memiliki pertemuan yang baik .


Dari kiriman saya, Alexey membawa pencarian file ke keadaan seperti itu ( SynWrite , 2016)


gambar


Tayangan

(+) Ada ekstraksi folder dari file Current folder .
(+) Anda dapat mengurutkan file berdasarkan tanggal modifikasi.
(+) Ada daftar set yang siap pakai untuk pencarian preset dan akses cepat ke sana ( F3 ).
(-) Dialognya sangat kelebihan dan membutuhkan banyak ruang.
(-) Hasilnya disajikan sebagai pohon kontrol di panel bawah. Untuk mendapatkannya dalam bentuk teks, Anda harus memanggil perintah dari menu lokal.




"Apa yang kamu butuhkan, lebih tua?"


Dengan SynWrite, pencarian menjadi jauh lebih nyaman. Seperti yang Anda tahu, nafsu makan datang dengan makan, jadi Daftar Keinginan saya berlipat ganda. Itu hanya sikap pengembang, ikan mas saya, terhadap mereka lebih dan lebih kritis - "Laut Hitam Dihitamkan . "


Itulah yang ingin saya dapatkan


  1. Pastikan untuk segera membutuhkan hasilnya dalam bentuk teks (untuk diproses lebih lanjut).
  2. Hasilnya harus mandiri! Sehingga mereka bisa diselamatkan, ditutup, dibuka - dan mereka tetap segar , yaitu siap untuk bekerja.
  3. Kami membutuhkan pencarian di file pada disk dan di file yang terbuka (dimodifikasi).
  4. Dialog dalam menyelesaikan masalah sederhana harus padat. Secara khusus, kontrol untuk "penggantian" dan pengaturan langka tidak boleh mengganggu pencarian normal.
  5. Diperlukan opsi untuk hasil bersama dengan baris yang berdekatan .
  6. Mode "deskripsi lengkap satu hasil dalam satu baris" diperlukan (untuk diproses lebih lanjut).
  7. Informasi bantuan tentang cara mengisi bidang tidak diperlukan di file eksternal atau halaman cloud, tetapi di sana, misalnya, di tooltips.



Lakukan sendiri!


Saya beruntung lagi. Alex membuat editor CudaText baru dan mengacaukan API Python .


Akhirnya, Anda bisa melakukan apa saja sesuka Anda dalam bentuk plugin dengan Python.


Versi pertama dirilis pada Mei 2016.


Set kontrol minimum

fif-dlg-min


Set kontrol maksimum

fif-full-dlg
Ini, tentu saja, bukan pancake pertama , tetapi keinginan "untuk menjejalkan semuanya pai dialog "terlihat jelas.


Inilah yang saya terapkan sekarang


cuda_fif


Menerapkan semua Daftar Keinginan dari daftar "Apa yang Anda inginkan."


(1) Hasilnya dapat dilihat baik di dalam dialog, atau segera output ke file (jika [x] Send ).


(2) Hasilnya menggambarkan diri sendiri. Dalam teks


fif_rpt_info


informasi yang cukup untuk mengetahui nama file lengkap dan lokasi fragmen yang ditemukan.
1:21:6 berarti: 1 baris, 21 kolom, panjang fragmen 6.


Plugin dapat mengekstrak dan menggunakan informasi ini.


(3) Ada pencarian pada dokumen yang belum disimpan. Untuk melakukan ini, baris khusus <Open Files> dimasukkan dalam bidang In folder (singkatan <Tabs> dan <t> ).


(4) Anda dapat menyembunyikan kontrol yang diperlukan untuk menentukan file yang dikecualikan, untuk melakukan penggantian, untuk menampilkan hasil dan kode sumber dalam dialog.


Kontrol tersembunyi

β€’ Pengaturan minimum fif_min
β€’ Pengaturan minimum dan penggantian fif_repl
β€’ Pengaturan minimum dan pengaturan pengecualian untuk file fif_excl


(7) Dalam tooltips, tanda tangan ke bidang yang diisi bebas memiliki penjelasan


Kiat

fif_incl
fif_tip_fold
Informasi lebih lanjut tersedia ketika Alt+H dipanggil Alt+H
fif_help_tips


Menerapkan banyak potongan yang berbeda.


  • Kedalaman keberangkatan dapat berupa +1 level nol ( Only ), penuh ( +All ), atau dari +1 level 1 ( +1 level ) hingga 5 ( +5 levels ).


  • Opsi pencarian yang jarang digunakan muncul di For search



fif_extra_fi


Opsi pencarian lanjutan
 β€’     ** / ** . β€’      . β€’         / . ![fif_first](https://user-images.githubusercontent.com/7419630/42456464-b0448f20-839d-11e8-8876-435fdfead1ad.png) β€’   ,        (  ). 

  • Jika hasilnya tidak akan muncul di dalam dialog ( [x] Send ), maka ada parameter tambahan untuk mereka

fif_extra_rp


Parameter Hasil Lanjutan
 β€’ `Report to` -    ,    ,        . β€’ `Append` -   . β€’ `Tree type` -      `<path><file><r:c:l><line>`,   `<><><><  >`  ,    (" "-6).      ![fif_help_tree](https://user-images.githubusercontent.com/7419630/42456892-a7d867c0-839e-11e8-87f2-2b9ce6b5c530.png) β€’ `Align (r:c:l)` -     `<r:c:l>` ,   `<  >`    . : ![fif_align](https://user-images.githubusercontent.com/7419630/42616450-036e3ae6-85b7-11e8-861a-cf27a3a07c7a.png) β€’ `Add context` -     (" "-5). 

  • Anda dapat mengingat parameter pencarian - buat preset . Lima preset pertama diterapkan oleh Ctrl+1 (.. 5 ), sisanya - dari menu atau dialog Presets


    preset dialog

    fif_pset




  • Anda dapat mengingat tempat / ukuran dialog / kontrol - lakukan Tata Letak. Lima Layout pertama diterapkan oleh Alt+1 (.. 5 ), sisanya - dari menu.


  • Hampir semua yang ada dalam dialog dapat dilakukan tanpa mouse . Untuk ini ada


    Tombol cepat

    fif_help_keys




  • Untuk tim ada


    Menu

    Tombol hamburger hanyalah "=" dengan garis bawah, sehingga tersedia oleh Alt+= .
    fif_menu_find




  • Proses pencarian dibagi menjadi tiga fase berturut-turut:
    β€’ koleksi file yang sesuai dihasilkan,
    β€’ fragmen diekstraksi dari file,
    β€’ laporan tentang hasil diisi.
    Informasi tentang setiap fase dan perubahannya ditampilkan di kontrol status.
    Esc memungkinkan Anda untuk hanya mengganggu fase saat ini dan pergi ke yang berikutnya dengan akumulasi data.


  • Selain parameter normal yang ditentukan pengguna, ada banyak opsi yang jarang diubah. Sekarang ada 19 dari mereka dan bagi mereka dialog yang terpisah


    Dialog opsi

    fif_opts
    Misalnya, di antara opsi ada seperti:
    β€’ Gunakan teks yang dipilih untuk mengisi bidang Find what saat membuka dialog.
    β€’ Mengganggu semua fase pencarian dengan satu ESC .
    β€’ Tutup dialog saat mencari dan mengeluarkan hasil ke file.
    β€’ Perkecil hasil sebelumnya saat menambahkan yang baru ke file yang sama.
    β€’ Simpan semua parameter pencarian di baris pertama hasil. Ini memungkinkan Anda untuk memuatnya nanti ke dalam dialog.
    β€’ Lewati file yang lebih besar dari ukuran yang ditentukan.
    β€’ Atur gaya untuk fragmen yang ditemukan. Warna / keberanian / kecenderungan teks yang tersedia, warna latar belakang, gaya bingkai di setiap sisi. Pada gambar di atas, gaya "bingkai dengan titik-titik di bawah fragmen" diatur.




  • Beberapa perintah plugin berfungsi sebelum dan sesudah dialog.

cuda_menu


Dari Menu Utama CudaText
 β€’ `Find in *` -        . β€’ `Navigate to *` -     ,    ,   . β€’ `Jump to *` -   /    ,     ,     . β€’ `Configure *` -        ,       ![fif_dclk](https://user-images.githubusercontent.com/7419630/42460070-aa1c5f26-83a5-11e8-9103-11f676dcf08a.png) 



CudaText dan Python


Beberapa kata tentang platform tempat plug-in saya tumbuh.


Alexey Torgashin membuat SynWrite di Delphi. Setengah dari kode editor ini dilisensikan dari pengembang lain, dan ini mencegah penerapan ide-ide baru. Dan Delphi dibayar. Karena itu, Alex beralih ke Free Pascal dan IDE Lazarus , mengimplementasikan bagian-bagian yang hilang dengan sendirinya dan menciptakan CudaText pada 2015, dan SynWrite membeku. Kesempatan untuk memulai dari awal digunakan dengan bijaksana - ia membuat beberapa perbaikan desain yang kuat.


  1. Pengaturan mulai ditumpangkan di lapisan: default , umum , lex , file saat ini . Mereka mulai disimpan di json , tetapi tidak ini . Mengubah pengaturan telah menjadi pengeditan teks biasa dalam format json .
  2. Kernel menyingkirkan sejumlah besar layanan non-kritis. Secara khusus, dari pencarian file, makro, memanggil utilitas eksternal, konfigurator menu, snippet, sortir, favorit, dll.
  3. Untuk membuat layanan seperti itu, kernel menyediakan API Python, yang mencakup perpustakaan GUI. Sekarang plugin telah mengimplementasikan semua layanan sebelumnya dan menambahkan banyak yang baru.
  4. Selain itu, inti itu sendiri telah menjadi multi-modul. Ada komponen marker, bookmark, atribut untuk kurung, dll.

Pengaruh Teks Sublim terlihat jelas di sini. Sejauh yang saya tahu, Alexey tidak menyembunyikan bahwa dia memperhitungkan ide-ide dari Sublime dan plugin-nya. Dia juga melirik Atom dan Kurung.


Itu ternyata berjalan dengan baik, tetapi mengingat produktivitas tinggi dan responsif Alexey, itu sangat baik. Untuk menjelaskan produktivitas dan daya tanggap seperti apa yang sedang kita bicarakan, saya akan memberikan beberapa fakta:


  • Alexei dibuat: lexers - 201, linter - 34, snippet-sets - 12, plug-in - 93.
  • Sejak Oktober 2015, ada lebih dari 1.200 keinginan (tidak ada keluhan) di GitHub , yang lebih dari 90% dipenuhi.

CudaText gratis, open source, ada rakitan untuk Win / Linux / Mac / BSD. Saya sendiri hanya menggunakan versi Win, tetapi saya melihat keinginan dan keluhan dari pengguna dengan Linux dan Mac. Pada Lazarus yang sama, omong-omong, Total Commander ditulis.


Sangat menarik untuk membandingkan API Python untuk Sublime dan CudaText . Mereka sangat berbeda.


β€’ Sublime memiliki gaya objek tipe DOM.


β€’ CudaText memiliki gaya prosedural seperti API OS, misalnya, WIN32.


Rupanya perbedaan ini berasal dari bahasa implementasi. Jika editor itu sendiri diimplementasikan dalam Python, maka gaya DOM dari API itu alami - Anda dapat menyimpan tautan ke objek. Dan jika editor dalam Pascal, maka itu hanya dapat disimpan oleh penangan.


β€’ Sublime API tidak memiliki GUI. Plugin ini rupanya dapat menggunakan Python GUI (Tk? WxPython? Qt?), Tetapi gayanya akan kontras dengan Sublime.


β€’ CudaText menyediakan plugin GUI dalam gaya keseluruhan aplikasi. Pertama, ada banyak gudang kendali dasar: checklistbox , listview , checklistview , treeview dan, tentu saja, tombol biasa, cek, editor tunggal dan multi-baris, kotak kombo, dll. Kedua, ada kemampuan untuk menanamkan komponen CudaText di GUI. Pada gambar di atas adalah kontrol status, menu lokal dan kontrol editor dengan hasil / sumber. Pelengkap seperti itu dengan GUI Python murni sama sekali tidak mungkin.


Dan hidup tanpa GUI

Karena saya telah membuat selusin plugin untuk CudaText, dan kebanyakan dari mereka berkomunikasi dengan pengguna melalui kotak dialog, sekarang sangat sulit bagi saya untuk membayangkan bagaimana plugin dapat dibuat tanpa kekayaan ini. Tentu saja, jika plugin hanya memiliki satu dialog yang memungkinkan Anda untuk menentukan pengaturan, maka mengedit json memberikan pengganti yang memadai. Tetapi pengeditan seperti itu dilakukan "sebelum peluncuran" dari plugin, itu tidak dapat membantu jika reaksi pengguna runtime langsung diperlukan.




Apakah ada batasannya?


Kira-kira sekali setiap dua hingga tiga bulan, dan ini berlangsung, saya ingat, sudah dua setengah tahun, menurut saya bahwa "ini adalah final" - dialog dijilat, hasilnya ditampilkan dalam semua cara, ada semua perintah yang berguna. Tetapi karena alat ini terus digunakan, karena hampir semua fitur-fiturnya digunakan, sementara tangan mengklik pencarian berikutnya atau mempelajari hasil selanjutnya, kepala mencari perbaikan baru. Dan menemukan!


Punya ide baru

Misalnya, selama penulisan posting ini, berikut ini lahir:
β€’ Anda dapat memilih teks dalam kontrol Hasil atau Sumber dan memberikan perintah untuk mencarinya.
β€’ Anda dapat mencegat acara "file terbuka" dengan hasil dan mengembalikan gaya fragmen yang ditemukan.


Selain itu, saya tertarik untuk memahami apakah pikiran kolektif dapat menyarankan gerakan baru dalam permainan ini. Karena itu, saya menyimpulkan dengan pertanyaan untuk sesama programmer:
Apa lagi yang bisa ditambahkan ke "pencarian file" di dalam editor teks?




Rincian teknis penerapan plugin untuk CudaText

β€’ Bahasa: Python 3.5
β€’ Perpustakaan GUI: CudaText API
β€’ Pengembang: Andrey Kvichansky
β€’ Ukuran kode:> 300 Kb
β€’ Jumlah ToDo untuk plugin:> 250
β€’ Bug / nomor harapan untuk CudaText API:> 150
β€’ Forum plugin: masalah GitHub


Bagaimana cara mencoba

β€’ Unduh rakitan CudaText untuk OS Anda, unzip atau instal.
β€’ Luncurkan CudaText dan panggil perintah menu Plugins/Addons Manager/Install...
β€’ Masukkan "find" sehingga filter hanya menyisakan FindInFile untuk menginstal (mungkin perlu menelepon kembali CudaText, itu tidak perlu pada Win).
β€’ Panggil perintah menu Plugins/Find in Files/Find in files...

Source: https://habr.com/ru/post/id417367/


All Articles