एक अलग फ़ाइल में चयन को स्थानांतरित करें


12

विम के साथ, मैं टेक्स्ट के एक टुकड़े को नई फ़ाइल में कैसे स्थानांतरित कर सकता हूं? फिलहाल, मैं यह करता हूं:

  • पाठ का चयन करें
  • उपयोग :w new_file
  • पाठ फिर से चुनें
  • पाठ हटाएं

क्या ऐसा करने का अधिक कुशल तरीका है?

इससे पहले

a.txt

sometext
some other text
some other other text
end

उपरांत

a.txt

sometext
end

b.txt

some other text
some other other text

जवाबों:


4

इन कस्टम कमांड के बारे में कैसे:

:command! -bang -range -nargs=1 -complete=file MoveWrite  <line1>,<line2>write<bang> <args> | <line1>,<line2>delete _
:command! -bang -range -nargs=1 -complete=file MoveAppend <line1>,<line2>write<bang> >> <args> | <line1>,<line2>delete _

1
यह बहुत बदसूरत है, लेकिन हे, यह एक कदम में वही लगता है जो मैंने पूछा (मैंने कोशिश की)। +1, और स्वीकार किया गया। मैं इसे जल्दी से करने के लिए एक देशी तरीके की तलाश में था, लेकिन जब से यह एक नहीं लगता है, तो आपका बस ठीक हो जाएगा। धन्यवाद!
greg0ire

1
सुंदरता देखने वाले की नजर में है। मुझे यह बहुत सुंदर लगता है; आपको केवल एक बार (अपने .vimrc में) इसे टाइप करना होगा।
इंगो करकट

आप सही कह रहे हैं, "बहुत बदसूरत" जोर से "बहुत अपरिचित" है। आपकी आज्ञा बहुत आसान है, और मुझे लगता है कि मैं निश्चित रूप से इसे अपने .vimrc में ले
जाऊंगा

8

"टेक्स्ट के एक टुकड़े को एक नई फ़ाइल में ले जाएं" मेरा मानना ​​है कि आप उस फ़ाइल के टुकड़े को वर्तमान फ़ाइल से काट दें और केवल उस पाठ से युक्त एक नई फ़ाइल बनाएं।

विभिन्न उदाहरण:

  • :1,1 w new_file लाइन नंबर 1 से केवल टेक्स्ट वाली एक नई फ़ाइल बनाने के लिए
  • :5,50 w newfile पंक्ति 5 से पंक्ति 50 तक एक नई फ़ाइल बनाने के लिए
  • :'a,'b w newfileएक नई फाइल बनाने के लिए जिसमें मार्क से मार्क aतक टेक्स्ट होb
    • अपने अंकों का उपयोग करके सेट करें maऔर mbजहाँ आप कभी भी पसंद करते हैं

उपरोक्त केवल पाठ की प्रतिलिपि बनाता है और उस पाठ वाली एक नई फ़ाइल बनाता है। फिर आपको बाद में डिलीट करना होगा।

यह एक ही श्रेणी और dकमांड का उपयोग करके किया जा सकता है :

  • :5,50 d पंक्ति 5 से पंक्ति 50 तक पाठ को हटाने के लिए
  • :'a,'b dपाठ को चिह्न से चिह्न तक हटाने के aलिएb

या ddसिंगल लाइन केस के लिए उपयोग करके ।

यदि आप इसके बजाय दृश्य मोड का उपयोग करके पाठ का चयन करते हैं, और फिर :पाठ का चयन करते समय हिट करते हैं, तो आप कमांड लाइन पर निम्नलिखित देखेंगे:

:'<,'>

जो चयनित पाठ को इंगित करता है। इसके बाद आप कमांड का विस्तार कर सकते हैं:

:'<,'>w >> old_file

जो टेक्स्ट को मौजूदा फाइल में जोड़ देगा । फिर ऊपर के रूप में हटाएं।


एक लाइन:

:2,3 d | new +put! "

विभाजन:

  • :2,3 d - 2 लाइनों को 3 से हटाएं
  • | - तकनीकी रूप से यह पहली कमांड के आउटपुट को दूसरे कमांड पर रीडायरेक्ट करता है लेकिन चूंकि पहला कमांड कुछ भी आउटपुट नहीं करता है, इसलिए हम सिर्फ कमांड को एक साथ जोड़ रहे हैं
  • new - एक नया बफर खोलता है
  • +put! "- अनाम रजिस्टर ( ") की सामग्री को बफर में डालें
    • बैंग ( !) वहां है ताकि सामग्री को वर्तमान लाइन से पहले रखा जाए । यह फ़ाइल के अंत में कारण और खाली रेखा है। इसके बिना, फ़ाइल के शीर्ष पर एक खाली रेखा है।

आपकी धारणा सही है। यह अच्छा लग रहा है, मैं परीक्षण करने जा रहा हूं। आप समझा सकते हैं 2. थोड़ा और? मैं श्रेणियों से बहुत परिचित नहीं हूं। संपादित करें: यदि मैं दूसरी पंक्ति पर यह कोशिश करता हूं, तो यह पहली पंक्ति को दूसरी फ़ाइल में लिखता है, दूसरी पंक्ति को नहीं।
greg0ire

@ greg0ire मुझे लगता है कि थोड़ा पिछड़ा, मैं बेहतर व्याख्या करने के लिए संपादित करूँगा
एम्बेडेड

मैंने अपना प्रश्न स्पष्ट करने के लिए एक उदाहरण जोड़ा।
greg0ire

@ greg0ire मैंने अपना उत्तर सही किया। यह अभी भी दो चरण है। पहली प्रतियाँ और लिखता है। दूसरा डिलीट कर देता है।
एम्बेडेड

1
अच्छा समाधान! आप इसे '<,'>d | new | 0put "स्पष्टता के रूप में भी लिख सकते हैं ।
atripes

1

@ Embed.kyle के जवाब और इस Q & A के आधार पर , मैंने इस एक लाइनर के साथ एक फ़ाइल में एक चयन और वर्तमान फ़ाइल से हटाने के लिए चयन किया। Shift+Vहिट :और रन के साथ कुछ पंक्तियों को चुनने के बाद :

'<,'>w >> test | normal gvd 

पहला भाग चयनित लाइनों को जोड़ता है। दूसरी कमांड सामान्य मोड में प्रवेश करती है और gvdअंतिम चयन का चयन करने के लिए चलती है और फिर हट जाती है।


0

दृश्य मोड में पाठ का चयन करें, फिर yइसे बफर (कॉपी) में "यांक" पर दबाएं या dइसे बफर (कट) में "हटाएं" करें।

फिर आप :split <new file name>अपनी विम विंडो को विभाजित कर सकते हैं, और pyanked पाठ में पेस्ट करने के लिए दबा सकते हैं । फ़ाइल को सामान्य लिखें।

विभाजन को फिर से बंद करने के लिए, उस विभाजन को पास करें जिसे आप बंद करना चाहते हैं :q


1
मेरे पास इस समय 4 चरण हैं: चयन करें, लिखें, चुनें, हटाएं। आपकी विधि के साथ, मेरे पास 6 चरण हैं: चयन करें, हटाएं, विभाजित करें, पेस्ट करें, लिखें, बंद करें। मैंने कुछ और कुशल के लिए कहा: पी
greg0ire

ठीक है, यदि आप :xइसके बजाय विभाजन को पास करते हैं, तो आप लेखन और समापन को एक में जोड़ सकते हैं और इसे पांच चरण बना सकते हैं। : पी
Xyon

यह बेहतर है, लेकिन 5 अभी भी> 4: पी
greg0ire
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.