ট্যাব কী == 4 স্পেস এবং ভিমে কোঁকড়ানো ধনুর্বন্ধনী পরে স্বয়ংক্রিয় ইনডেন্ট


1265

আমি কিভাবে করতে পারি ষষ্ঠ - তেজ ট্যাব (! ট্যাবে স্পেস রূপান্তর, খারাপ), ট্যাব কী == 4 স্পেস, মত কোঁকড়া বক্রবন্ধনী ব্লক পর স্বয়ংক্রিয়ভাবে ইন্ডেন্ট কোড তোলে কখনো ব্যবহার গিয়ে Emacs করে?

এছাড়াও, আমি এই সেটিংসটি কীভাবে সংরক্ষণ করব যাতে আমাকে আর কখনও ইনপুট না করতে হয়?

আমি এর সাথে সম্পর্কিত অন্যান্য প্রশ্নগুলি দেখেছি, তবে সবসময় মনে হয় যা আমি চাই তা থেকে কিছুটা দূরে থাক।


উত্তর:


1881

নীচে কয়েকটি উত্তরে নির্দেশ করা হয়েছে যে, পছন্দসই পদ্ধতিটি এখন স্মার্টইন্ডেন্ট ব্যবহার না করে বরং নিম্নলিখিতটি (আপনার .vimrc এ ) ব্যবহার করুন:

filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab

আপনার .vimrc: ফাইলটিতে:

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

সহায়তা ফাইলগুলি অভ্যস্ত হতে খানিকটা সময় নেয় তবে আপনি যত বেশি পড়বেন, ভিম ততই ভাল পাবেন:

:help smartindent

আরও ভাল, আপনি বহনযোগ্যতার জন্য আপনার উত্সে এই সেটিংস এম্বেড করতে পারেন:

:help auto-setting

আপনার বর্তমান সেটিংস দেখতে:

:set all

হিসাবে graywh মন্তব্য আউট পয়েন্ট, smartindent cindent দ্বারা প্রতিস্থাপিত হয়েছে যেটি "ওয়ার্কস আরো চালাকি করে", যদিও এখনও প্রধানত সঙ্গে ভাষার জন্য সি-মত শব্দবিন্যাস:

:help C-indenting


4
আপনার যদি প্রসারিত ট্যাব সেট থাকে তবে এটি ফাঁকা স্থান ব্যবহার করা উচিত। আপনি কি "সামঞ্জস্যপূর্ণ" সেট করেন? এর "অফ" এর ডিফল্টটিতে এক্সটেনডট্যাব পুনরায় সেট করা সহ বিভিন্ন পার্শ্ব প্রতিক্রিয়া রয়েছে
কেন

60
দুঃখিত, তবে স্মার্টইন্ডেন্টটি সিনডেন্ট দ্বারা প্রতিস্থাপন করা হয়েছিল, যা কেবলমাত্র সি-স্টাইল সিনট্যাক্সের জন্য উপযুক্ত। অন্য ভাষাগুলির সাথে কাজ করার সময় আপনার ভিএমআরসি-তে কোনওটি চালু করা সমস্যা হতে পারে। পরিবর্তে "ফাইল টাইপ ইন্ডেন্ট অন" ব্যবহার করুন।
ধুসর

2
ওয়েল, smartindent হয় এছাড়াও শুধুমাত্র সি-শৈলী সিনট্যাক্স এবং মূলত অসমর্থিত হয়েছে।
ধূসর 16

4
যদি আমি প্রসারিত ট্যাব সক্ষম করি, তবে কি কোনওভাবেই পাঠ্যে ট্যাব অক্ষরটি ইনপুট করার কোনও উপায় আছে?
ড্যানিয়েলে সেগাটো

3
@ ড্যানিয়েলেসেগাটো <সিটিআরএল ভি> <ট্যাব> সন্নিবেশ মোডে কাজ করা উচিত: স্ট্যাকওভারফ্লো
কেন

236

সম্পর্কিত, যদি আপনি কোনও ফাইল খোলেন যা ধরে নিয়েছে যে উভয় ট্যাব এবং স্পেস ব্যবহার করে

set expandtab ts=4 sw=4 ai

আপনি সমস্ত ট্যাব এর সাথে পুরো ফাইলের ফাঁকে ফাঁকা জায়গাটি দিয়ে প্রতিস্থাপন করতে পারেন

:%retab

10
এফওয়াইআই, আপনি যদি চান না যে আপনার ট্যাবটি ফাঁকা স্থান দ্বারা প্রতিস্থাপন করা হয় তবে প্রসারিত ট্যাব লাইনটি সরিয়ে দিন।
এানো

