प्रस्तावना
एक नियम के रूप में, मैं mc (आधी रात के कमांडर) संपादक में निर्मित mcedit संपादक में स्रोत कोड को संपादित करता हूं (यह मत पूछें कि क्यों नहीं, यह ऐतिहासिक रूप से हुआ है)। और बहुत समय के लिए mcedit में आप रिकॉर्डिंग और मैक्रोज़ खेलने के कार्य का उपयोग कर सकते हैं।
मैं हर समय मैक्रोज़ का उपयोग करता हूं, लेकिन ये आमतौर पर बहुत सरल चीजें हैं, जैसे एक पाठ को दूसरे के साथ बदलना, या कुछ एकल-प्रकार के कार्यों को दोहराना। लेकिन इस मामले में मुझे एक अधिक जटिल मैक्रो लिखने से निपटना पड़ा, जिसके कार्यान्वयन को मैं अद्भुत मैडिटिट संपादक के संभावित उपयोगकर्ता से परिचित कराना चाहूंगा।
Dano
कार्य एक फ़ाइल को संपादित करने के लिए खोलना था जिसमें एक समस्या है जिसमें हॉटकी, अर्थात। न्यूनतम प्रयास के साथ।
अर्थात्, संपादक में चेतावनी की एक सूची के साथ एक फ़ाइल उत्पन्न की गई थी, जो डॉक्सिनेट उपयोगिता द्वारा उत्पन्न की गई थी, यह एक सूची थी जिसमें समस्या फ़ाइल का पूर्ण पथ और रेखा संख्या भी थी।
चेतावनी फ़ाइल कुछ इस तरह दिखी (केवल लाइनें बहुत बड़ी थीं):
/home/smind/dev/mc/lib/vfs/path.c:1046: warning: argument 'element' of command @param is not found in the argument list of vfs_path_serialize(const vfs_path_t *vpath, GError **error) /home/smind/dev/mc/lib/vfs/path.c:1212: warning: The following parameters of vfs_path_append_new(const vfs_path_t *vpath, const char *first_element,...) are not documented: parameter 'first_element' /home/smind/dev/mc/lib/vfs/path.c:1246: warning: The following parameters of vfs_path_append_vpath_new(const vfs_path_t *first_vpath,...) are not documented: parameter 'first_vpath'
निर्णय
सबसे पहले, कार्य को दो उप-प्रकारों में विभाजित किया गया था:
1) पंक्ति की शुरुआत से बृहदान्त्र तक पंक्ति के नंबर सहित वांछित अनुभाग का चयन करें;
2) एक बाहरी कार्यक्रम में चयनित टुकड़े को संसाधित करें;
बाहरी मैक्रोज़
दूसरे शब्दों में, आपको एक बाहरी मैक्रो लिखने की ज़रूरत है जो एक लाइन लेता है और वांछित लाइन पर वांछित फ़ाइल खोलता है।
आप पता लगा सकते हैं कि मेसडिट कमांड का उपयोग करके बाहरी मैक्रो को कहां संग्रहीत करता है:
smind@darkstar$ mc -F
परिणामस्वरूप, हम निम्नलिखित पाठ देखेंगे
[उपयोगकर्ता डेटा]
mcedit macros: /home/smind/.local/share/mc/mc.macros
mcedit external macros: /home/smind/.local/share/mc/mcedit/macros.d/macro.*
इसके बाद, आपको बाहरी हैंडलर का कोड लिखना होगा और उसे /home/smind/.local/share/mc/mcedit/macros.d/macro.<NUMBER>.sh नाम से सहेजना होगा।
यह <NUMBER> बाद में मैक्रो लिखते समय की आवश्यकता होगी (मेरे मामले में, फ़ाइल को मैक्रो.42.sh कहा गया था)।
बाहरी मैक्रो फ़ाइल कुछ इस तरह दिखना चाहिए
e edit file mcedit `cat %b`
% b - फ़ाइल का नाम जिसमें संपादक में चयनित पाठ है।
संपादक मैक्रोज़ (mcedit macros)
मैक्रो रिकॉर्ड करने के लिए, बस ctrl-r दबाएं और फिर आगे कीस्ट्रोक्स रिकॉर्ड किए जाएंगे और दोहराया जा सकता है।
समाप्त करने के लिए, आपको फिर से ctrl-r प्रेस करने की आवश्यकता है और फिर मैक्रो को कॉल करने के लिए हॉटकी दबाएं।
अब हमें निम्नलिखित मैक्रो लिखने की आवश्यकता है:
Shift-F7 ( ) Ctrl-Right ( ) Ctrl-Right ( ) Shift-Home ( )
... और मैक्रो रिकॉर्डिंग समाप्त करने के बाद, इसे ctrl-P संयोजन पर
लटकाएं , जिसके बाद आपको मैक्रोज़
/home/smind/.local/share/mc/mc.macros को संग्रहीत करने वाली फ़ाइल खोलने की आवश्यकता है
[editor] ctrl-T=ExecuteScript:2; ctrl-F=ExecuteScript:0; ctrl-A=MarkAll:-1; ctrl-W=Paste:-1;Down:-1; ctrl-P=SearchContinue:-1;WordRight:-1;WordRight:-1;MarkToHome:-1;
वांछित मैक्रो वाले लाइन में, आपको एक बाहरी मैक्रो कॉल जोड़ना होगा -
ExecuteScript: 42;आपको कुछ इस तरह से मिलना चाहिए:
[editor] ctrl-T=ExecuteScript:2; ctrl-F=ExecuteScript:0; ctrl-A=MarkAll:-1; ctrl-W=Paste:-1;Down:-1; ctrl-P=SearchContinue:-1;WordRight:-1;WordRight:-1;MarkToHome:-1;ExecuteScript:42;
अगला, बस किसी भी लाइन पर कर्सर रखें, जिसमें पथ है और ctrl-p दबाएं, फ़ाइल कर्सर के नीचे पथ पर खुल जाएगी।
फिन
पुनश्च: मुझे उम्मीद है कि मेसडिट में मैक्रोज़ का उपयोग करने वाले उपयोगकर्ताओं की संख्या अचानक बढ़ जाएगी।
PPS: ctrl-F संयोजन पर मैंने इंडेंट यूटिलिटी (बहुत सुविधाजनक) का उपयोग करके चयनित पाठ का स्वरूपण लटका दिया है
PPPS: मैं "अगला" और "बाद" शब्दों की बड़ी संख्या के लिए माफी माँगता हूँ