ফাইল টাইপ দ্বারা ভিম ইন্ডেন্টেশন আচরণ পরিবর্তন করা


379

ফাইল টাইপের উপর ভিত্তি করে কেউ কি ভিমের ইন্ডেন্টেশন আচরণ পরিবর্তন করার সহজ উপায়টিকে সহজ শর্তে আমাকে ব্যাখ্যা করতে পারে? উদাহরণস্বরূপ, আমি যদি পাইথন ফাইলটি খোলাম তবে এটি 2 স্পেস সহ ইনডেন্ট করা উচিত, তবে আমি যদি পাওয়ারশেল স্ক্রিপ্টটি খোলাম তবে এটি 4 স্পেস ব্যবহার করবে।


9
পাইথনের জন্য বিটিডাব্লু - পিইপি 8 কনভেনশন বলছে ট্যাবস্টপটি 4 স্পেস এবং ট্যাবগুলির 4 স্পেস হওয়া উচিত। সুত্র: stackoverflow.com/questions/120926/...
cgseller

উত্তর:


304

.vimযখনই ভিআইএম নির্দিষ্ট ফাইল টাইপটিতে স্যুইচ করে আপনি এক্সিকিউট করার জন্য ফাইলগুলি যুক্ত করতে পারেন ।

উদাহরণস্বরূপ, ~/.vim/after/ftplugin/html.vim এই লিখিত সামগ্রীগুলির সাথে আমার কাছে একটি ফাইল রয়েছে:

setlocal shiftwidth=2
setlocal tabstop=2

যার ফলে ইন্ডেন্টিংয়ের জন্য 2 টি অক্ষরের প্রস্থের সাথে ভিএম ট্যাবগুলি ব্যবহার করতে পারে ( noexpandtabবিকল্পটি আমার কনফিগারেশনের বাইরে অন্যত্র সেট করা আছে)।

এটি এখানে বর্ণিত হয়েছে: http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.4 , ফাইল টাইপ প্লাগইনগুলির বিভাগে স্ক্রোল করুন।


229
~/.vim/after/ftplugin/html.vimপরিবর্তে আপনার এটি করা উচিত । অন্যরা যেমন নীচের দিকে ইঙ্গিত করেছেন, এটি কেবল autocmd FileType html setlocal shiftwidth=2 tabstop=2আপনার যুক্ত করা আরও সুন্দর .vimrc
অ্যারিস্টটল পাগাল্টজিস

10
ওফস, আসলে, সে / সে / যেখানে আমার কাছে সেই ফাইল রয়েছে। আমি উত্তর ঠিক করব। যদিও আমি একমত নই, আমি মনে করি পৃথক ফাইলের জন্য পৃথক ফাইলের জন্য কমান্ড পৃথক করা সবকিছুকে আরও সহজ করে তোলে বিশেষত আপনার যদি অনেক ফাইল টাইপের প্রয়োজনীয়তা থাকে বা কিছু ফাইল টাইপের জন্য প্রচুর বিকল্প রয়েছে।
চামচমিজার

3
আসলে, এফটিপ্লাগিনগুলির জন্য পরবর্তী ডিরেক্টরিটি ব্যবহার করার খুব বেশি কারণ নেই। ভিম আপনার রানটাইমপথের মধ্যে এটি পাওয়া সমস্তগুলি লোড করবে, সিনট্যাক্স ফাইলগুলির জন্য প্রথম পছন্দ নয়।
ধুসর 21

36
এফওয়াইআই: জাভাস্ক্রিপ্ট ফাইল টাইপের জন্য জেএস ব্যবহার করবেন না। পরিবর্তে জাভাস্ক্রিপ্ট ব্যবহার করুন। ( autocmd FileType javascript setlocal shiftwidth=2 tabstop=2)
কিডো

13
filetype plugin onআপনার ভিএমআরসি-তেও যুক্ত করতে হবে।
gatoatigrado

191

বিকল্পগুলি সেট করতে ftplugins বা অটোমোমন্ড ব্যবহার করুন।

ftplugin

ভিতরে ~/.vim/ftplugin/python.vim:

setlocal shiftwidth=2 softtabstop=2 expandtab

এবং এগুলি চালু করতে ভুলবেন না ~/.vimrc:

filetype plugin indent on

( :h ftpluginআরও তথ্যের জন্য)

autocommand

ইন ~/.vimrc:

autocmd FileType python setlocal shiftwidth=2 softtabstop=2 expandtab

