ভিম: ডিরেক্টরিতে ফাইলগুলিতে সেটিংস প্রয়োগ করুন


103

বর্তমান ডিরেক্টরিতে থাকা সমস্ত ফাইলের জন্য আমি কীভাবে Vim সেটিংস নির্দিষ্ট করব?

আদর্শ সমাধানটি যদি ভীম ~ / .vimrc অনুসন্ধানের আগে বর্তমান ডিরেক্টরিতে একটি .vimrc অনুসন্ধান করে এবং পুরো গাছটির জন্য সেটিংগুলি প্রয়োগ করে তবে সেগুলি হতে পারে solution

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

আমি চেষ্টা করেছিলাম

  • ওয়ার্কিং ডিরেক্টরিতে একটি .vimrc স্থাপন করা
  • :so vimrc মডেলিনে।

আমি মনে করি উভয়ই সুরক্ষার কারণে কাজ করে না। আমার কোনও ভিএমআরসি পূর্ণ ক্ষমতা প্রয়োজন নেই; কোনও মডেলিন দ্বারা গ্রহণযোগ্য সেটিংসে আবদ্ধ হওয়া যথেষ্ট। আমার লক্ষ্যটি কোনও প্রকল্পে কোডিং মান গ্রহণ করা ভিমারদের পক্ষে সহজ করা।


2
সম্পর্কিত: কীভাবে কেবল
ভিএম

উত্তর:


42

