एमएसीएस की समझ संरेखित करें


31

मैंने Emacs प्रलेखन को पढ़ा है align-regexpलेकिन फिर भी यह समझने में कठिनाई है कि यह कैसे काम करता है। मैं C-uM-xalign-regexpजिस बारे में बात कर रहा हूं , वह उसका उपसर्ग रूप है , सरल रूप नहीं M-xalign-regexp। यहाँ मेरे सवाल हैं:

  • क्या पहले पैरामीटर (रेगेक्स) को स्ट्रिंग की पूरी रेखा से मेल खाना है? क्या होगा अगर रेगेक्स केवल स्ट्रिंग के एक हिस्से से मेल खाता है?
  • दूसरे पैरामीटर (कोष्ठक समूह) को संशोधित करने के लिए क्या आपूर्ति करें (यदि नकारात्मक है तो उचित ठहराएं)? जैसा कि मैं समझता हूं कि मुझे एक कैप्चर किए गए ग्रुप नंबर (1 से गिनती) की आपूर्ति करने की आवश्यकता है, है ना? क्या "उचित होने पर नकारात्मक" का अर्थ है, अगर मैं समूह 3 को सही संरेखित करना चाहता हूं, तो मैं -3इनपुट के रूप में आपूर्ति करूंगा ?
  • तीसरे पैरामीटर "रिक्ति की मात्रा (या यदि नकारात्मक है तो स्तंभ)" का क्या अर्थ है? मैं अभी पूरी तरह से यह नहीं समझता कि यह पैरामीटर क्या करता है।

मैंने अभ्यास करने के लिए कुछ पाठ उदाहरण एकत्र किए हैं। यदि कोई उदाहरण के रूप में पाठ के नीचे उपयोग कर सकता है जो बहुत मददगार होगा।


से

class CreateStudents < ActiveRecord::Migration
  def change
    create_table :students, :comment => "学生信息表" do |t|
      t.string :political_status, :comment => "政治面貌"
      t.string :education_level, :comment => "培养层次"
      t.string :enroll_method, :comment => "入学方式"
      t.date :enrolled_at, :comment => "入学时间"
      t.string :charge_type, :comment => "收费类别"
      t.string :enrolled_year, :comment => "学籍年度"
      t.string :enrolled_place, :comment => "生源所在地"
      t.string :bank_card_number, :comment => "银行卡号"
      t.string :bank_account_number,  :comment => "银行账号"
      t.boolean :is_active_duty, :default => false, :comment => "是否现役军人"
      t.boolean :is_equivalent_degree, :default => false, :comment => "是否同等学历"
      t.boolean :is_on_record, :default => true, :comment => "是否在籍"
      t.boolean :is_at_school, :default => true, :comment => "是否在校"
      t.timestamps
    end
  end
end

सेवा मेरे

class CreateStudents < ActiveRecord::Migration
  def change
    create_table :students, :comment => "学生信息表" do |t|
      t.string  :political_status,     :comment => "政治面貌"
      t.string  :education_level,      :comment => "培养层次"
      t.string  :enroll_method,        :comment => "入学方式"
      t.date    :enrolled_at,          :comment => "入学时间"
      t.string  :charge_type,          :comment => "收费类别"
      t.string  :enrolled_year,        :comment => "学籍年度"
      t.string  :enrolled_place,       :comment => "生源所在地"
      t.string  :bank_card_number,     :comment => "银行卡号"
      t.string  :bank_account_number,  :comment => "银行账号"
      t.boolean :is_active_duty,       :default => false,  :comment => "是否现役军人"
      t.boolean :is_equivalent_degree, :default => false,  :comment => "是否同等学历"
      t.boolean :is_on_record,         :default => true,   :comment => "是否在籍"
      t.boolean :is_at_school,         :default => true,   :comment => "是否在校"
      t.timestamps
    end
  end
end

से

my @primes = (
    1,2,3,5,7,
    11,13,17,19,23,
    29,31,37,41,43,
);

सेवा मेरे

my @primes = (
    1,  2,  3,  5,  7,
    11, 13, 17, 19, 23,
    29, 31, 37, 41, 43,
);

जवाबों:


31

ठीक है, पहले संरेखण और फिर यह कैसे काम करता है की व्याख्या।

पहले एक संरेखित करने के लिए लाइनों का चयन, कर C-u M-x align-regexpऔर चुनें: \(\s-*\):, 1, 1, और y

दूसरा, उपयोग के लिए ,\(\), 1, 1, और y

यह काम किस प्रकार करता है:

रीजेक्स को क्षेत्र में हर लाइन पर आजमाया जाता है। प्रत्येक पर, यदि लाइनें पहले से ही संरेखित नहीं हैं, तो यह एक अलग कॉलम पर मेल खाएगा। अधिक विशेष रूप से, आपके द्वारा चुना गया समूह (दूसरा पैरामीटर, "कोष्ठक समूह को संशोधित करने के लिए") प्रत्येक पंक्ति पर एक अलग कॉलम पर समाप्त होगा। फ़ंक्शन उनमें से कुछ के अंत में रिक्त स्थान जोड़ देगा और अन्य समूहों से वर्णों को हटा देगा, जब तक कि सभी समूह एक ही स्तंभ पर समाप्त नहीं हो जाते, तीसरे पैरामीटर में दर्ज रिक्ति बाधाओं का सम्मान करते हुए।