আপনি দীর্ঘ কমান্ড বা তাদের সংক্ষিপ্ত সংস্করণের সাথে সেটিংস কোন প্রতিস্থাপন করতে পারেন:
autocmd: au
setlocal: setl
shiftwidth: sw
tabstop: ts
softtabstop:sts
expandtab :et

আমি tabstopএবং এর মধ্যে পার্থক্য শেখার পরামর্শ দেব softtabstop। প্রচুর লোক জানে না softtabstop


1
ধন্যবাদ! এছাড়াও 'ts' এবং 'sts' সম্পর্কে যে বিট জন্য ধন্যবাদ। এমন কোনও নির্দিষ্ট পৃষ্ঠা রয়েছে যা আপনি এই পার্থক্যটি এবং এটি কীভাবে ব্যবহার করবেন সে সম্পর্কে আলোচনা করার পরামর্শ দিচ্ছেন?
jvriesem

11
@jvriesem এর তেমন কিছু নেই: 'টিএস' হল ট্যাব অক্ষরগুলি কীভাবে প্রদর্শিত হয়; 'এসটিএস' হ'ল ট্যাব কীটি চাপলে কয়টি "স্পেস" সন্নিবেশ করানো হয়; 'sw' হ'ল প্রতি ইনডেন্ট স্তরে কত "স্পেস" ব্যবহার করা যায়; 'এট' হ'ল স্পেস বা ট্যাব ব্যবহার করা হবে কি না; 'স্টা' আপনাকে লাইনের শুরুতে ট্যাব টিপানোর সময় 'sw' "স্পেসস" সন্নিবেশ করতে দেয়।
ধুসর

10
আমি অবাক হয়েছি যে সম্পূর্ণ ফর্মগুলি ব্যবহারের চেয়ে আরও ভাল হবে, স্পষ্টতার জন্য, শেষে কার্ট বাক্যটির চেয়ে।
আইসড ওয়াটার

23
swএর জন্য সংক্ষিপ্ত softwidth, এর stsজন্য সংক্ষিপ্ত softtabstop, এর etজন্য সংক্ষিপ্ত expandtab, setlসংক্ষিপ্ত setlocalএবং এর auজন্য সংক্ষিপ্ত autocmd। আপনি সংক্ষিপ্ত ফর্মের পরিবর্তে দীর্ঘ ফর্মগুলি ব্যবহার করতে পারেন।
Flimm

13
আমি বিশ্বাস করি বরং swপ্রসারিত হয় । shiftwidthsoftwidth
জনসিপ

83

আপনার সম্পাদনা করুন ~/.vimrcএবং বিভিন্ন ইনডেন্টের জন্য বিভিন্ন ফাইল প্রকার যুক্ত করুন, উদাহরণস্বরূপ আমি html/rb2 স্পেসের জন্য ইন্ডেন্ট চাই এবং js/coffee4 স্পেসের জন্য ফাইল ইনডেন্ট চাই:

" by default, the indent is 2 spaces. 
set shiftwidth=2
set softtabstop=2
set tabstop=2

" for html/rb files, 2 spaces
autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab

" for js/coffee/jade files, 4 spaces
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype coffeescript setlocal ts=4 sw=4 sts=0 expandtab
autocmd Filetype jade setlocal ts=4 sw=4 sts=0 expandtab

উল্লেখ করুন: ফাইল টাইপ দ্বারা ভিম সাদা স্থান পছন্দগুলি সেট করা


ভিএমআরসি-র জন্য মন্তব্য একক ":)
এসডিস্কস

@ sdkks- এরকম আমার মনে হয় না। ডাবল উদ্ধৃতি মন্তব্য, একক উদ্ধৃতি 'আমার সমস্ত লিনাক্স ভিমে ত্রুটি দেয়। (7.3+, 8.0 ...)
সিউই শেন 申思维

হ্যাঁ। আমার মন্তব্য বলছে একটি একক ব্যবহার করুন ", অর্থ এটি অন্যের সাথে বন্ধ করবেন না "। যদিও আমি মন্তব্য করেছি তা নিশ্চিত নয়।
sdkks

ঠিক আছে, আমি আপনাকে ভুল বুঝেছি। আমি যদিও একক উদ্ধৃতি মানে 'কিন্তু ডান "ছাড়াই বামে নেই " । @
সিউই শেন 申思维

60

আপনার ~ / .vimrc- এ প্রত্যয়টির উপর ভিত্তি করে অটোকিমডি কমান্ডগুলি রাখুন

autocmd BufRead,BufNewFile   *.c,*.h,*.java set noic cin noexpandtab
autocmd BufRead,BufNewFile   *.pl syntax on

