क्या वृद्धिशील लाइनें लिख सकते हैं? प्रत्येक पंक्ति में A, B बन जाता है, और 1 2 हो जाता है


8

मैं यह लिखना चाहता था:

A = mapping[0]
B = mapping[1]
C = mapping[2]
D = mapping[3]
E = mapping[4]
F = mapping[5]
G = mapping[6]
H = mapping[7]
I = mapping[8]
J = mapping[9]
K = mapping[10]
L = mapping[11]
M = mapping[12]
N = mapping[13]
O = mapping[14]
P = mapping[15]
Q = mapping[16]
R = mapping[17]
S = mapping[18]
T = mapping[19]
U = mapping[20]
V = mapping[21]
W = mapping[22]
X = mapping[23]
Y = mapping[24]
Z = mapping[25]

मैंने लिब्रेकैल्क का उपयोग किया, अलग-अलग हिस्सों को अलग-अलग कोशिकाओं में डालकर, अक्षरों और संख्याओं को जोड़ते हुए, परिणामों को समेटते हुए और बहुत पीछे विम में चिपका दिया।

मैं सराहना करता हूं कि जो मैं लिखना चाहता था वह भयानक कोड है। मैं इस समय पायथन का अध्ययन कर रहा हूं और स्वयं जानकारी प्राप्त करने से बचने की कोशिश कर रहा हूं, जो मुझे पता है कि बाद में मेरे द्वारा कवर किया जा रहा है ( http://interactivepython.org/ )।

जिस तेज़ तर्रार तरीके से मैं ऐसा करना जानता था वह कुछ इस तरह टाइप करना था

A = mapping[0] <ESC> hh <CTRL>+<V> BBh y $ o B <ESC> y 1] <CR>

मुझे पता है कि विम बहुत शक्तिशाली है (मैं इसे कुछ हफ़्ते से इस्तेमाल कर रहा हूं, वास्तव में मुझे बहुत मज़ा आ रहा है)।

क्या यह लिखना संभव होगा कि मैं कुछ विम कमांड के साथ क्या करना चाहता था?

जवाबों:


11

हालांकि यह स्क्रिप्टिंग के साथ किया जा सकता है, अगर आपके पास विम (जैसे आर्क लिनक्स में एक) का बहुत हालिया संस्करण है, तो आप g Ctrl-aएक दृश्य ब्लॉक को बढ़ाने के लिए उपयोग कर सकते हैं । आपके मामले में:

  1. मूल पंक्ति लिखें: A = mapping[0] Esc
  2. Yank लाइन और नीचे इसकी 25 प्रतियाँ डालें: yy25p
  3. पहली पंक्ति से अलग करते 0हुए चार (ब्लॉक का चयन, उपयोग करते हुए Ctrl-v) वाले कॉलम का चयन करें 0(ताकि आप अंतिम 25 शून्य वाले कॉलम के साथ समाप्त हो जाएं), फिर उनके साथ वेतन वृद्धि करें g Ctrl-a
  4. कॉलम युक्त के लिए समान विधि लागू करें A

( ध्यान दें : जैसा कि टिप्पणियां दिखाती हैं, एक alphaको nrformatsविकल्पों में जोड़ने की आवश्यकता होती है , ताकि पत्रों को बढ़ाने में सक्षम हो, उदाहरण के लिए: set nrformats+=alpha.मैं vimrc है: set nrformats=hex,alphaइस प्रकार, अष्टाधारी और द्विआधारी वेतन वृद्धि को अक्षम करना, जिसका मैं उपयोग नहीं करता हूं)


मेरे लिए काम नहीं कर रहा है। मैं www.vimcheatsheet.com से छपे हुए चीटशीट पर देख सकता हूं कि यह एक बहुत ही मानक कमांड है। vim --version यह लौटाता है: pastebin.com/DcFxZh1S । मुझे जांच करनी होगी कि यह मेरे लिए काम क्यों नहीं कर रहा है ... (मैंने दृश्य कमांड और मोड सम्मिलित करने की कोशिश की है)। जब मैं पेस्ट करता हूं, तो यह सब एक ही लाइन पर दिखाई देता है। हालाँकि मैंने g Ctrl-a की कोशिश की है और यह वही करता है जो मैं चाहता था, धन्यवाद :)
डंकन बेट्स

1
:verbose map yआपको यह दिखाना चाहिए कि आपके पास जो मैपिंग शुरू होती yहै, वह कहां है और वे कहां सेट की गई हैं। लेकिन आपको yyसामान्य मोड में उपयोग करना होगा ।
वैनलेसर


