কোনও স্থান তৈরি না করে লাইনে কীভাবে যোগদান করবেন?


72

Jলাইনে যোগদানের জন্য স্ট্যান্ডার্ড কমান্ড নতুন স্থানের অক্ষর (গুলি) একটি স্থানের সাথে প্রতিস্থাপন করে। 'সাহিত্য' সম্পাদনা করার সময় এটি দরকারী তবে আমি যদি অতিরিক্ত অতিরিক্ত স্থান অপসারণ করতে ভুলে যাই তবে হাতে কলমে কোনও হেক্স ডাম্প সম্পাদনা করলে সমস্যা হতে পারে।

তাদের মধ্যে কোনও স্থান তৈরি না করেই দুটি লাইনে যোগ দেওয়ার জন্য কি একটি দ্রুত এবং সহজ পদ্ধতি আছে?

উত্তর:


86

gJসমন্বয় এই আছে; থেকে :help gJ:

সর্বনিম্ন দুটি লাইনের সাথে [গণনা] লাইনে যোগ দিন। কোনও স্থান সন্নিবেশ বা সরিয়ে ফেলবেন না।

আপনি Jযদি একটি কীস্ট্রোকটি সংরক্ষণ করতে চান তবে আপনি এটিকে পুনরায় ফিরিয়ে দিতে পারেন:

:nnoremap J gJ

মনে রাখবেন এটি কোনও ফাঁকা স্থান সরিয়ে দেয় না , সুতরাং যদি বর্তমান লাইনটি কোনও স্পেস দিয়ে শেষ হয় বা পরবর্তী লাইনটি এক বা একাধিক স্পেস দিয়ে শুরু হয় তবে সেগুলি যেমন রয়েছে তেমনই ছেড়ে দেওয়া হবে

তাই:

Hello
    world

হয়ে:

Hello    world

আমরা এই ক্ষেত্রে ব্যবহার করতে পারিJx , তবে তা হবে, তবে এটি Helloworldসব ক্ষেত্রে কার্যকর হবে না; সহায়তা থেকে:

সর্বনিম্ন দুটি লাইনের সাথে হাইলাইট করা লাইনে যোগদান করুন। ইনডেন্টটি সরান এবং দুটি স্পেস পর্যন্ত সন্নিবেশ করান

[...]

"জিজে" ব্যতীত এই কমান্ডগুলির স্থানে একটি স্থান সন্নিবেশ করানো উচিত যদি না সেখানে সাদা স্থান না থাকে বা পরবর্তী লাইনটি ')' দিয়ে শুরু না হয়।

সুতরাং কিছু ক্ষেত্রে একাধিক স্থান বা কোনও স্থান .োকানো হয় না। আমি যতদূর দেখতে পাচ্ছি, এই আচরণটি পরিবর্তন করার কোনও সহজ উপায় নেই; আমি gJসবসময় ফাঁকা ছাড়াই যোগদানের জন্য সংশোধন করার জন্য একটি ফাংশন তৈরি করেছি :

" Like gJ, but always remove spaces
fun! JoinSpaceless()
    execute 'normal gJ'

    " Character under cursor is whitespace?
    if matchstr(getline('.'), '\%' . col('.') . 'c.') =~ '\s'
        " When remove it!
        execute 'normal dw'
    endif
endfun

" Map it to a key
nnoremap <Leader>J :call JoinSpaceless()<CR>

আরও দেখুন: :help J,:help 'joinspaces'


এই ফাংশনটি ব্যবহার করার সময় কার্সার অবস্থান ধরে রাখতে কিছু "সংরক্ষণ করুন" ফাংশন ব্যবহার করা কি সম্ভব বা আমি এই ফলাফলটি কীভাবে পাব?
সেরজিওআরাউজো

8

আপনি চেষ্টা করতে পারেন এমন অন্য কৌশলটি হ'ল প্রতিস্থাপনটি ব্যবহার করা। কখনও কখনও এটি দরকারী হতে পারে।

%s/$\n//g

দৃশ্য: শেষ চরিত্রটি মুছুন এবং পরবর্তী লাইনের সাথে যোগ দিন:

%s/=$\n\(.\)/\1/g

উদাহরণ স্বরূপ,

xxxx=
123

হয়ে:

xxxx123

3

একটি ম্যাক্রো তৈরি করুন এবং এটি পুনরায় ব্যবহার করুন:

qaJxq

আপনি যেখানে কোনও স্থান ছাড়াই দুটি লাইনে যোগদান করতে চান সেখানে aব্যবহার করে ম্যাক্রোটিকে পুনরায় খেলুন @a