6
ট্যাবগুলি কি সাদা স্থান নয়? ;-)
রব ওয়েলস

11
@ রব-ওয়েলস: আমি "হোয়াইটস্পেস" পরিবর্তন করে "স্পেসে" রেখেছি। তুমি কি এখন খুশী? ;-)
নেটজেফ

আপনি কি বলতে পারেন যে প্রথম লাইনের অর্থ কী?
মনিকা এর মামলা মামলা

2
ট্যাবগুলি ফাঁকা স্থানগুলিতে প্রসারিত করা হয়েছে কিনা তা প্রসারিত ট্যাব নির্ধারণ করে। ts = ট্যাবস্টপ = একটি <ট্যাব> ফাইলের মধ্যে গণ্য করা ফাঁকের সংখ্যা। sw = shiftwidth = (অটো) ইনডেন্টের প্রতিটি ধাপে ব্যবহারের জন্য স্পেসের সংখ্যা। ai = autoindent = নতুন লাইন শুরু করার সময় বর্তমান লাইন থেকে অনুলিপি অনুলিপি করুন।
ম্যাকমেকারসন

89

ফাইল টাইপ-নির্দিষ্ট ইন্ডেন্টেশন পাওয়ার সর্বোত্তম উপায় filetype plugin indent onহ'ল আপনার ভিএমআরসি ব্যবহার করা। তারপরে আপনি set sw=4 sts=4 et.vim / ftplugin / c.vim এর মতো জিনিসগুলি নির্দিষ্ট করতে পারেন , উদাহরণস্বরূপ, সমস্ত ফাইল সম্পাদনা করার জন্য সেগুলি বিশ্বব্যাপী না করে এবং অন্যান্য নন-সি প্রকারের সিনট্যাক্সগুলি সঠিকভাবে ইন্টেন্ট করা হবে (এমনকি লিসপস)


9
আইএমএইচও, যে উত্তরটি সঠিক হিসাবে চিহ্নিত হয়েছে তার চেয়ে ভাল। সুপারসিডস সিন্ডেন্ট এবং স্মার্টিনডে ফাইল টাইপ ইন্ডেন্ট।
0fnt

62

বেশিরভাগ ফাইলগুলিতে 4-স্পেস ট্যাব রাখতে, মেকফিলগুলিতে আসল 8-প্রশস্ত ট্যাব চর এবং সি / সি ++ সহ বিভিন্ন ফাইলে স্বয়ংক্রিয় ইনডেন্টিং এটিকে আপনার ~/.vimrcফাইলে রাখুন:

" Only do this part when compiled with support for autocommands.
if has("autocmd")
    " Use filetype detection and file-based automatic indenting.
    filetype plugin indent on

    " Use actual tab chars in Makefiles.
    autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab
endif

" For everything else, use a tab width of 4 space chars.
set tabstop=4       " The width of a TAB is set to 4.
                    " Still it is a \t. It is just that
                    " Vim will interpret it to be having
                    " a width of 4.
set shiftwidth=4    " Indents will have a width of 4.
set softtabstop=4   " Sets the number of columns for a TAB.
set expandtab       " Expand TABs to spaces.

তোমার দরকার নেই কেন else? আমার কাছে শেষ লাইনের মতো মনে হয় সমস্ত ক্ষেত্রেই
মেকফিল

6
হাই @ লুসিডব্রোট, "অটোকিমডি ফাইলটাইপ মেক" বিবৃতিটি মূলত যখনই কোনও মেকফাইল খুলবে তখন কিছুটা সেটিংস ব্যবহার করতে বলে। যদিও এর নীচের লাইনগুলি ডিফল্ট সেট করছে। অন্য কথায়, "ট্যাবস্টপ = 8 ..." সেটিংসটি ফাইলটি খোলার পরে পরে প্রয়োগ করা হবে, এবং "ট্যাবস্টপ = 4 ..." সেটিংস যা আরম্ভের ক্ষেত্রে প্রযোজ্য তা ওভাররাইট করবে।
শেরভিন ইমামি

56

উবুন্টুর মতো অনেক লিনাক্স সিস্টেমে .vimrcফাইলটি ডিফল্টরূপে অস্তিত্বহীন, তাই আপনাকে প্রথমে এটি তৈরি করার পরামর্শ দেওয়া হয়।

.viminfoহোম ডিরেক্টরিতে বিদ্যমান ফাইলটি ব্যবহার করবেন না । এটি একটি ভিন্ন উদ্দেশ্যে ব্যবহৃত হয়।

পদক্ষেপ 1: আপনার হোম ডিরেক্টরিতে যান

cd ~

পদক্ষেপ 2: ফাইলটি তৈরি করুন

vim .vimrc

