পাঠ্য সারিবদ্ধকরণ বজায় রেখে কি ট্যাবগুলিকে স্পেসে রূপান্তর করা সম্ভব?
কেবলমাত্র প্রতিস্থাপন কেবল কার্যকরভাবে কাজ করে যখন কোনও শীর্ষস্থানীয় অক্ষর নেই।
পাঠ্য সারিবদ্ধকরণ বজায় রেখে কি ট্যাবগুলিকে স্পেসে রূপান্তর করা সম্ভব?
কেবলমাত্র প্রতিস্থাপন কেবল কার্যকরভাবে কাজ করে যখন কোনও শীর্ষস্থানীয় অক্ষর নেই।
উত্তর:
আপনি :retab
কমান্ডটি ব্যবহার করতে পারেন । থেকে
:help :retab
<Tab>
প্রদত্ত নতুন ট্যাবস্টপ মানটি ব্যবহার করে সাদা-স্পেসের নতুন স্ট্রিং সহ শ্বেত-স্থানের সমস্ত ক্রম প্রতিস্থাপন করুন । আপনি যদি কোনও নতুন ট্যাবস্টপ আকার নির্দিষ্ট না করেন বা এটি শূন্য হয়, ভিম এর বর্তমান মান ব্যবহার করে'tabstop'
। [...]'expandtab'
চালু রেখে, ভিম সমস্ত ট্যাবগুলিকে যথাযথ সংখ্যক স্পেস সহ প্রতিস্থাপন করে।
নোট করুন যে কমান্ডটি একটি পরিসীমা গ্রহণ করে, সুতরাং আপনি একটি চাক্ষুষ নির্বাচন করতে পারেন এবং তারপরে কেবলমাত্র :retab
নির্বাচিত লাইনগুলি।
আপনি :retab
যেমন ব্যবহার করেছেন তেমন ব্যবহার করতে পারেন , তবে এটি সমস্ত ট্যাবকে স্পেসে বদলে দেবে , কেবলমাত্র লাইনের শুরুতে ট্যাবগুলি নয়
সুতরাং এটি (যেখানে ⇥
একটি ট্যাব চরিত্রটি রয়েছে):
if :; do
⇥echo "⇥hello"
end
এতে পরিবর্তিত হয় (যেখানে ␣
কোনও স্থানের অক্ষর রয়েছে):
if :; do
␣␣echo "␣␣hello"
end
এটি কিছু পরিস্থিতিতে অপ্রত্যাশিত পার্শ্ব-প্রতিক্রিয়া তৈরি করতে পারে এবং ট্যাবগুলিতে স্পেস পরিবর্তন করার সময় এটি আরও বেশি সমস্যা হয়!
সুতরাং, আমি লাইনের শুরুতে কেবল ট্যাব / স্পেসগুলি পরিবর্তন করতে একটি সামান্য ফাংশন লিখেছি :
" :retab changes *everything*, not just start of lines
fun! Retab(expandtab)
let l:spaces = repeat(' ', &tabstop)
" Replace tabs with spaces
if a:expandtab
silent! execute '%substitute#^\%(' . l:spaces . '\)\+#\=repeat("\t", len(submatch(0)) / &tabstop)#e'
" Replace spaces with tabs
else
silent! execute '%substitute#^\%(\t\)\+#\=repeat("' . l:spaces . '", len(submatch(0)))#e'
endif
endfun
এই সংস্করণটির সাহায্যে আপনাকে expandtab
ফাংশন কলটিতে ম্যানুয়ালি নির্দিষ্ট করতে হবে (উদাহরণস্বরূপ, :call Retab(1)
ট্যাবগুলিকে স্পেসে পরিবর্তন করতে), তবে আপনি এটির মতো বর্তমান মানটি &expandtab
(যেমন এটি ইতিমধ্যে যেমন রয়েছে তেমন &tabstop
) গ্রহণ করতেও এটি পরিবর্তন করতে পারেন :retab
। (আমি নিজে এটি নির্দিষ্ট করতে পছন্দ করি)।
a
মধ্যে if a:expandtab
অর্থ কি?
set expandtab
আপনার .vimrc থাকে এবং তারপরে autocmd BufWritePre * :call Retab(&expandtab)
- ইনডেন্টেশন ফাঁকা স্থানের পরিবর্তে ট্যাবগুলিতে পরিবর্তিত হবে।
ভিম !retab
কমান্ড সরবরাহ করে যা <Tab>
নতুন ট্যাবস্টপ (উদাহরণস্বরূপ :set tabstop=2
) প্রদত্ত মানটি ব্যবহার করে হোয়াইট-স্পেসের নতুন স্ট্রিংগুলির সমস্ত সিকোয়েন্সগুলি প্রতিস্থাপন করবে , তবে স্ট্রিংয়ের অভ্যন্তরের সমস্ত ট্যাবগুলি সংশোধন করা যেতে পারে (উদাহরণস্বরূপ একটি সি প্রোগ্রামে, আপনাকে \t
এটি এড়াতে ব্যবহার করা উচিত )!
সুতরাং বিকল্পভাবে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে সমস্ত ট্যাবগুলিকে স্পেসে পরিবর্তন করতে পারেন:
:%s/\t/ /g
বা @ শাহবাজ দ্বারা প্রস্তাবিত হিসাবে :
:%s/^\t\+/ g
সুতরাং ইনডেন্টেশনে ব্যবহৃত ট্যাবগুলি রূপান্তরিত হয়।
ব্যাখ্যা:
%
সম্পূর্ণ বাফার / ফাইল উপস্থাপন করে ( :help :%
)s
বিকল্প হিসাবে দাঁড়িয়েছে ( :help sub-replace-special
)\t
, বা ^I
ট্যাব জন্য দাঁড়িয়ে
- প্রতি ট্যাব হিসাবে আপনার প্রয়োজন যতগুলি স্পেস ব্যবহার করুনg
- মানে বিশ্বব্যাপী, এবং এটি একই লাইনে একাধিক ট্যাব রূপান্তর করবেতারপর সমগ্র ফাইলের খাঁজ সংশোধন করার, আপনি চেষ্টা করতে পারেন: gg=G। চেক করুন: আরও তথ্যের জন্য খারাপভাবে ইনডেন্ট কোডটি পুনরায় যুক্ত করা ।
ট্যাবগুলির পরিবর্তে ডিফল্টরূপে স্পেস ব্যবহার করতে, আপনার .vimrc
ফাইলে নিম্নলিখিত সেটিংস যুক্ত করতে হবে:
set tabstop=2 " (ts) width (in spaces) that a <tab> is displayed as
set expandtab " (et) expand tabs to spaces (use :retab to redo entire file)
set shiftwidth=2 " (sw) width (in spaces) used in each step of autoindent (aswell as << and >>)
বিকল্প সমাধান ব্যবহার করা হয় tidy
সম্পর্কিত:
%s/^\t\+/ g
যাতে ইনডেন্টেশনে ব্যবহৃত ট্যাবগুলি রূপান্তরিত হয়। এছাড়াও, gg=G
পাইথনের মতো ভাষা নিয়ে বিপর্যয়কর হতে পারে।
ব্যবহার করার চেষ্টা করুন:
expand -t 4 input_filename output_filename
expand
ট্যাবগুলিকে স্পেসে রূপান্তর করতে একটি কমান্ড-লাইন সরঞ্জাম, যা আপনি শেল থেকে বা এর সাথে চালাতে পারেন :!expand
।
এটি পসিক্সে রয়েছে তাই এটি বেশিরভাগ সিস্টেমে উপলব্ধ। unexpand
উল্টো, উপায়ে করতে হবে।
expand
?
:%!expand -t 4
ভিএম এর ভিতরে করতে পারে । আরও ভাল, আপনি বর্তমান শিফট প্রস্থ বিকল্পটিও ব্যবহার করতে পারেন: :exe '%!expand -t ' . &shiftwidth
সম্পূর্ণতার জন্য, =
ইন্ডেন্টেশনগুলি ঠিক করার জন্যও ব্যবহার করা যেতে পারে, আপনি নির্দিষ্ট করার পরে ট্যাবগুলিকে ফাঁকা স্থান দিয়ে প্রতিস্থাপন করা হয়। সাধারণ মোডে, আপনি টাইপ করে এটি করতে পারেন :set expandtab
। তারপরে =
দুটি উপায়ে ব্যবহার করা যেতে পারে:
=
নির্বাচিত কোড ব্লকের ইন্ডেন্টেশনগুলি ঠিক করবে।gg=G
পুরো ফাইলটি ঠিক করে দেবে, যেখানে gg
কার্সারটি ফাইলের শুরুতে সরিয়ে নিয়ে যায়, তারপরে =
প্রয়োগ করা হয় এবং G
কার্সারটিকে ফাইলের শেষের দিকে নিয়ে যায়।তথ্যসূত্র: লিঙ্ক
:h vim-faq
এবং অনুসন্ধান করুন/tab characters
। মুখস্থ করা ট্যাগ হার্ড:h faq-14.16
।