আমি কীভাবে নির্বাচিত লাইনগুলিকে বিমগুলিতে বিপরীত করব?


94

উদাহরণস্বরূপ, যদি আমার নীচে চারটি লাইন থাকে:

প্রথম লাইন
দ্বিতীয় লাইন
তৃতীয় লাইন
চতুর্থ লাইন

আমি তাদের উল্টো করতে চাই

চতুর্থ লাইন
তৃতীয় লাইন
দ্বিতীয় লাইন
প্রথম লাইন

আমি কীভাবে এটি ভিমে করতে পারি?




1
:command! -bar -range=% Reverse <line1>,<line2>global/^/m<line1>-1 vi.stackexchange.com/a/2107/10254
কুইটজি

উত্তর:


86

কোনও ফাইলের সমস্ত লাইন বিপরীত করতে,

:g/^/m0

একটি ব্যাখ্যা জন্য দেখুন

:help 12.4

যা দেখায় যে কীভাবে কেবল কয়েকটি রেখার বিপরীত করতে হয়।


12
সঠিক সহায়তা বিভাগে দুর্দান্ত টিপ! সংক্ষিপ্তসার হিসাবে: ১. আপনি যে বিপরীতমুখী চান সর্বশেষ লাইনে একটি মার্কার সেট করুন (আমি চিহ্নিতকারীটির নাম 'এ' ব্যবহার করে ma), ২. ব্লকের প্রথম লাইনে কার্সারটি সরান, ৩. টাইপ করুন:'a,.g/^/m 'a
ব্রেন্ট ফাউস্ট

68

, এর পর পছন্দসই লাইনের নির্বাচন আঘাত !, এবং তার ফলে প্রম্পট পাইপে মাধ্যমে লাইন tacএকটি লা :'<,'>!tac। দেখুন man tacআরো বিস্তারিত জানার জন্য।


4
লাইনগুলি নির্বাচন করতে, shift+vভিজ্যুয়াল লাইন মোডে প্রবেশ করতে ব্যবহার করুন, তারপরে jনির্বাচনের সাথে লাইন যুক্ত করুন।
উইসবাকী

আমি নিশ্চিত করতে পারি যে এটি উইন্ডোতেও কাজ করে gvim! অন্যথায়, আপনাকে নিখুঁত লাইন নম্বর ব্যবহার করতে হবে (সম্ভবত আপনি আপেক্ষিক ব্যবহার করতে পারেন, তবে আপনাকে সতর্কতা অবলম্বন করতে হবে) এর সাথে :g/^/m0(যা মনে রাখা সত্যিই খুব কঠিন) ... তাই মূলত, ট্যাকটি কোনও প্ল্যাটফর্মই হোক না কেন, ভিএমের সাথে থাকা উচিত আপনি চালু আছেন, তবে এটি 100% ভিমস্ক্রিপ্ট নয়, তবে কে যত্নশীল: P
dylnmc

ট্যাক পুরোপুরি নেটিভ ভিম হ্যান্ডলিং নয়, তবে, 'এম'উভ কমান্ডটি একটি লাইন নম্বর নেয় এবং এটি সর্বদা যুক্তিসঙ্গত হয় না। আমি প্রায়শই একটি ব্যাপ্তির অংশ হিসাবে চিহ্ন ব্যবহার করি, তাই :.,'a!tacসর্বনিম্ন প্রচেষ্টা নিয়ে কাজ করে।
স্টাডোগ

ব্যবহারের পরে shift+v, আপনি }পরবর্তী অনুচ্ছেদে বা খালি উল্লম্ব স্থান পর্যন্ত পৌঁছাতে ব্যবহার করতে পারেন । এছাড়াও man tac: concatenate and print files in reverse,।
নিলন

33

ম্যাক ওএস এক্সে tacউপস্থিত নেই, তবে আপনি tail -rএকই প্রভাবটি ব্যবহার করতে পারেন :

:%!tail -r

এটি ভিজ্যুয়াল মোডের জন্যও দুর্দান্তভাবে কাজ করে:

:'<,'>!tail -r

এর ম্যানপেজ থেকে অংশ tail(1):

-R বিকল্পটি ইনপুটটিকে রেখার দ্বারা বিপরীত ক্রমে প্রদর্শিত হতে পারে। অতিরিক্তভাবে, এই বিকল্পটি -b, -c এবং -n বিকল্পগুলির অর্থ পরিবর্তন করে। -R বিকল্পটি সুনির্দিষ্ট করা হলে, এই বিকল্পগুলি প্রদর্শন করতে বাইটস, লাইন বা 512-বাইট ব্লকগুলির সংখ্যা নির্দিষ্ট করে, পরিবর্তনের জন্য ইনপুটটির শুরু বা শেষ থেকে বন্টন, লাইন বা ব্লকগুলির পরিবর্তে প্রদর্শিত হবে of -R বিকল্পের জন্য ডিফল্ট হ'ল সমস্ত ইনপুট প্রদর্শন করা।