@@পূর্ববর্তী ম্যাক্রোর পুনরাবৃত্তি করবে। সুতরাং আপনি @একাধিক লাইনে যোগদানের জন্য ধরে রাখতে পারেন ।


1
@aআপনি টাইপ করতে পারেন কেন টাইপ করুন Jx? কী প্রেস এবং SHIFT প্রেসের একই সংখ্যা!
শাহবাজ

2
@ শাহবাজ সম্ভবত শেষ লাইনের কারণে: "আপনি কেবল @" ধরে রাখতে পারবেন
মুরু

1
@ মুরু, সত্য!
শাহবাজ

4
এটি এটিকে পুনরাবৃত্তযোগ্য কমান্ডও তৈরি করে, সুতরাং আপনি 3@a3 টি লাইনে যোগ দিতে ব্যবহার করতে পারেন , যেখানে 3Jx3 টি লাইনের সাথে স্পেস যুক্ত হবে এবং দ্বিতীয় এবং তৃতীয় লাইনের মধ্যবর্তী স্থানটি মুছে ফেলবে এবং অন্যান্য লাইনের মধ্যে ফাঁকা স্থান ছেড়ে যাবে।
হেইগিন

1

সর্বদা একটি একক স্থানের সাথে যোগ দিতে:

nmap J gJi <ESC>ciW <ESC>

কোনও স্থান ছাড়াই যোগ দেওয়ার জন্য (ট্রেলিং + শীর্ষস্থান স্পেস সরিয়ে দেয়):

nmap <C-J> gJi <ESC>diW

1
এই সাইটে আপনাকে স্বাগতম! আপনার ম্যাপিংগুলি আমাকে কিছুটা বেশি ইঞ্জিনিয়ারড দেখায়, তারা কীভাবে কাজ করে সে সম্পর্কে আপনি আরও কিছু ব্যাখ্যা যুক্ত করতে পারলে এটি সহায়ক হবে।
statox

1

আপনি যে লাইনগুলিকে মার্জ করতে চান তা নির্বাচন করুন, সাধারণ মোডে কোলন টাইপ করে একটি প্রাক্তন কমান্ড প্রবেশ :করুন। তারপরে এই কমান্ডটি টাইপ করুন:

s/$\n\s*//gc

পুরো কমান্ডটি একইভাবে দেখা উচিত:

:'<,'>s/$\n\s*//gc

এটি আসলে @ ইনটারপাওয়ারের কমান্ডের একটি টুইট সংস্করণ যা স্পেস-ইনডেন্টেশনগুলির পাশাপাশি নিউলাইন চরিত্রগুলিকে প্রতিস্থাপন করে।

ব্যাখ্যা:

  • '<,'> এর অর্থ হ'ল আমরা ভিজ্যুয়াল মোডে নির্বাচিত কেবলমাত্র লাইনগুলিকেই পরিবর্তন করব।

  • /$\n\s*একটি রেজেক্স প্যাটার্ন। আমরা এমন একটি ম্যাচ খুঁজছি $যা একটি নতুন লাইন চরিত্রের সাথে শেষ হয় \nএবং *এরপরে অ-নির্ধারিত শ্বেত স্পেস রয়েছে ।

  • s/pattern//gcপ্রতিটি প্যাটার্ন সন্ধান করতে এবং নিশ্চিতকরণে একটি খালি অক্ষর দিয়ে এটি প্রতিস্থাপনের জন্য বিকল্প কমান্ড ।

ভিমের নিয়মিত অভিব্যক্তির জন্য পতাকা এবং মেটাচার্যাক্টরগুলি সম্পর্কে আরও সন্ধান করার জন্য ভিম রেফারেন্সের এই অধ্যায়টি একবার দেখুন


2
হাই ইউবিক, ভি এবং ভিমে আপনাকে স্বাগতম ! আপনি সেখানে বেশ সুন্দরভাবে লিখিত উত্তর পেয়েছেন; এই জন্য কুডোস। আমার এক নীটপিকটি হল যে ভিএম নিয়মিত এক্সপ্রেশন = / = অজগর নিয়মিত এক্সপ্রেশন এবং কখনও কখনও এটি ব্যবহারকারীদের জন্য বিভ্রান্ত হয়। পরিবর্তে Vim regex এর জন্য সহায়তা দস্তাবেজের লিঙ্ক হতে পারে?
ডি বেন নোবল

2
দ্বিতীয় নীট: আপনি যে উত্তরটি উল্লেখ করেছেন তা @ ইনটার পাওয়ার দ্বারা লিখেছিলেন এবং পিটার সম্পাদনা করেছিলেন।
ডি বেন নোবল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.