1
के किन संस्करणों vimमें भी वृद्धि होगी Aकरने Bके साथ Ctrl-aकार्रवाई? मेरा निश्चित रूप से नहीं है, और मैं पर हूँ 7.4 1-1202
कॉरी क्लेन

4
@CoryKlein टाइप करने का प्रयास करें :set nrformats+=alpha। यह मूल्य alphaको विकल्प में जोड़ 'nrformats'देगा और Ctrl-aवर्णमाला वर्णों में "वृद्धि" करने की अनुमति देनी चाहिए । यदि आपको यह व्यवहार पसंद है, तो आप इसे अपने vimrc में जोड़ सकते हैं। अन्यथा, आप इसे ऑपरेटर के साथ विकल्प में जोड़ सकते हैं +=और बाद में ऑपरेटर -=( :set nrformats-=alpha) के साथ इसे हटा सकते हैं ।
सागिनॉ

6

मैं दृश्य वृद्धि समाधान पसंद करता हूं जो @VanLaser इस्तेमाल किया (देखें :h v_CTRL-A)। हालाँकि मैं दिखाऊंगा कि यह मैक्रो के माध्यम से भी किया जा सकता है।

के साथ शुरू:

A = mapping[0]

अपनी पसंद के एक मैक्रो में निम्नलिखित कीपर्स रिकॉर्ड करें (जैसे q):

yyp:set nrformats+=alpha<cr><c-a>:set nrformats-=alpha<c-a>

यह लाइन को डुप्लिकेट करेगा और फिर पहले वर्ण (जैसे A) को बढ़ाएगा और फिर संख्या भाग को बढ़ाएगा। इस मैक्रो को 24 बार चलाएं और आप कर रहे हैं, जैसे 24@q

  • qq - रजिस्टर में रिकॉर्डिंग शुरू करें q
  • yyp - लाइन को डुप्लिकेट करें
  • :set nrformats+=alpha<cr>- डिफ़ॉल्ट रूप से 'nrformatsनहीं हैalpha
  • <c-a>- alphaअब हम लेटर बढ़ा सकते हैं
  • :set nrformats-=alpha<cr>- निकालें alphaसे'nrformats'
  • <c-a> - अगला नंबर बढ़ाना
  • q - रिकॉर्डिंग बंद करें
  • 24@q- रजिस्टर में मैक्रो को q24 बार रीप्ले करें

अधिक मदद के लिए देखें:

:h q
:h @
:h yy
:h p
:h 'nrformats'
:h :set
:h CTRL-A
:h v_CTRL-A

एक अच्छा :) 25?
वैनसेलर

1
@VLLaser: 1 (शुरुआती लाइन) + 1 (मैक्रो की रिकॉर्डिंग) + 24 = 26.
पीटर रिनकर

4

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

iABCDEFGHIJKLMNOPQRSTUVXYZ<Esc>:s/./\=submatch(0)." = mapping[".line('.')."]\n"/g

बहुत ही शांत ! (+1)
जेजाओ

2

लगभग हमेशा ऐसा कुछ करते समय, मैं :substituteमैक्रोज़ पर उपयोग करना चुनता हूं । विशेष रूप से प्रतिस्थापन में अभिव्यक्ति का मूल्यांकन करने की क्षमता जब शुरू होती \=है तो यह अक्सर संभव होता है (देखें :h sub-replace-special)।

एक बार जब आपके पास खाली लाइनें होती हैं ( 25i<Enter><Esc>), तो आप कमांड का उपयोग कर सकते हैं

:1,26s/^/\=nr2char(line('.')+64) . ' = mapping[' . (line('.')-1) . ']'

आवश्यक अनुक्रम '.'फ़ंक्शन द्वारा लौटे वर्तमान लाइन ( तर्क) संख्या का उपयोग करके उत्पन्न होते हैं line(), और दशमलव संख्या को ASCII समकक्ष (65 = ए) में बदलने के लिए nr2char () का उपयोग करते हैं। आवश्यक तारों का उपयोग करके समतल किया जाता है.


1

आप हमेशा ऑपरेटिंग सिस्टम का उपयोग करने की कोशिश कर सकते हैं ...

:r ! perl -E 'for(A..Z){say "$_ = mapping[", ord($_)-64 ,"]"}'

1
पर्ल ऑपरेटिंग सिस्टम में नहीं है।
डैश-टॉम-बैंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.