3
অসাধারণ! সুতরাং ওএস এক্স এর অধীনে 'ট্যাক' সরবরাহ করতে:alias tac='tail -r'
ব্রেন্ট ফাউস্ট

4
আপনি brew install coreutilsএবং ব্যবহার করতে পারেন gtac
অ্যান্ড্রু মার্শাল

1
জিনিয়াস। কখনও ব্যবহারের কথা ভাবেননি! এই ধরণের ভিজ্যুয়াল লাইনের হেরফেরের জন্য আদেশগুলি commands
চার্লি ডালাসাস

3

ভিজুয়াল মোডের সাথে আরও আরামদায়কদের জন্য:
1. আপনি যে নির্বাচনটি ব্যবহার করে উল্টাতে চান তার উপরে লাইন নম্বরটি চিহ্নিত করুন :set nu
২. Shift-Vআপনি যে ফ্লিপ করতে চান তা নির্বাচন হাইলাইট করতে (ভিজ্যুয়াল মোড)।
:g/^/m <Line number from step 1>

দ্রষ্টব্য যে ভিজ্যুয়াল মোডে এটি স্বয়ংক্রিয়ভাবে প্রদর্শিত হবে :'<,'>g/^/m <Line number>যখন আপনি 3 থেকে কমান্ডটি টাইপ করবেন।

এই কমান্ডটি আপনি যে লাইন নম্বরটি দিয়েছেন সেটিকে একবারে নির্বাচনকে এক লাইনে সরানোর মাধ্যমে কাজ করে। যখন দ্বিতীয় আইটেমটি প্রদত্ত রেখা সংখ্যায় ধাক্কা দেয়, তখন এটি প্রথমটি নীচে লাইন নম্বর + 1 এ ধাক্কা দেয় এবং তারপরে তৃতীয়টি প্রথমটি এবং দ্বিতীয়টি নীচে ঠেলে দেয় এবং যতক্ষণ না পুরো তালিকাটি একক লাইন সংখ্যার দিকে ধাক্কা দেয় যার ফলস্বরূপ একটি হয় বিপরীত আদেশ তালিকা।


4
আপনি '<নিজে লাইন নম্বর প্রবেশ করার পরিবর্তে ব্যবহার করতে পারেন । কেবল এক লাইনের আগে নির্বাচন শুরু করুন এবং চালিত করুন :'<,'>g/^/m'<
প্লেক

3

আপনার জন্য একটি কমান্ড :Rev[erse]এবং alচ্ছিক ম্যাপিংস 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 )


এটি গ্রহণযোগ্য উত্তর আইএমও হওয়া উচিত। সর্বাধিক সাধারণভাবে দরকারী এবং আমার মনে রাখতে হবে :'<,'>g/^/m'<না :)
এলিয়ট

1
এলিয়ট, ধন্যবাদ! :) (আমি কিছুটা 'বোনাস সামগ্রী' যোগ করেছি;)))
অ্যারন থোমা

এই ক্ষেত্রে আমি কীভাবে বাছাই শুরু -1 বলতে পারি? কারণ সরানো এই সময়ে শুরু হয়।
সেরজিওআরাউজো

@ সেরজিওআরাউজো: :-1,+1Revআপনি যা খুঁজছেন তার মতো কিছু আছে কি? জানি তুমি চাক্ষুষরূপে পরিসীমা আপনি বিপরীত, যেমন চান তা নির্বাচন করুন করতে পারেন: V7j:Rev। যদি এটি আপনার প্রশ্নের উত্তর না দেয় তবে আমি এটি বুঝতে পারি না, সুতরাং আপনার জন্য আমার এটির বিশদ বিবরণ বা পুনরায় বিবরণ দেওয়া দরকার।
অ্যারন থোমা

1

বলুন যে আপনি 3 লাইনে আছেন, সুতরাং আমাদের 3 থেকে 6 রেঞ্জ রয়েছে have কেবল টাইপ করুন।

:3,6g/^/m2

1
আপনি বর্তমান লাইনের নম্বর অন্তর্নিহিত ছেড়ে দিতে পারেন: আপনার সীমার প্রথম লাইনে কার্সারের সাহায্যে আপনি সংক্ষিপ্ত করতে পারেন :,6g/^/m2; বা যখন রেঞ্জের শেষ লাইনে থাকবে :3,g/^/m2:; এবং :3,6g/^/m2ফাইলের যে কোনও জায়গা থেকে কাজ করে।
অ্যারন থোমা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.