ripgrep 15.0
(github.com/BurntSushi)- ripgrep 15.0 एक प्रमुख रिलीज़ है, जिसमें bug fixes, performance improvements और नए features सहित कई अपडेट शामिल हैं
- gitignore नियम लागू करने से जुड़े कई bugs ठीक किए गए हैं, और बड़ी फ़ाइलों को संभालते समय memory optimization किया गया है
- Windows aarch64 platform support जोड़ा गया है, और powerpc64 support बंद कर दिया गया है
- कुछ नए features में --json और replacement flag का एक साथ support, globs में nested braces support आदि शामिल हैं
- कुल मिलाकर performance improvements, error fixes और usability enhancements से developers की productivity बढ़ती है
ripgrep 15.0 अवलोकन
ripgrep 15.0, ripgrep का नवीनतम major version release है, जिसमें मुख्य रूप से bug fixes, मामूली performance improvements और छोटे नए features शामिल हैं
ripgrep एक tool है जो current directory में line-by-line regular expression patterns को recursively search करता है
डिफ़ॉल्ट रूप से यह gitignore rules का पालन करता है, और hidden files/directories तथा binary files को अपने आप skip कर देता है
प्रमुख बदलाव
- कई gitignore matching से जुड़े bugs ठीक किए गए हैं
- parent directory के gitignore rules के लागू होने से जुड़ा अक्सर रिपोर्ट किया गया bug हल किया गया
- बहुत बड़े gitignore files को process करते समय होने वाला memory usage spike bug ठीक किया गया
rg -vf fileमें, जब file खाली हो, तो अब यह सब कुछ match करता है-r/--replaceflag अब--jsonके साथ सही तरह काम करता है- कुछ Jujutsu(jj) repositories को भी git repository की तरह पहचाना जाता है, इसलिए ripgrep अब jj के gitignore का पालन करता है
- Globs अब nested braces को support करते हैं
platform support
- Windows के लिए aarch64 release binaries अब उपलब्ध हैं
- powerpc64 के लिए release binaries अब उपलब्ध नहीं कराए जाते
- यह CI release workflow issues के कारण बंद किया गया है; testing और support चाहिए हो तो अनुरोध किया जा सकता है
- ripgrep binaries को LTO (full link-time optimization) के साथ compile किया गया है, जिससे थोड़ी performance improvement और size reduction मिलती है
performance improvements
- Windows पर,
-z/--search-zipoption इस्तेमाल न होने पर helper binary lookup disable करके performance बेहतर की गई है - Windows पर hyperlink output के दौरान path normalization skip करके speed बढ़ाई गई है
-A/--after-contextइस्तेमाल करते समय बड़े values की processing performance बेहतर की गई है
bug fixes
- parent directory gitignore लागू न होने समेत gitignore से जुड़े कई issues ठीक किए गए हैं
- खाली file पर
rg -vf filecommand को अब सब कुछ match करने के लिए बदला गया है .gitignoreआदि में UTF-8 BOM marker ignore करने की handling जोड़ी गई है- बड़े gitignore files को process करते समय memory usage optimization किया गया है
--statsइस्तेमाल करने पर searched bytes count output error ठीक किया गया है.पर समाप्त होने वाले glob की handling error ठीक की गई है-m/--max-count,-U/--multilineके combination में match count exceeded display की समस्या हल की गई है-r/--replaceflag इस्तेमाल करने पर अब line terminators preserve किए जाते हैं-q --files-without-matchcombination में exit code inversion bug ठीक किया गया है-c/--countऔर--files-with-matchesके documentation mismatch को ठीक किया गया है- बड़े regular expressions और input पर दुर्लभ रूप से होने वाली panic समस्या ठीक की गई है
- man page में option flag names के hyphen escape handling को ठीक किया गया है
- macOS aarch64 release में PCRE2 को statically compile किया गया है
- whitelisted hidden files search करते समय parent directory ignore filter bug ठीक किया गया है
--jsonflag इस्तेमाल करने पर गलत summary stats की समस्या ठीक की गई है- absolute paths और global gitignore search के दौरान gitignore handling error ठीक किया गया है
-U/--multilineऔर-r/--replaceके combination में होने वाली panic समस्या ठीक की गई है
feature improvements
- default file type sets को काफ़ी expand और improve किया गया है
-r/--replaceको--jsonके साथ compatible बनाया गया है- fish shell completion को ripgrep config file reflect करने के लिए बेहतर बनाया गया है
--colorमें इस्तेमाल होने वाले style attributes में italic जोड़ा गया है.jjdirectory को git repository की तरह treat किया जाता है- multithreading इस्तेमाल करते समय, CLI में दिए गए file order के अनुसार search schedule करने की सुविधा जोड़ी गई है
- Windows के लिए
aarch64release artifact जोड़ा गया है - highlight color type जोड़ा गया है, जिससे matched line में non-matching text को style किया जा सकता है
- globs और globset crate में nested alternates feature जोड़ा गया है
--hyperlink-formatautocomplete को bash, fish, zsh में बेहतर किया गया है
1 टिप्पणियां
Hacker News राय
ripgrep पिछले कई सालों में मेरा बहुत समय बचाने वाला टूल रहा है, हर नए सिस्टम पर सेटअप करते समय मैं इसे सबसे पहले इंस्टॉल करता हूँ, खासकर पुराने codebase को खंगालते समय यह बिल्कुल अनिवार्य है, बस एक छोटी सी शिकायत है कि
-F(literal की तरह ट्रीट करने वाला) option इस्तेमाल करते समय भी कुछ characters अब भी escape मांगने वाले special characters की तरह ट्रीट होते हैं, ठीक-ठीक कौन से characters थे यह याद नहीं, फिर भी ripgrep को लगातार अपडेट होते देखना हमेशा अच्छा लगता है-F/--fixed-stringspattern में regex features को 100% बंद कर देता है और सब कुछ literal की तरह ट्रीट करता है, अगर escaping की जरूरत पड़ रही है तो संभव है कि वह shell की वजह से होrgऐसा टूल है जो सच में जादू जैसा लगता है, जबकि असल में यह बेहतरीन engineering, लगातार सुधार, और उस शानदार hardware performance का नतीजा है जिसका हम सब रोज़ इस्तेमाल करते हैं, साथ ही यह ऐसा innovation भी है जिसने developers को code को ज़्यादा तेज़ी से explore और समझने का रास्ता दिया, बिनाlspजैसे standards अलग से बनाने की जरूरत केripgrep codebase "पेय तैयार करके अपनी सबसे आरामदायक कुर्सी पर बैठकर high-quality software को पढ़ने" का बेहतरीन उदाहरण है, code के अलग-अलग कोनों में क्लिक करते हुए बार-बार वाह निकलती है
fdकी तरहrgभी सच में इस्तेमाल करने में मज़ा देने वाला command-line tool है, मुझे ऐसे नए command-based tools बहुत पसंद हैंfdके लेखक Astral में काम करते हैं, तभी Astral का software इतना अच्छा हैrg <string>याfd <string>टाइप करना ही काफी होता हैव्यक्तिगत रूप से मैं एक "extension" flag जोड़ना चाहूँगा, जो
-gकी तरह काम करे लेकिन input arguments को extension की तरह ट्रीट करे (उदाहरण:rg -e c,h), क्योंकि ज़्यादातर बार glob pattern इस्तेमाल करने का उद्देश्य extension match करना ही होता है-t/--typeflag देखा है? आपके उदाहरण की तरह इसे-tcके रूप में इस्तेमाल किया जा सकता है, और अगर ripgrep में वह extension मौजूद नहीं है, तो आप अपना type भी define कर सकते हैंripgrep वह मुख्य वजह था जिससे मेरी रुचि rust में शुरू हुई, यह इतना polished लगा कि यह जानकर और जिज्ञासा हुई कि इसे rust में लिखा गया है, और कई साल बाद भी मैं आज रोज़
rgइस्तेमाल करता हूँnibblesवह मुख्य वजह था जिससे मेरी रुचिqbasicमें शुरू हुई, यह इतना polished था कि इसेqbasicमें लिखा गया जानकर दिलचस्पी हुई, और उसी वजह से मैंnibblesरोज़ इस्तेमाल करने लगाहाल में मैंने
--replaceoption खोजा और यह काफ़ी प्रभावशाली लगा,--typeके साथ इसका इस्तेमाल करते हुए अफसोस हुआ कि मुझे पहले इन शानदार features के बारे में पता नहीं था, अब से मैं release notes ज़्यादा ध्यान से पढ़ने और नई features पर नज़र रखने का सोच रहा हूँ,jjके साथ integration में सुधार भी अच्छा लगाशानदार टूल है और usability भी बहुत आसान है, शुरुआत में इसे Linux पर इस्तेमाल करना शुरू किया था, अब Windows पर भी इस्तेमाल करता हूँ, इस टूल की वजह से अब मैं wildcard की जगह सीधे regex से search करने लगा हूँ
grepसे बेहतर है, औरrg --filescommand भी उपयोगी हैइस हफ्ते मैंने एक bash function बनाई जो सिर्फ git द्वारा tracked files पर ripgrep चलाती है
जिन directories में बहुत सारी binary files या dot files होती हैं, वहाँ इससे search काफ़ी तेज़ हो सकती है, dot files को search करने के लिए
-uuoption चाहिए, लेकिन यह option binary files को भी search करने लगता है, और जब files की संख्या सैकड़ों में हो तोgit ls-filesखुद धीमा पड़ जाता हैgitignorerules का सम्मान करता है, इसलिए उसका व्यवहारgit ls-filesजैसा ही होता है, और जानकारी के लिए-uuका मतलब है कि ripgrepgitignoreऔर hidden files को अनदेखा करे, लेकिन तब भी यह binary files को skip करता है, binary files भी शामिल करने के लिए-uuuचाहिए, function की सबसे बड़ी समस्या यह है कि Linux kernel repo पर चलाने से argument list too long की error आती है, इसलिए मैंने इसेxargsसे बदलकर देखा अगर किसी के पास ऐसा उदाहरण हो जहाँgit ls-files -z | xargs -0 rg ...साधारणrg ...से तेज़ हो, तो कृपया साझा करें-uuकी जगह-.flag इस्तेमाल किया जा सकता है, जो सिर्फ hidden files search करने के लिए है, git द्वारा tracked hidden files को search कर पाना अच्छा होगा, लेकिन file list query करने का overhead इतना है कि rust में लिखा होने पर भी उसे नज़रअंदाज़ नहीं किया जा सकताgit grepसे तेज़ है?मैं रोज़ अपने काम में ripgrep इस्तेमाल करता हूँ, command line पर भी और vscode में search करते समय भी, burntsushi को धन्यवाद