পদক্ষেপ 3: উপরে বর্ণিত কনফিগারেশন যুক্ত করুন

filetype plugin indent on
set tabstop=4
set shiftwidth=4
set expandtab

পদক্ষেপ 3: ফাইল টিপে Shift+ টিপুন ZZ


11
Shift + ZZএটি ব্যবহার না করবেন .swp ফাইল তৈরি করবে। ব্যবহার wq
shas

6
@ শাস: "জেডজেড" ": এক্স" এর সমান , যা ": ডব্লিউকিউ " এর সমান , কেবলমাত্র যদি ফাইলটি পরিবর্তন করা হয় তবে এটি সংরক্ষণ করে ... ( Ctrl-Zআরেকটি গল্প ...)
গার্ট ভ্যান ড্যান বার্গ

1
@ যেগুলি কেবল অসত্য। আপনি যদি সম্পাদনা সেসির জন্য কোনও অদলবদল ফাইলটি না চান, আপনাকে চালাতে হবে vim -n <file>। একটি সোয়াপ ফাইল এমন কিছু নয় যা সময় সাশ্রয়ের সময় উত্পন্ন হয়; হ'ল সোয়াপ ফাইলগুলি হঠাৎ করে বন্ধ হয়ে যাওয়া সম্পাদনা সেশনগুলি পুনরুদ্ধারে কার্যকর হওয়ার কারণে এটি তার উদ্দেশ্যকে আরও পরাজিত করবে।
কাজ

32

প্রস্তাবিত উপায় হ'ল ফাইল টাইপ ভিত্তিক ইনডেন্টেশন এবং কেবলমাত্র স্মার্টিনডেন্ট এবং সিনডেন্ট ব্যবহার করা যদি তা যথেষ্ট না হয়।

আপনার .vimrc এ নিম্নলিখিতগুলি যুক্ত করুন

set expandtab
set shiftwidth=2
set softtabstop=2
filetype plugin indent on

আশা করি এটি অন্যরকম উত্তর হিসাবে সহায়তা করবে।




6