আপনি যে কমান্ডগুলি সন্ধান করছেন তা সম্ভবত ts = এবং sw =


18
এর মাধ্যমে কী লাভ FileType?
কেসি চৌ চৌ

3
ম্যাচটি উল্টানোর কোনও উপায় আছে কি?
সিস্টেমপারাডক্স

7
এইচটিএমএল ফাইলগুলির সাথে কাজ করার জন্য ফাইল টাইপগুলি পেতে আমার সমস্যা হয়েছে (যেহেতু .html ফাইলটি আসলে এইচটিএমএল নয়, তবে একটি টেম্পলেট HTML সহ একটি টেম্পলেট HTML ফাইল)। ফাইল টাইপগুলি এটি এইচটিএমএল হিসাবে স্বীকৃত বলে মনে হচ্ছে না, তবে এই পদ্ধতিটি এটি করবে।
মার্ক হিলড্রেথ

3
@ ডিজিটক্সপক্স - যখন আপনার এক্সটেনশনটি কোনও সংজ্ঞায়িত "ফাইল টাইপ" এর সাথে মেলে না। উদাহরণস্বরূপ, আমার ইনস্টলেশনে, * .md এর অর্থ Modula2 এর একটি ফাইল টাইপ যেখানে আমি এটি মার্কডাউন করার জন্য ব্যবহার করছি। আমি (ক) ডিফল্ট ফাইল টাইপ সেটিংস পরিবর্তন করতে পারি (খ) কাস্টম কনফিগারেশনের সাহায্যে ফাইল টাইপ সেটিংস পরিবর্তন করতে বা (সি) আমার 1 .vimrc ফাইলটিতে (সি) দিয়ে গিয়ে এই সেটিংসটি আমি কী চাই তা দ্রুত পেতে পারি।
পিডওয়াকার

এটি উল্লেখ করার মতো হবে - দস্তাবেজগুলির আমার দ্রুত পঠনটি সঠিক বলে ধরে নেওয়া - আপনি ফাইল টাইপের প্রতি একাধিক কমান্ড যুক্ত করতে পারেন এবং প্রদত্ত ক্রমে সেগুলি সম্পাদন করার গ্যারান্টিযুক্ত।
আন্ডারস্কোর_

23

আমি সাধারণত expandtabসেট দিয়ে কাজ করি , তবে মেকফিলগুলির পক্ষে এটি খারাপ। আমি সম্প্রতি যুক্ত করেছি:

:autocmd FileType make set noexpandtab

আমার .vimrc ফাইলের শেষে এবং এটি Makefile, Makefile, এবং * .mk কে মেকফাইল হিসাবে স্বীকৃতি দেয় এবং ট্যাবগুলি প্রসারিত করে না। সম্ভবত, আপনি এটি প্রসারিত করতে পারেন।


আরও ভাল বিকল্পটি সক্ষম করা: ফাইল টাইপ প্লাগইন। ভিমের জন্য ডিফল্টর মধ্যে রয়েছে: সেটেল নোট, সুতরাং আপনার ভিআইআরসিআর-তে এমন অকিডির দরকার নেই।
ধূসর 20

ঠিক আছে. আপনি কি এর উপকারিতা ব্যাখ্যা করতে পারেন এবং এটি করার সাথে কী জড়িত? ফাইল টাইপ প্লাগইনগুলি অটোকিমিডির চেয়ে কেন ভাল? অটোকিমডি কখন ব্যবহার করা উচিত? ব্যবহার করা হয় না?
জোনাথন লেফলার

5
ভিমের সাথে আসা ফাইল টাইপ প্লাগইনগুলি মেকফাইলগুলির জন্য "সেটলোকাল নেক্সপ্যান্ডট্যাব" এর মতো সহায়ক কাজ করবে। শিফটউইথের মতো ব্যক্তিগত জিনিসের জন্য অটোকমন্ডস বনাম এফটি প্লাগিনগুলি কোনও ব্যাপার নয় - আপনি নিজের ভিএম কনফিগারেশনকে কীভাবে গঠন করতে চান তা ঠিক এটি।
ধুসর

17

ব্যক্তিগতভাবে, আমি .vimrc এ এই সেটিংস ব্যবহার করি:

autocmd FileType python set tabstop=8|set shiftwidth=2|set expandtab
autocmd FileType ruby set tabstop=8|set shiftwidth=2|set expandtab

