सवाल विम में चयनित लाइन ऑर्डर कैसे उलटते हैं?


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

पहली पंक्ति
  दूसरी पंक्ति
  तीसरी पंक्ति
  चौथी रेखा

मैं उन्हें उलट करना चाहता हूं

चौथी रेखा
  तीसरी पंक्ति
  दूसरी पंक्ति
  पहली पंक्ति

मैं इसे विम में कैसे कर सकता हूं?


84
2017-09-17 23:57


मूल


पर डुप्लिकेट करें स्टैक ओवरफ़्लो: विम में दृश्य चयन कैसे फ़्लिप करें? - Palec
सम्बंधित: @ विम विकिया सभी लाइनों को उलट दें - Palec
:command! -bar -range=% Reverse <line1>,<line2>global/^/m<line1>-1  vi.stackexchange.com/a/2107/10254 - qeatzy


जवाब:


फ़ाइल में सभी लाइनों को उलट करने के लिए,

:g/^/m0

एक स्पष्टीकरण के लिए देखें

:help 12.4

जो यह भी दिखाता है कि लाइनों की एक श्रृंखला को कैसे उलटाना है।


82
2017-09-18 00:35



सटीक सहायता अनुभाग पर महान युक्ति! सारांशित करने के लिए: 1. पिछली पंक्ति पर एक मार्कर सेट करें जिसे आप रिवर्स करना चाहते हैं (मैं मार्कर 'ए' का उपयोग कर रहा हूं ma), 2. कर्सर को ब्लॉक की पहली पंक्ति में ले जाएं, 3. टाइप करें :'a,.g/^/m 'a - Brent Faust
हाँ, सहित वास्तविक उत्तर यहां स्टैक एक्सचेंज साइट्स पर एक जरूरी है; बाहरी स्रोत का जिक्र करना पर्याप्त नहीं है। (हालांकि, इसका उद्धरण, प्रोप।) - ELLIOTTCABLE


वांछित लाइनों का चयन करें, हिट करें !, और परिणामी प्रॉम्प्ट में लाइनों को पाइप करें tac एक ला :'<,'>!tac। देख man tac अधिक जानकारी के लिए।


62
2017-08-16 14:01



लाइनों का चयन करने के लिए, उपयोग करें shift+v फिर दृश्य रेखा मोड दर्ज करने के लिए j चयन में लाइन जोड़ने के लिए। - wisbucky
मैं पुष्टि कर सकता हूं कि यह विंडोज़ में काम करता है gvim, भी! अन्यथा, आपको पूर्ण रेखा संख्याओं का उपयोग करना होगा (शायद आप रिश्तेदार का उपयोग कर सकते हैं, लेकिन आपको सावधान रहना होगा) :g/^/m0 (जो भी याद रखना मुश्किल है) ... इसलिए, अनिवार्य रूप से, टीएसी के साथ होना चाहिए चाहे आप किस प्लेटफॉर्म पर हों, लेकिन यह 100% विस्क्रिप्ट नहीं है, लेकिन कौन परवाह करता है: पी - dylnmc
ये अद्भुत है !!!! - itzjustricky
टीएसी पूरी तरह से मूल vim हैंडलिंग नहीं है, लेकिन, 'm'ove कमांड एक लाइन नंबर लेता है और यह हमेशा उचित नहीं है। मैं अक्सर एक सीमा के हिस्से के रूप में एक चिह्न का उपयोग करता हूं, इसलिए :.,'a!tac न्यूनतम प्रयास के साथ काम करता है। - studog


मैक ओएस एक्स पर, tac अस्तित्व में नहीं है, लेकिन आप इसका उपयोग कर सकते हैं tail -r एक ही प्रभाव के लिए:

:%!tail -r

यह दृश्य मोड के लिए अच्छी तरह से काम करता है:

:'<,'>!tail -r

से अंश tail(1)मैनपेज:

-R विकल्प इनपुट को रिवर्स ऑर्डर में प्रदर्शित करने का कारण बनता है   लाइन। इसके अतिरिक्त, यह विकल्प -b, -c और के अर्थ को बदलता है   -नहीं विकल्प जब -r विकल्प निर्दिष्ट किया गया है, तो ये विकल्प बाइट्स, लाइनों या 512-बाइट ब्लॉक को प्रदर्शित करने के लिए निर्दिष्ट करते हैं, बजाय   इनपुट की शुरुआत या अंत से बाइट्स, रेखाएं या ब्लॉक   जो प्रदर्शन शुरू करने के लिए। -R विकल्प के लिए डिफ़ॉल्ट है   सभी इनपुट प्रदर्शित करें।


29
2018-06-03 17:18