उदाहरण के लिए, पहले मामले से कुछ पंक्तियाँ लेना:

  t.string( ):enroll_method, :comment => "入学方式"
  t.date( ):enrolled_at, :comment => "入学时间"
  t.boolean( ):is_active_duty, :default => false, :comment => "是否现役军人"

कोष्ठक ( )मिलान रेगेक्स के पहले समूह का प्रतिनिधित्व करता है। जैसा कि आप देख सकते हैं, प्रत्येक पंक्ति पर यह एक अलग कॉलम पर समाप्त होता है। संरेखित करने के लिए, फ़ंक्शन पहली पंक्ति में एक स्थान, दूसरी पंक्ति में एक के लिए तीन स्थान और तीसरी में कोई भी जोड़ देगा।

यह कितने मापदंडों को जोड़ेगा (या हटाएगा) तीसरे पैरामीटर, "रिक्ति की मात्रा" द्वारा निर्धारित किया गया है। इस पैरामीटर का वास्तव में मतलब है, कोष्ठक समूह की "प्राकृतिक" लंबाई क्या होनी चाहिए। उन पंक्तियों में जिन्हें संरेखण की आवश्यकता नहीं है, यह वास्तव में यह लंबाई होगी।

उदाहरण के लिए, दूसरे मामले पर, यदि आप regexp \(,\), रिक्ति द्वारा संरेखित करना चुनते हैं, तो आप 1देखेंगे कि दूसरी और तीसरी पंक्ति में कोई स्थान नहीं जोड़ा गया है, क्योंकि अल्पविराम पहले से ही 1 का "रिक्ति" प्रदान करता है।

तो, पुनरावृत्ति करने के लिए:

  • regexp: उस स्थान से मेल खाते हैं जिसे आप संरेखित करने में रुचि रखते हैं; ऐसा करने के लिए, इसके किसी कोष्ठक समूह को रिक्त स्थान के साथ बढ़ाया जाएगा, या वर्णों को हटाकर छोटा किया जाएगा
  • कोष्ठक समूह: चुनें कि कौन सा है
  • रिक्ति: यदि समूह इससे कम है, तो इसमें स्थान जोड़े जाएंगे; यदि यह लंबा है, तो वर्ण इसे से हटा दिया जाएगा, अंत में शुरू होगा (जब तक कि यह संरेखण के प्रयोजनों के लिए लंबा नहीं है, निश्चित रूप से)
  • दोहराना: ठीक है, यह स्पष्ट है, मुझे लगता है

पैरामीटर वेरिएंट (प्रीपेंड माइनस साइन):

  • औचित्य: समूह के अंदर गैर-रिक्त वर्ण हटाए नहीं जाएंगे, और बाईं ओर से आवश्यक रिक्त स्थान जोड़ / हटा दिए जाएंगे। अपने दूसरे मामले में, कोशिश करें: regexp \([0-9]+\), group -1
  • कॉलम (रिक्ति के बजाय): उस निश्चित कॉलम के लिए संरेखित करें (बेशक, यह "दोहराने" के साथ अच्छी तरह से काम नहीं करता है)।

1

मूल प्रश्न का गहरा उत्तर नहीं है, लेकिन मैंने जो कोड लिखा है, वह अभी भी यह समझने में योगदान कर सकता है कि पैरामीटर (कोड में) कैसे काम करते हैं। यहाँ लिंक है


कृपया यहां कोड को पोस्ट / समझाएं; लिंक-केवल उत्तर समस्याग्रस्त हो सकते हैं यदि लिंक मृत हो जाता है। यदि आप इसे केवल लिंक करना ही छोड़ देंगे, तो कृपया उत्तर को टिप्पणी में बदलें।
दान

वैसे यह एक और emacs.stackexchange उत्तर की एक कड़ी है - अगर वह मर गया, तो आपको यह उत्तर दिखाई नहीं देगा! (मैं इस बात से सहमत हूं कि यह उत्तर एक टिप्पणी की तरह लगता है, हालांकि)।
फिल्स

1
मैं इसे एक टिप्पणी, उत्तर, कोड का हिस्सा, या जो कुछ भी आप लोग पसंद करते हैं (यहां तक ​​कि इसे हटाने से मुझे परेशान नहीं करेगा) के रूप में पोस्ट करने में खुशी हो रही है। मैं सिर्फ मदद करने की कोशिश कर रहा था, और यह एक नौसिखिया के लिए कठिन है जैसे कि न्यूनतम परेशान करने वाले प्रोटोकॉल पथों का पता लगाने के लिए (हालांकि मैं कोशिश करता हूं - यह मुझे लग रहा था कि मेरा "जवाब" एक जवाब की तुलना में एक वैकल्पिक दृष्टिकोण का अधिक था। दूसरों के द्वारा पोस्टिंग पर टिप्पणी करें, यही कारण है कि मैंने इसे जिस तरह से पोस्ट किया है। मेरे कोड बनाम पोस्ट को लिंक करके समझाने के लिए डिट्टो। मैंने लिंक को पोस्ट किया है। मुझे लगा कि मेरे मामूली उत्तर को एक कोड उत्तर से बेहतर फिट किया गया है।) केविन
केविन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.