22
অনেক সংস্থাগুলি নির্দিষ্ট সংস্থাগুলির মতো দীর্ঘকাল ধরে সম্মেলন প্রতিষ্ঠা করেছে। প্রাক্তনের উদাহরণ হিসাবে নোডজেএসকে নিন। ট্যাব দুটি স্পেস হওয়া উচিত। মাথা ব্যথা এবং বেশ নির্বোধ, তবে গুরুত্বপূর্ণ।
পল হাজেন

3
ট্যাবগুলিকে কেন সব পরিস্থিতিতে এক হতে হবে? একটি কনফিগারেশন ফাইলের জন্য, 8 টি স্পেস ট্যাবগুলি সূক্ষ্মভাবে কাজ করে, তবে প্রচুর ইনডেন্টের কোড সহ, 2 পরিচালনা করা খুব সহজ। এবং তারপরে এখানে স্থির কনভেনশন রয়েছে: নোড.জেএসগুলিতে 2 টি স্পেস ট্যাব থাকা উচিত এবং 4 টি স্পেস ট্যাব ব্যতীত অন্য যে কোনও কিছুর সাথে পাইথন আসলে সিনথেটিকভাবে অবৈধ।
ফেলিক্সেফু

1
@ ফেলিক্সফিজ পাইথন যতক্ষণ না পুরো জায়গা জুড়ে একইভাবে থাকে ততক্ষণ যেকোন স্পেস (বা এমনকি ট্যাবগুলি) দিয়ে পুরোপুরি সঠিক।
জেমস

@ ডিজেএমসিএমহেম আপনি ঠিক বলেছেন - আমার উচিত "দৃ strongly়ভাবে প্রস্তাব দেওয়া" উচিত।
ফেলিক্সেউ

1
নেলোকে +1 ট্যাব চরিত্রটির 8 টি অক্ষরের একাধিক সময়ে পরবর্তী অবস্থানে লাফিয়ে অর্থ বোঝানোর একটি দীর্ঘ প্রতিষ্ঠিত traditionতিহ্য রয়েছে। এটি কেবলমাত্র লোকেরা "পরবর্তী ভাষায় আমার ভাষায় ভাল দেখাচ্ছে" জন্য ট্যাবটি ব্যবহার করতে চেয়েছিলেন এবং কিছু পাঠ্য সম্পাদকরা "একটি ট্যাব অক্ষর যুক্ত করা" এবং "ইনডেন্টিংয়ের জন্য স্পেস যুক্ত করার" মধ্যে পার্থক্য তৈরি করতে বিরত হননি, এবং লোকেরা তাদের সম্পাদককে এটির মতো করে চালিয়ে দেওয়ার জন্য এটি টুইট করেছে, যে আমাদের কাছে এখন এই জগাখিচুড়ি রয়েছে যেখানে ট্যাবগুলি কখনই অভিযুক্ত উপায় প্রদর্শন করে না। উত্স কোডটি পাঠ্য এবং পাঠ্যের মানটি 8-অক্ষর ট্যাব।
ফ্লোরিয়ান এফ

6

এটি আমাদের বেশিরভাগেরই জানা হতে পারে তবে যাইহোক (আমি আমার প্রথমবারের জন্য হতবাক হয়েছি) : ফাইলটি :set et( :setএক্সপেনডট্যাবগুলি) করা ইতিমধ্যে ফাইলে থাকা ট্যাবগুলিকে পরিবর্তন করে না, একটি করতে হবে :retab। উদাহরণ স্বরূপ:

:set et
:retab

এবং ফাইলের ট্যাবগুলি যথেষ্ট স্থান দ্বারা প্রতিস্থাপিত হয়। ট্যাবগুলি ফিরে পেতে সহজভাবে করুন:

:set noet
:retab

4

আজ, আপনি সম্পাদক কনফিগ চেষ্টা করতে পারেন , এটির জন্য একটি ভিআইএম প্লাগইন রয়েছে । এটির সাহায্যে আপনি কেবল ভিমে ইনডেন্টেশন আকার পরিবর্তন করতে পারবেন না, তবে অন্যান্য অনেক সম্পাদকের ক্ষেত্রে নিয়মিত কোডিং শৈলী রাখা যায়।

নীচে একটি সহজ এডিটর কনফিগ রয়েছে, আপনি দেখতে পাচ্ছেন যে পাইথন ফাইলগুলিতে ইনডেন্টেশনের জন্য 4 টি স্পেস থাকবে এবং পগ টেম্পলেট ফাইলগুলিতে কেবল 2 থাকবে।

# 4 space indentation for python files
[*.py]
indent_style = space
indent_size = 4

# 2 space indentation for pug templates
[*.pug]
indent_size = 2

3