अति उत्कृष्ट! तो ओएस एक्स के तहत 'टैक' प्रदान करने के लिए: alias tac='tail -r' - Brent Faust
आप भी कर सकते हैं brew install coreutils और उपयोग करें gtac। - Andrew Marshall


दृश्य मोड के साथ उन लोगों के लिए अधिक आरामदायक:
 1. उस चयन के ऊपर लाइन नंबर की पहचान करें जिसे आप फ़्लिप करना चाहते हैं :set nu
 2। Shift-V चयन को हाइलाइट करने के लिए आप फ़्लिप करना चाहते हैं (दृश्य मोड)।
 3। :g/^/m <Line number from step 1>

ध्यान दें कि दृश्य मोड में यह स्वचालित रूप से दिखाई देगा      :'<,'>g/^/m <Line number> जब आप 3 से कमांड टाइप करते हैं।

यह आदेश एक पंक्ति में एक पंक्ति को उस पंक्ति संख्या में ले जाकर काम करता है जो आप इसे देते हैं। जब दूसरी वस्तु को लाइन नंबर में धक्का दिया जाता है, तो यह पहले नीचे पंक्ति संख्या + 1 तक धक्का देता है। फिर तीसरा पहला और दूसरा नीचे धक्का देता है और तब तक जब तक पूरी सूची को एकल पंक्ति संख्या में धक्का नहीं दिया जाता है जिसके परिणामस्वरूप रिवर्स ऑर्डर सूची


3
2018-06-13 20:52



आप इसका उपयोग कर सकते हैं '< मैन्युअल रूप से लाइन नंबर दर्ज करने के बजाय। बस पहले एक पंक्ति चयन शुरू करें और निष्पादित करें :'<,'>g/^/m'<। - Palec
@ पालेक आह, बहुत उपयोगी टिप। धन्यवाद! - horta


आदेश :Rev[erse] और आपके लिए वैकल्पिक मैपिंग्स vimrc, इसलिए आपको इस नुस्खा के गैर-स्पष्ट चरणों को याद रखने और निष्पादित करने की आवश्यकता नहीं है:

" Reverse the lines of the whole file or a visually highlighted block.
    " :Rev is a shorter prefix you can use.
    " Adapted from http://tech.groups.yahoo.com/group/vim/message/34305
command! -nargs=0 -bar -range=% Reverse
    \       let save_mark_t = getpos("'t")
    \<bar>      <line2>kt
    \<bar>      exe "<line1>,<line2>g/^/m't"
    \<bar>  call setpos("'t", save_mark_t)

nmap <Leader>r :Reverse<CR>
xmap <Leader>r :Reverse<CR>

(:xmap दृश्य के लिए मानचित्र लेकिन मोड का चयन नहीं करें, जैसा कि :help mapmode-x प्रिंट करने योग्य पात्रों का मानचित्रण करने की सलाह देता है।)

(पर आधारित: http://tech.groups.yahoo.com/group/vim/message/34305 )


2
2018-02-09 11:10



यह स्वीकार्य उत्तर आईएमओ होना चाहिए। सबसे आम तौर पर उपयोगी और मुझे याद रखना नहीं है :'<,'>g/^/m'< :) - Eliot
@ एलियोट, धन्यवाद! :) (मैंने थोड़ा 'बोनस सामग्री' जोड़ा।;)) - Aaron Thoma
मैं इस मामले में चयन शुरू -1 कैसे कह सकता हूं? क्योंकि इस बिंदु पर कदम शुरू होता है। - SergioAraujo
@ सर्वियोअराजू: कुछ ऐसा है :-1,+1Rev तुम क्या ढूंढ रहे हो? जानें कि आप जिस श्रेणी को रिवर्स करना चाहते हैं उसे दृष्टि से चुन सकते हैं, उदाहरण के लिए: V7j:Rev। यदि वह आपके प्रश्न का उत्तर नहीं देता है, तो मुझे यह समझ में नहीं आया है, इसलिए आपको इसे मेरे लिए विस्तारित या दोबारा लिखना होगा। - Aaron Thoma


मान लीजिए कि आप लाइन 3 पर हैं, इसलिए हमारे पास 3 से 6 तक की रेंज है। बस टाइप करें।

:3,6g/^/m2

1
2018-02-17 10:25



आप वर्तमान पंक्ति का नंबर निहित छोड़ सकते हैं: कर्सर के साथ आपकी सीमा की पहली पंक्ति पर, आप इसे छोटा कर सकते हैं :,6g/^/m2; या जब सीमा की आखिरी पंक्ति पर: :3,g/^/m2; तथा :3,6g/^/m2 फ़ाइल में कहीं से भी काम करता है। - Aaron Thoma