আমি প্লাগইন উপায়ে একজন উকিল । বিভিন্ন কারণে:

  • মোডলিংগুলি বিশেষত সীমিত: আমরা ভেরিয়েবল সেট করতে পারি না (যা অন্যান্য (ফুট) প্লাগইনগুলির সুর করে যেমন "" স্নিপেটের ব্রেসগুলি একটি নতুন লাইনে থাকা উচিত? "), বা তাদের কাছ থেকে ফাংশন কল করতে হবে (আমি নিজেকে সীমাবদ্ধ করি না) কোডিং মানগুলিতে, আমি বর্তমান মেকফাইলটি বর্তমান ডিরেক্টরি অনুসারে ব্যবহার করার জন্য সেটও করেছি)
  • শুকনো : modelines সঙ্গে, একটি সেটিং চাহিদা যে ফাইলে, পুনরাবৃত্তি করা যদি সেখানে সেট বা পরিবর্তনের tunings অনেকগুলি কিছু সৃষ্টি হয়েছে, এটি দ্রুত বজায় রাখা কঠিন হয়ে যাবে, পরন্তু, এটি একটি ব্যবহার করার প্রয়োজন হবে টেমপ্লেট-Expander প্লাগইন ( আপনার প্রকল্পে বেশ কয়েকটি ভিমার রয়েছে কিনা তা বিবেচনা করা উচিত)।
  • প্রত্যেকে বিকাশের জন্য ভিএম ব্যবহার করে না। আমি অন্য ব্যক্তিদের সম্পাদকীয় সেটিংস দ্বারা বিরক্ত হতে চাই না, কেন আমি তাদের প্যারাসাইট করব?
  • ভিমারদের তাদের .vimrc এ একই লাইনগুলি অনুলিপি-পেস্ট, এবং বজায় রাখার পরিবর্তে একই প্লাগইন ইনস্টল করতে বলা সহজ easier
  • অন্যান্য প্রকল্প ফাইল (সিভিএস / এসভিএন / গিট / যাই হোক না কেন) এর সাথে সেটিংস সংরক্ষণ করা যায়
  • প্রতিটি প্রকল্পের জন্য একটি কনফিগারেশন ফাইল থাকা সত্যিই সহজ - প্লাগইন সহ আমার কাছে সামগ্রিক প্রকল্পের কোডিং মানগুলির জন্য একটি গ্লোবাল কনফিগারেশন ফাইল এবং প্রতিটি উপ-প্রকল্পের জন্য নির্দিষ্ট কনফিগারেশন ফাইল রয়েছে (যা ব্যবহারের জন্য মেকফাইল, যা কল করার জন্য নির্বাহযোগ্য , ...)

BTW, sth এর সমাধানটি একটি একক কনফিগারেশন ফাইল উত্স করতে ব্যবহার করা যেতে পারে। এটি .vimrc ব্যতীত বৈশ্বিক বিকল্পগুলির সাথে প্যারাসেট করতে হবে প্লাগইন পদ্ধতির সাথে খুব মিল, এবং এটি সহজেই একাধিক / ভাগ করা কনফিগারেশন ফাইল সমর্থন করে না।


আমি লক্ষ্য করেছি যে প্লাগইনটি সঠিকভাবে
সম্পাদন

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

1
দয়া করে মনে রাখবেন, লুক তার নিজস্ব একটি প্লাগইন লিঙ্ক করেছে। এটি প্রশ্নের মধ্যে লিঙ্কযুক্তটির চেয়ে অনেক ভাল কাজ করছে বলে মনে হচ্ছে। ধন্যবাদ।
ডেটা

আমরা হব. আমি বলতে পারি না। যেহেতু আমি কয়েক বছর ধরে খনি ব্যবহার করে চলেছি, অন্য বাস্তবায়নগুলিতে আমি কখনও ঘনিষ্ঠভাবে দেখিনি। সময়ে সময়ে আমি একটি বাগ রিপোর্ট পাই যা অবশেষে আমি আমলে নিই। বিটিডাব্লু, টেমপ্লেটগুলি প্রসারণের আগে প্রকল্প-নির্দিষ্ট ভেরিয়েবলগুলি সেট করার জন্য আমার সংস্করণটি মি-টেমপ্লেটের আগে চালু করা হবে (যা বর্তমান প্রকল্পের মূল ডিরেক্টরিটি আনতে এবং প্রসারিত
পথের নামগুলি

1
@ জেসনম্যাককারেল আমার স্থানীয়_ভিমরিসিআর এবং মার্কাসের প্রয়োগ "ব্রোকার" ব্ল্যাকলিস্ট, শ্বেতলিস্টের জন্য সমর্থন করেছে ... যদি আপনাকে কেবল ইনডেন্টেশনটি কীভাবে করা হয় তা নির্দিষ্ট করার দরকার হয় তবে এডিটরকনফিগ-ভিএম প্লাগইন আরও ভাল পছন্দ হতে পারে।
লুক হার্মিটে

91

আপনি এই মত কিছু রাখতে পারেন $VIM/vimrc

autocmd BufNewFile,BufRead /path/to/files/* set nowrap tabstop=4 shiftwidth=4

1
এটি পুনরাবৃত্তিযোগ্য তবে কেবল * দিয়ে। আপনি যদি এটিকে / প্যাথ / টু / ফাইল / বা / পাথ / টু / ফাইলগুলিতে হ্রাস করার চেষ্টা করেন তবে এটি কাজ করবে না।
সিস্টেমপারাডক্স

আপনার প্রকল্পে "noexpandtab" লেখা ফাইলের একটি গাছ এবং সমস্ত ফাইল "প্রসারিত ট্যাব" (উদাহরণস্বরূপ CodeIgniter) সহ অন্য একটি গাছ থাকলে এটি দুর্দান্ত। আপনি প্রতিটি গাছে ফাইলের জন্য যথাযথ অ্যাকশন সেট করতে পারবেন একটি কনফিগার ফাইল দিয়ে ually
user9645

2
অদ্ভুতভাবে, যখন আমার পথে একটি সিমলিংক অন্তর্ভুক্ত ছিল তখন এটি কাজ করে না; এটি কাজ করার আগে আমাকে কোনও সিমলিংক ছাড়াই পুরো পথটি রাখতে হয়েছিল।
দোলন অ্যান্টুচি

বিকল্প হিসাবে "বিশ্বাসযোগ্য ভিআইএম" ব্যবহারের বিষয়ে জোসেফ07 এর উত্তর দেখুন, এই পদ্ধতির বিপরীতমুখীকরণ (বিতরণ করা .vimrc বনাম কেন্দ্রীভূত)।
নাথান শুল্টে

50

আমি দৃ strongly়ভাবে ব্যবহার না করার পরামর্শ দিচ্ছি set exrc

এমনকি set secure* নিক্সের অধীনে, ভিএমটি যদি আপনার নিজের মালিকানাধীন থাকে তবে এখনও অটোকমন্ডস, শেল, এবং আল চালাবে। সুতরাং আপনি যদি সেই টার্বলটিতে কোনও ফাইল সম্পাদনা করতে খুশি হন তবে আমি আপনাকে একটি .vimrcসম্বলিত পাঠিয়েছি :

autocmd BufEnter * :silent! !echo rm -rf ~/

আপনি আমার চেয়ে কম আনন্দিত হবেন


6
প্লাগিনগুলির ক্ষেত্রে এটি সত্য, যা ভিএম লোড হওয়ার পরে স্বয়ংক্রিয়ভাবে কার্যকর করা হয়।
লুক হার্মিটে 16

31

এই প্রশ্নটি পুরানো তবে এটি বেশ প্রাকৃতিক এবং অবিরাম উদ্বেগের মতো বলে মনে হচ্ছে।

আমার সমাধান বেশ সহজ। আমি .vimrcআমার প্রকল্পগুলির মূল ডিরেক্টরিতে একটি ফাইল রাখি। .vimrcফাইলটির প্রথম লাইনটি সাধারণত উত্সগুলি দেয় ~/.vimrcএবং তারপরে আমি চাইলে নির্দিষ্ট কনফিগারেশন যুক্ত করে। আমি উপনাম tvim='vim -u .vimrc', এবং tvimআমার ব্যক্তিগত প্রকল্প ডিরেক্টরিতে ব্যবহার করি। "টেলিভিশন" "বিশ্বাসযোগ্য ভিআইএম" এর অর্থ, যদি আমি এটি কোনও .vimrcফাইলের সাথে ডিরেক্টরিতে চালিত করি এবং কিছু ভুল হয়ে যায় তবে আমি নিজেকে ছাড়া অন্য কাউকে দোষী করি না, কারণ আমি স্পষ্ট করে বলেছি যে আমি এটির উপর নির্ভর করে। এছাড়াও, আমি এগুলির একটি গোষ্ঠী সঞ্চিত রাখি যাতে আমি নির্দিষ্ট ধরণের প্রকল্পের জন্য যেটাকে চাই তার মাঝে মাঝে কেবলমাত্র লিংক যোগ করতে পারি।


1
এই পদ্ধতিরটি সোজা এবং আমার প্রয়োজনগুলির সাথে পুরোপুরি মেলে।
জিনসেড

আমি যখন এটি চেষ্টা করি এবং source $HOME/.vimrcআমার স্থানীয় থেকে .vimrc, ভিম অভিযোগ করে যে এটি আমার সিস্টেম-ব্যাপী ইনস্টলড প্লাগইনগুলি খুঁজে পাবে না (এই ক্ষেত্রে প্যাথোজেন; execute pathogen#infect()আমার কমান্ডটি $HOME/.vimrcব্যর্থ হয় Unknown function ...)। আমি এটা কিভাবে ঠিক করবো?
নাথান শুল্টে

20

কার্যকারী ডিরেক্টরিতে .vimrc স্থাপন করা আসলে সমর্থিত, কেবলমাত্র ডিফল্টরূপে অক্ষম। বিশদটি দেখুন :h 'exrc'এবং সন্ধান :h startupকরুন, সেটিং বর্তমান ডিরেক্টরি থেকে 'exrc'পড়া সক্ষম করবে .vimrc

এটি :set secureব্যবহার করার সময়ও এটি প্রস্তাবিত । এটি বর্তমান ডিরেক্টরিতে লক ডাউন :autocmd, শেল এবং লিখিত কমান্ডগুলি .vimrc

আর একটি বিষয় যা দেখার মতো হতে পারে তা হ'ল :h sessionপ্রকল্পটির একটি মানক দর্শন এবং সেটিংস সহ একটি সেশন ( ) স্থাপন করা ।

যা যা বলেছিল, আমি সম্ভবত লুক হার্মিটে নিজেই বিস্তারিত প্লাগইন অপশনে যাব।


6
ফেন দ্বারা মন্তব্য দেখুন। এটি গুরুতর সুরক্ষা জড়িত হতে পারে।
ডেটা

11

এই দিনগুলির জন্য যে কোনও "অটোরান" বৈশিষ্ট্যগুলির সাথে সুরক্ষা ঝুঁকি হ্রাস করতে, আমি কি আপনাকে পরামর্শ দিতে পারি যে প্লাগিনগুলির পরিবর্তে (বহনযোগ্য ব্যাগেজ) পরিবর্তে ভিআইমের বিদ্যমান বৈশিষ্ট্যগুলি ব্যবহার করতে?

যেমন।

আমার স্থানীয় ফোল্ডারের vimrc ফাইলটির নাম দেওয়া হয়েছে "_gvimrc" (উদ্দেশ্য অনুসারে)। এটি আমাদের ব্যয়ে নিজেকে মজাদার থেকে ফেনের মতো মানুষের জন্য আশাকে হ্রাস করে। :-)

আমার $ VIM / .vimrc ফাইলে, আমি sertedোকালাম:

if filereadable("_gvimrc")
    source _gvimrc
endif

শেষে.

একসাথে একাধিক (10+) ফাইল খোলার সাথে নির্যাতন করা হলে (কেন নিশ্চিত নয়) আমি "ফাইলরেডেবল ()" ওভার "ফাইলএক্সিস্ট ()" ব্যবহার করি

অবশ্যই, আপনি সম্ভাব্য সমস্যা-প্রস্তুতকারীদের আরও বিস্মিত করতে নিজের অনন্য ফাইলের নাম দিতে পারেন। যেমন "_mygvimrc", "_gobbledygook", ইত্যাদির জন্য আপনাকে কেবল একটি মানক নাম স্থির করতে হবে এবং আপনার $ VIM / .vimrc এ সেই অনুযায়ী উত্স তৈরি করতে হবে। বহনযোগ্যতার সমস্যাগুলি এই নিয়মের জন্য vi / vim ইন্টার্নালগুলির উপর নির্ভর করা। কিন্তু, আপনি পরে ভিএম এর সাথে $ ভিআইএম / .vimrc ফাইলটি সম্পাদনা করছেন এমন ক্ষেত্রে পুনরাবৃত্ত সোর্সিং প্রতিরোধের জন্য এটি .vimrc (বা _vimrc) নাম রাখবেন না।

উইন্ডোজ এক্সপি প্রো এর মাধ্যমে উইন্ডোজ 98SE, এবং এখন উইন্ডোর্কিয়ার 7 (5+ বছর আগে থেকেই) এর পরে এটি ব্যবহার করা হয়েছে। আমি এক্সপ্লোরারে .txt ফাইলগুলির একটি তালিকা চিহ্নিত করব এবং তারপরে "একাধিক ভিম সহ সম্পাদনা করুন" ব্যবহার করব, ফলে একসাথে একাধিক ভিআইএম উইন্ডো খোলার ফলস্বরূপ। আমার কাজের জন্য, আমি প্রতিদিন কয়েকবার এটি করি। আমি আমার স্থানীয় _gvimrc এ যা সেট করেছি তার সাথে সমস্ত ফাইল চিকিত্সা পেয়েছে।


এখানে, প্লাগইন পোর্টেবিলিটির জন্য অবিশ্বাসের কোনও ভিত্তি নেই কারণ এই লোকাল_ভিম আরসি প্লাগইনগুলি (কমপক্ষে খনি) পোর্টেবল (এটি বিভিন্ন বিভিন্ন ওএস, এমনকি উইন্ডোজ 95 এও বজায় রাখা হত)। সুরক্ষা ঝুঁকি সম্পর্কিত বিষয়টিও অতিরঞ্জিত: আমরা যদি এইভাবে অনুসরণ করি তবে আমরা আমাদের কাজটি সহজ করার জন্য কোনও কিছুই ইনস্টল করব না।
লুক হার্মিটে

তবে যতদূর আমি উদ্বিগ্ন, প্রথম আসল সমস্যাটি হ'ল আপনার পদ্ধতির সাথে আপনাকে সেই সঠিক ডিরেক্টরি থেকে কাজ করতে হবে যাতে _gvimrc ফাইল রয়েছে (এটি একটি খারাপ নাম কারণ এটি gvim নির্দিষ্ট স্টাফ ধারণ করে)। যদি আপনার প্রকল্পটি বেশ কয়েকটি ডিরেক্টরি থেকে তৈরি হয়, যার জন্য একটি সাধারণ কনফিগারেশন এবং নির্দিষ্ট একটি (একাধিক মডিউলগুলির ক্ষেত্রে) প্রয়োজন হতে পারে, এটি দ্রুত তার সীমাবদ্ধতাগুলি দেখায়।
লুক হার্মিটে

দ্বিতীয় সমস্যাটি হ'ল আপনি কেবল সেই সময়ে একটি প্রকল্পে কাজ করতে পারবেন - যদি আমি ওটিবি, ওপেনজেপেইগ এবং কোনও প্রকল্প যা উভয় গ্রন্থাগারকে ইন্টিগ্রেটেড করতে কাজ করতে চাই, এই সমাধানটি আমাকে প্রতিটিটির জন্য একটি নির্দিষ্ট সেটিংস রাখতে দেয় না তিনটি প্রকল্প
লুক হার্মিটে

এটি স্থানীয় ডিরেক্টরি থেকে একটি সিনট্যাক্স ফাইল লোড করার জন্য ডেইজি-চেইনে কাজ করে।
maharvey67

2

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


2

আমি সুরক্ষার কারণে প্লাগইন পদ্ধতির সাথে একমত।

একটি খুব ভাল প্লাগইন রয়েছে যা এখনও উল্লেখ করা হয়নি। এটি আপনাকে .lvimrcআপনার প্রকল্প ডিরেক্টরিতে একটি ব্যবহার করতে দেয় ।

"Localvimrc" চেষ্টা করে দেখুন:

http://www.vim.org/scripts/script.php?script_id=441

https://github.com/embear/vim-localvimrc


2

"Editconfig" ব্যবহার করুন

আপনি যে ধরণের কোডিং স্ট্যান্ডার্ডগুলি প্রয়োগ করতে চান সেগুলি যদি ইনডেন্টেশন শৈলী, ট্যাব আকার, ফাইল ফর্ম্যাট এবং চরসেটের সাথে সম্পর্কিত হয়, তবে আপনি "এডিটরকনফিগ" সন্ধান করতে পারেন , যা এই ধরণের সেটিংস নির্দিষ্ট করার জন্য একটি ক্রস-সম্পাদক স্ট্যান্ডার্ড is একটি নির্দিষ্ট প্রকল্প এবং সমস্ত সম্পাদকরা সেই কনফিগারেশনটি অনুসরণ করে।

"Editorconfig" নির্দিষ্টকরণ প্রকল্পের ফাইল এক্সটেনশন বা প্রকল্পের মধ্যে নামের উপর নির্ভর করে বিভিন্ন সেটিংসের জন্য অনুরোধ করতে সহায়তা করে। (সুতরাং আপনার টিএবিএস ব্যবহার করে মেকফিল থাকতে পারে, আপনার পাইথন স্ক্রিপ্টগুলি 4 টি স্পেস ব্যবহার করে এবং শেল স্ক্রিপ্টগুলি ইনডেন্টেশনের জন্য 2 স্পেস ব্যবহার করে))

ভিমে "editconfig" ব্যবহার করার জন্য আপনার একটি প্লাগ-ইন দরকার need অফিসিয়াল ওয়েবসাইটটি একটি সরবরাহ করে তবে ব্যক্তিগতভাবে আমি স্যাগুর / ভিএম-এডিটর কনফিগের সুপারিশ করব যা খাঁটি ভিমস্ক্রিপ্টে লেখা আছে, সুতরাং আপনাকে বাহ্যিক নির্ভরতা সম্পর্কে খুব বেশি চিন্তা করার দরকার নেই।

যেহেতু "সম্পাদককনফিগ" এর লক্ষ্য ক্রস-সম্পাদক সামঞ্জস্যতা, এটি এটির মধ্যে বেশ সীমিত, তাই আপনি যদি চান সামঞ্জস্যপূর্ণ সাদা স্থান, ফাইল ফর্ম্যাট (ডস বনাম ইউনিক্স) এবং এনকোডিং (ইউনিকোড ইউটিএফ -8, ইত্যাদি), তবে "সম্পাদককনফিগ " তোমার জন্য.



0

আমি যে প্লাগইনগুলির অস্তিত্ব দেখেছিলাম এবং সেগুলির কোনও সত্যই কল্পনা করি না, তাই আমি একটি সাধারণ ফাংশন লিখেছিলাম যা পিগি ভিম-পলাতককে সমর্থন করে । এর সুবিধাটি হ'ল এটি জানে যে প্রকল্পের মূলটি সর্বদা সংগ্রহস্থলের মূল হয় এবং অতিরিক্ত হিসাবে আমি একটি বিশ্বাসের টেবিল রাখতে ফাইলটি হ্যাশ করতে পারি। আপনার .vimrcফাইলটিতে কেবল নিম্নলিখিতটি লিখুন।

function LoadRepoVimrc()
  let l:path = fugitive#repo().tree('.vimrc')
  if filereadable(l:path)
    let l:sha1 = fugitive#repo().git_chomp('hash-object',l:path)
    if !exists('g:SAFE_VIMRC') | let g:SAFE_VIMRC = {} | endif
    if has_key(g:SAFE_VIMRC,l:path) && g:SAFE_VIMRC[l:path] ==? l:sha1
      execute 'source '.fnameescape(l:path)
    elseif confirm("Trust ".l:path."?", "&Yes\n&No",2) == 1
      let g:SAFE_VIMRC[l:path] = l:sha1
      execute 'source '.fnameescape(l:path)
    else
      execute 'sandbox source '.fnameescape(l:path)
    endif
  endif
endfunction
autocmd User FugitiveBoot call LoadRepoVimrc()
set viminfo ^= !

তাহলে !বিকল্প সেট করা হয় viminfoসেটিং, তারপর SAFE_VIMRCঅভিধান (নোট রানে মধ্যে সংরক্ষিত হবে ^বিকল্প পূর্বে লিখুন তাই এটি আপ জগাখিচুড়ি না nবিকল্প)।

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