স্বয়ংক্রিয় ইনডেন্ট বর্তমান সিনট্যাক্স মোডের উপর ভিত্তি করে। আমি জানি যে আপনি যদি Foo.java সম্পাদনা করছেন, তবে একটিতে প্রবেশ করুন {এবং Enterনীচের লাইনে ইনডেন্টগুলি মারছেন ।

ট্যাব হিসাবে, দুটি সেটিংস আছে। ভিমের মধ্যে, একটি কোলন টাইপ করুন এবং তারপরে "সেট করুন ট্যাবস্টপ = 4" যা চারটি স্পেস হিসাবে প্রদর্শন করতে ট্যাবগুলি সেট করবে। আবার কোলন হিট করুন এবং "সেট প্রসারিত ট্যাব" টাইপ করুন যা ট্যাবগুলির জন্য স্পেস সন্নিবেশ করবে।

আপনি আপনার হোম ডিরেক্টরিতে একটি .vimrc (বা উইন্ডোতে _ভিমার্ক) এ এই সেটিংসটি রাখতে পারেন, সুতরাং আপনাকে কেবল একবার সেগুলি টাইপ করতে হবে।


0

প্রথমত, Tabম্যানুয়াল ইন্ডেন্টেশনের জন্য ভিমে কীটি ব্যবহার করবেন না । ম্যানুয়ালি ইনডেন্টেশনের পরিমাণ বাড়িয়ে বা হ্রাস করার জন্য ভিমের সন্নিবেশ মোডে একজোড়া কমান্ড রয়েছে। এই আদেশগুলি Ctrl-Tএবং Ctrl-D। এই কমান্ডগুলি tabstop, shiftwidthএবং এর মানগুলি পর্যবেক্ষণ করেexpandtab , এবং স্পেস এবং ট্যাব (ট্যাব সর্বোচ্চ সংখ্যক স্পেস প্রয়োজনীয় সংখ্যা থাকে) সঠিক মিশ্রণ বজায় রাখা।

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

আপনি বিরক্ত করার Ctrl-Tপরিবর্তে Tab, আপনি এটি পুনরায় তৈরি করতে পারেন:

:imap <Tab> ^T

আপনি ডেলিডেন্টটি করতে পুনরায় তৈরি Shift-Tabকরতে পারেন Ctrl-D:

:imap <S-Tab> ^D

এখানে ^ T এবং ^ D হ'ল আক্ষরিক নিয়ন্ত্রণ অক্ষর যা .োকানো যেতে পারে Ctrl-VCtrl-T

এই ম্যাপিংটি জায়গায় রেখে, আপনি এখনও বাফার ব্যবহার করে আক্ষরিক ট্যাব টাইপ করতে পারেন Ctrl-VTab। নোট করুন যে আপনি যদি :set expandtabএটি করেন তবে এটি চালু থাকলেও আপনি একটি অপরিবর্তিত ট্যাব অক্ষর পাবেন।

<Tab>মানচিত্রে অনুরূপ প্রভাব ব্যবহার করে অর্জিত হয় :set smarttab, এটি স্মার্ট আচরণের জন্য একটি লাইনের সামনের অংশে ব্যাকস্পেস তৈরি করে।

ইন smarttabমোড, যখন Tabএকটি লাইন শুরুতে ব্যবহার করা হয়, এটা কোনো বিশেষ অর্থ রয়েছে। যে আমার উপরে ম্যাপিং থেকে আলাদা Tabকরার জন্য Ctrl-T, কারণ একটিCtrl-T একটি লাইন (সন্নিবেশ মোডে) এ ব্যবহৃত যে কোন জায়গায় যে লাইন এর খাঁজ বৃদ্ধি হবে।

অন্যান্য দরকারী ম্যাপিংগুলি হতে পারে:

:map <Tab> >
:map <S-Tab> <

এখন আমরা কিছু লাইন নির্বাচন করার মতো জিনিসগুলি করতে পারি এবং Tabসেগুলিতে entোকাতে হিট করি। অথবা Tabএর ইনডেন্টেশন বাড়াতে একটি লাইনে দু'বার চাপুন (কমান্ড মোডে)।

আপনি সঠিক খাঁজ ব্যবস্থাপনা কমান্ডগুলি ব্যবহার করেন, তাহলে সবকিছু তিন পরামিতি দ্বারা নিয়ন্ত্রিত হয়: shiftwidth, tabstopএবং expandtab

shiftwidthপরামিতি আপনার খাঁজ আকার নিয়ন্ত্রণ করেন; আপনি যদি চারটি স্পেস ইন্ডেন্ট, ব্যবহার :set shiftwidth=4বা সংক্ষিপ্ত বিবরণ চান :set sw=4

যদি কেবল এটি করা হয় তবে স্পেস এবং ট্যাবগুলির মিশ্রণ ব্যবহার করে ইনডেন্টেশন তৈরি করা হবে, কারণ noexpandtabএটি ডিফল্ট। ব্যবহার :set expandtab। এটি ট্যাব অক্ষরগুলির কারণ হয়ে থাকে যা আপনি বাফারে টাইপ করে ফাঁকা স্থানগুলিতে প্রসারিত করতে এবং ভিম-পরিচালিত ইনডেন্টেশনটির জন্য কেবল ফাঁকা স্থান ব্যবহার করতে পারেন।

কখন expandtabচালু থাকে এবং আপনি যদি যথাযথ ভিম প্রক্রিয়াগুলির মাধ্যমে আপনার ইন্ডেন্টেশন পরিচালনা করেন তবে এর মান tabstopঅপ্রাসঙ্গিক হয়ে যায়। ট্যাবগুলি ফাইলে ঘটতে থাকলে কীভাবে উপস্থিত হয় তা এটি নিয়ন্ত্রণ করে। যদি আপনার কাছে থাকে set tabstop=8 expandtabএবং তারপরে ফাইলটিতে কোনও হার্ড ট্যাব ছিটিয়ে থাকে তবে Ctrl-VTabএটি যথারীতি পরবর্তী 8-কলাম-ভিত্তিক ট্যাব অবস্থানে একটি প্রান্তিককরণ তৈরি করবে।


আপনার সমস্ত ম্যাপিংয়ের ক্ষেত্রে পুনরাবৃত্তিযোগ্য রূপগুলি ব্যবহার করা উচিত। ম্যাপিং গো <C-t>সেই বাক্য গঠনটি আক্ষরিক পরিবর্তে ব্যবহার করতে পারে। শেষ অবধি, <Tab>সাধারণ মোডে ম্যাপিং মানচিত্রও তৈরি করবে <C-i>(সেগুলি একই চরিত্রের), সুতরাং আমি প্রস্তাব দিই না যে (আপনি একটি নিমফ টুকরো ভিম কার্যকারিতা হারাবেন
ডি বেন নোবল

@ D.BenKnoble আমি এর কোনটিই সুপারিশ করি না; আমি Ctrl-T, Ctrl-D এবং <> নিজেই ব্যবহার করি। এটি উদ্দেশ্য হিসাবে ভিম ব্যবহার করছে। অন্যান্য সম্পাদকগুলিতে ট্যাব ব্যবহার করতে ব্যবহৃত লোকেরা এটি পছন্দ করতে পারে না, এগুলিই।
কাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.