- tmux, SSH, nvim, और शक्तिशाली search·automation scripts को मिलाकर एक अनोखा workflow बनाया गया है, जिससे remote server की files को GUI के बिना भी तुरंत browse, edit और search किया जा सकता है
- सिर्फ एक key combination से tmux की कई windows में filename auto-search और तुरंत open, file switching और buffer management तक सब कुछ shortcuts से किया जाता है
- VSCode की धीमी speed और key bind conflicts से असंतुष्ट होकर लेखक ने scripts के जरिए सभी operations को खुद एकीकृत किया
- regex, perl, tmux, nvim जैसे Unix tools के संयोजन से file path और line info को अपने-आप पहचानकर खोलने की सुविधा बनाई गई
- इसे खुद implement करने की प्रक्रिया बहुत जटिल है, लेकिन यह दिखाती है कि terminal की शक्ति और extensibility को किस हद तक बढ़ाया जा सकता है
मेरा अपना terminal इस्तेमाल करने का तरीका
- यह लेख terminal और tools को जोड़कर एक efficient development environment बनाने के अनुभव को साझा करता है
- यह प्रक्रिया आम तौर पर इतनी जटिल है कि इसके लिए वीडियो की ज़रूरत पड़ती है, इसलिए टेक्स्ट के साथ वास्तविक वीडियो भी जोड़ा गया है (वीडियो देखना ज़रूरी)
- वीडियो के कुछ चरण (0:11, 0:21, 0:41) ऐसे हैं जहाँ बहुत से लोग हैरान होकर पूछते हैं, "क्या यह सच में संभव है?"
वीडियो में terminal workflow का चरण-दर-चरण सारांश
- 0:00 : लैपटॉप पर Windows Terminal चलाना
- 0:02 : ctrl + shift + 5 shortcut से नया terminal tab खोलना,
sshके जरिए घर के desktop से कनेक्ट होना, और तुरंत tmux चलाना - 0:03 : tmux में default shell zsh चलाना, prompt दिखाना और पूरी configuration को asynchronously load करना
- 0:08 :
zoxideसे हाल की directory को fuzzy search करके वहाँ जाना - 0:09 : ripgrep command टाइप करना शुरू, zsh पुराने usage history के आधार पर auto-complete करता है, और ctrl + f से उसे accept किया जाता है
- 0:11 :
ctrl + kfshortcut से tmux scrollback के पूरे हिस्से में filename search करना, और filenames नीले रंग में highlight होना - 0:12 :
nkey को लगातार दबाकर search किए गए file list में मनचाही file को ढूँढना - 0:21 :
okey से चुनी गई file को default app (nvim) में खोलना, और tmux उसे नई window में चलाता है (सब कुछ अब भी remote server पर चल रहा होता है) - 0:26 : rust-analyzer से code के कई references पर जाने की कोशिश, कुछ macros पहचाने नहीं जाते, फिर 0:32 पर सही तरह से jump सफल होता है
- 0:38 :
ctrl + khसे tmux focus को बाईं window में ले जाना - 0:39 :
nkey को फिर दबाकर "copy-mode" स्थिति में पिछले file search results को आगे भी browse करना - 0:41 :
okey से इस बार दूसरी file को पहले से खुले nvim instance में खोलना - 0:43 :
bkey से खुले हुए file buffers की list देखना, और दो files के बीच बारी-बारी से switch करके समाप्त करना
यह terminal workflow इस्तेमाल करने की नौबत क्यों आई?
- VSCode धीमा था, और खासकर vim plugin के साथ बहुत lag करता था
- editor, vim plugin, terminal और window management features के बीच key bind conflicts बार-बार होते थे, जो असुविधाजनक था
- Zed editor भी आज़माया गया, लेकिन उस समय वह अभी अपरिपक्व था और key bind conflict की समस्या वहाँ भी बनी रही
- nvim (Neovim) को terminal में सीधे इस्तेमाल करना शुरू किया, लेकिन
- ripgrep आदि से search किए गए filenames को हर बार copy करके editor में paste करना बहुत झंझट वाला था
- खासकर जब ripgrep results में filename और line number साथ आते थे,
- paste करते समय हर बार syntax error हो जाती थी
- और असल में file खोलने से पहले ही अनावश्यक editing करनी पड़ती थी
- लेखक को लगा कि VSCode के ctrl-click जैसा ऐसा workflow चाहिए जो file path को सीधे खोल सके
- इसलिए tmux का उपयोग करके मनचाहा feature खुद implement किया गया
- जब लोग पूछते हैं कि tmux क्यों इस्तेमाल करते हैं, तो लेखक कहता है कि यही automation और session persistence उसकी वजह है
- terminal कल्पना से कहीं अधिक शक्तिशाली है, लेकिन सिर्फ default features से इस तरह की automation सामने नहीं आती
- tmux भले पुराना हो, इसकी syntax जटिल हो और bugs भी हों, फिर भी extensibility और customization की क्षमता के कारण इसे चुना गया
मुख्य implementation तरीके
tmux में पूरे scrollback से filename search
- tmux copy-mode में जटिल regular expression से filename patterns match करना
- खुद बनाए गए regex script (
search-regex.sh) से file path, line और column तक highlight करना - उदाहरण tmux config:
bind-key f copy-mode \; send-keys -X search-backward '정규표현식'
चुनी हुई file को नई window/मौजूदा window में खोलना
- tmux shortcut के जरिए चुनी हुई file को default app या editor (nvim आदि) में खोलने के लिए custom behavior बनाना
- relative path support और tilde expansion शामिल
bind-key -T copy-mode-vi o send-keys -X copy-pipe 'cd #{pane_current_path}; ...' bind-key -T copy-mode-vi O send-keys -X copy-pipe-and-cancel 'tmux send-keys ...'
पहले से खुले nvim instance में file खोलना
- perl script के जरिए tmux किसी खास nvim pane को ढूँढता है और उसी pane में file/line info तक सीधे key input भेजता है
file:line:columnsyntax को vim command में बदलकर अपने-आप open किया जाता है
इस तरीके के फायदे और सीमाएँ
- local terminal की functional limitations से आगे निकलना: tmux के जरिए remote server पर files को स्वतंत्र रूप से browse/edit/search करना
- भले editor remote editing protocol को support न करे, workflow वही रखा जा सकता है
- सभी key binds, search, file switching, buffer management आदि को पूरी तरह अपनी पसंद के अनुसार एकीकृत करना
- VSCode plugin बनाने की तुलना में automation को अधिक तेज़ी और आसानी से बनाना
- खुद लिखी गई scripts आसानी से टूट सकती हैं और maintain करना कठिन है, इसलिए दूसरों को recommend करना मुश्किल है
वैकल्पिक समाधान
- आम तौर पर recommend की जाने वाली open source/tools की combinations:
fish + zoxide + fzf: fuzzy directory, command search, और कुछ file search workflows का विकल्प बन सकते हैं- editor के built-in features (tabs, windows, fuzzy finder आदि) भी अधिकांश users के लिए पर्याप्त हैं
qf: terminal output से file selection कर सकता है, लेकिन interactive tools के साथ integrate नहीं हो सकता, vi-like CLI का उपयोग करता हैe:file:linepath को पहचानने वाला एक छोटा tool (हर editor type के लिए अलग script चाहिए)vim --remote,code filename,emacsclientआदि भी मिलते-जुलते असर देते हैं, लेकिनfile:lineपहचान अब भी अधूरी है
निष्कर्ष और सीख
- terminal कल्पना से कहीं अधिक शक्तिशाली है, और scripts के जरिए इसे जोड़कर GUI tools में असंभव automation भी बनाई जा सकती है
- लेकिन maintainability, scripts में छिपे bugs जैसी practical सीमाएँ भी मौजूद हैं
- अगर terminal workflow automation में रुचि है, तो custom tmux/nvim/fzf environment से चरणबद्ध तरीके से शुरुआत करना सबसे व्यावहारिक है
1 टिप्पणियां
Hacker News राय
मैं भी लगभग ऐसा ही ट्रिक इस्तेमाल करता हूँ। tmux scrollback का उपयोग करता हूँ, और tokenized output को zsh में pipe करता हूँ ताकि tmux स्क्रीन पर दिख रही हर चीज़ के लिए autocomplete इस्तेमाल कर सकूँ। संबंधित Threads पोस्ट और gist code भी शेयर किया है। यह मेरे लिए सच में बहुत उपयोगी रहा
मुझे इस तरह का workflow बहुत पसंद है, और मैं भी कई सालों से कुछ ऐसा ही बार-बार सुधारता आ रहा हूँ। समय के साथ मैं custom layers को जितना हो सके उतना कम करने की कोशिश कर रहा हूँ, क्योंकि overlays जितने बढ़ते हैं, maintenance cost उतनी बढ़ती है। plain Vim में भी (अलग tmux के बिना) पोस्ट में बताई गई ज्यादातर चीज़ें की जा सकती हैं, जैसे
rg --vimgrep restore_tool | vim -c cb -(vim -c cb -Vim की मेरी सबसे पसंदीदा सुविधाओं में से एक है, और यह देखकर हैरानी होती है कि लोग इसे लगभग इस्तेमाल ही नहीं करते)। बेशक हर बार rg search फिर से चलाना भारी पड़ सकता है, इसलिए मैं आमतौर पर terminal में results का विश्लेषण करता हूँ और ज़रूरत पड़ने पर tmux custom command से last command का output कॉपी करके vim में भेज देता हूँ। इस दौरान मैं prompt में Unicode characters इस्तेमाल करने वाला ट्रिक भी कभी-कभी उपयोग करता हूँ, औरtmux saveb - | vim -c cb -से भी भेज देता हूँvim -c cb -Vim में आपकी पसंदीदा सुविधा है—क्या आप बता सकते हैं कि यह करता क्या है?ls | vim -औरls | vim -c cb -चलाने पर मुझे तुरंत फर्क समझ नहीं आता)'vim -q <(ripgrep --vimgrep restore_tool)'जैसी ही किसी चीज़ के लिए है?यह setup अच्छा लग रहा है क्योंकि इसमें tmux, fzf, rg, zoxide, और साफ-सुथरा nvim सब शामिल हैं। अगर नहीं है, तो मैं atuin, starship, bat, glow, duf, dogdns, viddy, gum/sesh, dust, btop वगैरह भी recommend करना चाहूँगा। ये सब GitHub की Awesome Terminal XYZ lists में मिल जाएँगे। atuin तो लगभग must-have है, और अगर zoxide नहीं है तो ऐसा लगता है जैसे आप athlete हों लेकिन जूते ठीक से फिट न हों। terminal videos रिकॉर्ड करने के लिए asciinema बेहतर विकल्प है। सच कहें तो पहले ऐसे setup को ही “programmer” कहा जाता था। आजकल VSCode, Zed, Cursor जैसे tools भी ज़रूरी हैं, और किस LLM को क्या काम देना है यह भी पता होना चाहिए। ये tools अब नया “minimum” हैं, लेकिन पुराने environment की जगह नहीं लेते। चाहे Claude Code या gptel को कितनी भी अच्छी तरह इस्तेमाल कर लो, कभी-कभी वे tree बिगाड़ सकते हैं, और magit के बिना git इस्तेमाल करना मैं सोच भी नहीं सकता। अगर किसी को सच में लगता है कि plain Cursor से वह OP से तेज़ है, तो मैं कहूँगा कि वह LLM को असली काम में इस्तेमाल करते हुए एक वीडियो रिकॉर्ड करके दिखाए
लगभग हर vim/tmux user ने शायद आधा-buggy लेकिन तेज़ unofficial “emulation Emacs” खुद बना लिया होगा
वह Windows पर tmux इस्तेमाल करता है, लेकिन असल में कैसे करता है यह समझ नहीं आया। कोई समझा सके तो अच्छा होगा
इस तरह workflows शेयर करना मुझे बहुत पसंद है। target audience के लिए यह बिल्कुल सही है। मुझे बस लगा कि वीडियो में आवाज़ होती तो अच्छा होता, लेकिन बाद में action list पढ़ लेना भी ठीक था। मुझे अपने workflow के लिए भी कुछ उपयोगी बातें सीखने को मिलीं। उसने tmux के मुश्किल keyboard shortcuts का ज़िक्र किया था—क्या यहाँ किसी ने byobu इस्तेमाल किया है? byobu, tmux का wrapper है, जो ज़्यादातर commands को F# keys पर map कर देता है। मैंने इसे 10 साल पहले पहली बार इस्तेमाल किया था और तब से लगातार इस्तेमाल कर रहा हूँ। उससे पहले कुछ साल pure tmux ही इस्तेमाल किया था
ctrl-kमेरा prefix है, औरh“बाएँ pane चुनो” वाला default नहीं है। byobu मैंने इस्तेमाल नहीं किया, लेकिन विवरण से लगता है कि वह बस default shortcuts को थोड़ा सुविधाजनक बनाता है, इसलिए मुझे नहीं लगता कि मैं उस पर कुछ और layer जोड़ना चाहूँगाइस तरह बिना बड़े regex के भी tmux plugins से copy mode जैसी सुविधाएँ बढ़ाई जा सकती हैं। tmux-fpp, tmux-copycat, tmux-fingers, tmux-urlview जैसे विकल्प हैं। speed के लिहाज़ से built-in features पर ज़्यादा निर्भर रहना फायदेमंद हो सकता है, इसलिए ध्यान देने लायक है। मुझे खास तौर पर tmux-resurrect (session save/restore), tmux-continuum (automation features), और Oh-My-Fish के लिए tmux-zen भी बहुत पसंद हैं। tmux-resurrect, tmux-continuum, tmux-zen साझा कर रहा हूँ। ज़ोर देकर कहूँगा कि शानदार tmux environment सेट करना जितना लगता है उससे कहीं ज़्यादा आसान है
:को ठीक से capture नहीं करता, और b) copycat अपनी viewer abstraction इस्तेमाल करता है, इसलिए एक search पर सिर्फ एक ही action किया जा सकता है। मेरी विधि tmux की built-in search को reuse करती है, इसलिए highlighted files पर आप अपनी पसंद के actions freely bind कर सकते हैं। ज़्यादातर plugins सिर्फ copy/paste support करते हैं या अपना mode चढ़ा देते हैं, क्योंकि tmux highlight control लगभग सिर्फ built-in search के लिए ही उपलब्ध कराता हैयह setup वाकई खूबसूरत है। लेकिन यह अब भी रहस्य है कि terminal में अभी तक proper AI typeahead क्यों नहीं आया। Cursor tab इसके लिए बिल्कुल सही लगता है, लेकिन terminal integration अटका हुआ है। मन करता है कि अस्थायी तौर पर terminal output को fake file में pipe करके cursor को भेजने वाला कोई product झटपट बना दूँ
लेख का शीर्षक असल में "How I use my terminal" है