আপনি ইনডেন্ট প্লাগইন ব্যবহার করে বা ম্যানুয়ালি সেটিংস ব্যবহার করে ভিমের ইন্ডেন্টেশনটি ঠিকঠাকভাবে কনফিগার করতে পারবেন, আমি আপনাকে ভিন্ডেক্ট নামে একটি পাইথন স্ক্রিপ্ট ব্যবহার করার পরামর্শ দিচ্ছি যা আপনি পাইথন ফাইল খুললে স্বয়ংক্রিয়ভাবে আপনার জন্য প্রাসঙ্গিক সেটিংস সেট করে। ব্যবহার করুন এই ডগা Vindect আরও বেশি কার্যকর ব্যবহার করতে। আমি যখন প্রথম অন্য ইন্ডেন্টেশন শৈলী (ট্যাব বনাম স্পেস এবং স্পেসের সংখ্যা) দিয়ে অন্যদের দ্বারা তৈরি পাইথন ফাইলগুলি সম্পাদনা শুরু করি তখন এটি অবিশ্বাস্যরকম হতাশাব্যঞ্জক। তবে এই ইনডেন্ট ফাইলের সাথে ভিনডেক্ট

এছাড়াও সুপারিশ:


2

যারা ব্যবহার করছেন তাদের autocmdপক্ষে তাদের একত্রে গ্রুপ করা সেরা অনুশীলন। কোনও গ্রুপিং যদি ফাইল-ধরণের সনাক্তকরণের সাথে সম্পর্কিত হয় তবে আপনার এর মতো কিছু থাকতে পারে:

augroup filetype_c
    autocmd!
    :autocmd FileType c setlocal tabstop=2 shiftwidth=2 softtabstop=2 expandtab
    :autocmd FileType c nnoremap <buffer> <localleader>c I/*<space><esc><s-a><space>*/<esc>
augroup end

গ্রুপিংগুলি .vimrcসংগঠিত রাখতে বিশেষত একবার ফাইল টাইপের সাথে একাধিক নিয়ম যুক্ত হওয়ার জন্য সহায়তা করে। উপরের উদাহরণে, .c ফাইলগুলিতে নির্দিষ্ট একটি মন্তব্য শর্টকাট সংজ্ঞায়িত করা হয়েছে।

প্রাথমিক কলটি autocmd!ভিমকে বলা হয়েছে গ্রুপিংয়ের পূর্বের কোনও সংজ্ঞায়িত অটোমন্ডম মুছতে tells যদি .vimrcএটি পুনরায় উত্সাহিত হয় তবে এটি সদৃশ সংজ্ঞাটিকে আটকাবে । দেখুন :help augroupআরও তথ্যের জন্য।


1

আমি সি তে যে ইউটিলিটি লিখেছি তা ব্যবহার করি autotab। এটি একটি ফাইল প্রথম কয়েক হাজার লাইন যা আপনি লোড বিশ্লেষণ করে তেজ পরামিতি মান নির্ধারণ করে shiftwidth, tabstopএবংexpandtab

এটি উদাহরণস্বরূপ ব্যবহার করে সংকলিত হয়েছে gcc -O autotab.c -o autotab । ভিমের সাথে সংহত করার জন্য নির্দেশাবলী শীর্ষে মন্তব্য শিরোনামে রয়েছে।

অটোটাব মোটামুটি চৌকস, তবে সময়ে সময়ে বিভ্রান্ত হতে পারে বিশেষত এর দ্বারা বিভিন্ন ইনডেন্টেশন শৈলী ব্যবহার করে অসামঞ্জস্যভাবে রক্ষণাবেক্ষণ করা হয়েছে।

যদি কোনও ফাইল স্পষ্টতই ট্যাব, বা ট্যাব এবং স্পেসগুলির সংমিশ্রণের জন্য ব্যবহার করে তবে অটোোটাব মন্তব্যগুলির মতো ক্রমাগত লাইনগুলিতে অভ্যন্তরীণ উপাদানগুলির সারিবদ্ধকরণের মতো বিষয়গুলি বিবেচনা করে কোন ট্যাব আকারটি ব্যবহার করছে তা নির্ধারণ করবে।

এটি বিভিন্ন প্রোগ্রামিং ভাষার জন্য কাজ করে এবং "ব্যান্ড আউট" উপাদানগুলির জন্য ক্ষমা করে দেয় যা সিড প্রিপ্রোসেসিং নির্দেশিকা, সি স্টেটমেন্ট লেবেলের মতো স্পষ্ট ফাঁকা রেখাগুলির উল্লেখ না করে "ইনডেন্টেশন ইনক্রিমেন্টগুলি মানায় না"।

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