.Vimrc এবং প্লাগইনগুলির জন্য গিটহাব


21

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


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

3
আমি খুঁজে নিতে এটি সম্পাদনা করতে পারে শ্রেষ্ঠ যদি আপনি চান; আমার উদ্দেশ্যটি আরও একটি জিজ্ঞাসা করার ছিল "আমি কীভাবে এটি করব?" প্রশ্ন, সমস্যাটি স্বীকার করার সময় আমি যেভাবে সমস্যাটি নিয়ে যাওয়ার কথা ভাবছিলাম তা আদর্শ নাও হতে পারে।
টম

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

2
সম্পাদনা করা হয়েছে। আমি আশা করি আমি এটি আরও স্পষ্ট করে দিয়েছি যে আমি জিজ্ঞাসা করছি "আমি এটি কীভাবে করব?"
টম

1
নিওবান্ডলের মতো একটি প্লাগইন ম্যানেজার ব্যবহার করুন।
ফিলিপ

উত্তর:


18

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

মূল ধারণাটি হ'ল আপনার সংগ্রহস্থলের কোনও পাথের সাথে যুক্ত অন্য গিট সংগ্রহস্থলের একটি রেফারেন্স রাখা। এই রেফারেন্সগুলি .gitmodulesআপনার সংগ্রহস্থলের মূলের একটি ফাইলে সংরক্ষণ করা হয় (যা গিট দ্বারা পরিচালিত হয়, তাই এটি একা রেখে যান)। সাব্পোডিয়ুলস রয়েছে এমন একটি রেপো ক্লোনিং করার সময় কিছু জটিলতা দেখা দেয়: আপনাকে অবশ্যই ফাইলটি git submodule initতৈরি করতে .gitmodulesহবে এবং তারপরে git submodule updateসাবমডিয়ুলগুলি ক্লোন করতে হবে।


সাব-মডিউলটি ব্যবহার করে কীভাবে আমি আমার ডটফিলস সংগ্রহস্থলগুলিতে একটি নতুন ভিআইএম প্লাগইন যুক্ত করব (আমি ~/.vim/এই রেপোর সাথে .vim/আলিয়াস করেছি):

$ cd dotfiles/
$ git submodule add https://github.com/elixir-lang/vim-elixir.git .vim/bundle/vim-elixir

এর পরে submodule add, একটি git statusদেখিয়ে দেবে যে আপনি .gitmodulesএই জাতীয় কিছু দিয়ে ফাইলটি পরিবর্তন করেছেন (বা তৈরি করেছেন) :

[submodule ".vim/bundle/vim-elixir"]
    path = .vim/bundle/vim-elixir
    url = https://github.com/elixir-lang/vim-elixir.git

এটি .vim/bundle/vim-elixirএকটি নতুন ফাইল হিসাবে দেখাতে হবে। গিট সেই পাথটিকে বিশেষভাবে এখন আচরণ করে: এটি আপনার ফাইল সিস্টেমে একটি সাধারণ ডিরেক্টরি (তাই ভিআইএম এটি স্বাভাবিকভাবে লোড করে) তবে git diffএটির সংগ্রহস্থল থেকে এটি একটি নির্দিষ্ট প্রতিশ্রুতি হিসাবে বিবেচনা করবে। সেই পথটির (যেমন git log -1 -u .vim/bundle/vim-elixir) লগগুলি পৃথক বা লগগুলির দিকে তাকানোর সময় , গিট এটিকে এক লাইনের স্ট্রিং হিসাবে দেখায়:

Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e

প্লাগইনের সর্বশেষতম সংস্করণে আপডেট করা সাবমডিউলের সংগ্রহস্থলে প্রবেশ করা এবং একটি নতুন প্রতিশ্রুতি যাচাইয়ের সাথে মিলে যায় এবং তারপরে এটি আপনার ভাণ্ডারে প্রতিশ্রুতিবদ্ধ:

$ cd .vim/bundle/vim-elixir
$ git remote -v            # note: the submodule repo's origin, not my repo's
origin  https://github.com/elixir-lang/vim-elixir.git (fetch)
origin  https://github.com/elixir-lang/vim-elixir.git (push)

$ git pull
# ...

$ cd -     # back to my repository's root
$ git status
# ...
    modified:   .vim/bundle/vim-elixir (new commits)

$ git diff .vim/bundle/vim-elixir
# ...
-Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
+Subproject commit d59784e7afbd0d55c501e40c43b57cbe6f6e04c2

$ git commit -m "update vim-elixir" .vim/bundle/vim-elixir

ধন্যবাদ, এটি যে ধরণের জিনিস আমি সন্ধান করছিলাম তার মতো দেখায়!
টম

আহ, আমি আপনার উত্তর পোস্ট হয়েছে তা খেয়াল করিনি, যেহেতু আমি কিছু সময়ের জন্য আমার সম্পাদনা করছিলাম।
মুরু

23

আপনার ভিসিএসে আপনার প্লাগইন সংরক্ষণ করার দরকার নেই; আপনি একটি ভিএম প্যাকেজ ম্যানেজারও ব্যবহার করতে পারেন। গতকাল থেকে, আমি ভিএম-প্লাগ ব্যবহার করছি :

আপনি আপনার ভিএমআরসি তে প্লাগিনগুলি এর মতো সংজ্ঞায়িত করতে পারেন:

call plug#begin('~/.vim/plugged')

Plug 'embear/vim-localvimrc'
Plug 'kchmck/vim-coffee-script'
" ... etc

call plug#end()

তারপরে ভিম পুনরায় চালু করুন এবং তারপরে প্লাগইনগুলি ইনস্টল করুন:

:PlugInstall

অথবা, আপনি কল করার আগে এফএনএউ থেকে আপনার ভিএমআরসি ফাইলটিতে এই স্নিপেট যুক্ত করতে পারেন plug#begin():

if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall
endif

এটি প্লাগইনগুলি রাখবে ~/.vim/pluggedআপনার ভিসিএসে এই ফাইলটি রাখার দরকার নেই । যদি আপনি এই মেশিনটি অন্য কোনও মেশিনে ব্যবহার করতে চান তবে কেবল :PlugInstallসেই মেশিনে কল করুন।

একটি প্লাগইন অপসারণ করতে, এটি vimrc ফাইল থেকে সরান এবং চালনা করুন:

:PlugClean

নোট করুন যে ভিম-প্লাগ ভিম স্ক্রিপ্টস ওয়েবসাইট থেকে স্ক্রিপ্টগুলি ইনস্টল করতে সমর্থন করে না, তবে সেই স্ক্রিপ্টগুলি গিটহাবটিতে মিরর করা আছে, তাই এটি করার দরকার নেই।

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

আরো দেখুন:


5

আমি আমার vimrc গিথুব এবং প্লাগইনগুলিকে আমার সংগ্রহস্থলের সাবমডিউল হিসাবে সঞ্চয় করি।

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

https://github.com/Loki-Astari/UnixConfig

এটি ব্যবহার করতে:

cd
git clone git@github.com:Loki-Astari/UnixConfig.git ~/.config
cd .config
git submodule init
git submodule update
chmod +x init
./init
cd

গীত। কোনও পরামর্শ নিতে ইচ্ছুক (যেমন আমি এই যুগগুলি আগে করেছি এবং তখন থেকে এটি স্পর্শ করি নি)।

দ্রষ্টব্য: আমার প্রিয় অংশটি হ'ল এটি গিটটিও সেট করে এবং গিটের জন্য পৃথক সরঞ্জাম হিসাবে ভিআইএম ব্যবহার করার জন্য সেট করে sets ভিমডিফ সেরা ডিফ সরঞ্জাম।


5

আপনি যদি প্যাথোজেনের সাথে লেগে থাকতে চান তবে একটি উপায় হ'ল গিট সাবমডিউলগুলি ব্যবহার করা যেতে পারে । আপনি যখন সাবমডিউল যুক্ত করেন, গিট এটিকে অন্য সংগ্রহস্থল হিসাবে স্বীকৃতি দেয় এবং এর বিষয়বস্তুগুলিকে একা রেখে দেয় (যদি তা পরিবর্তন না করা হয়, তবে এটির ক্ষেত্রে এটি যখন আপনার লিখিত সামগ্রীটি অক্ষম করা থাকে হিসাবে প্রদর্শিত হবে git status)। যদি আপনি সমস্ত গিথুব-ভিত্তিক প্লাগইনগুলিতে থাকেন bundle/তবে সেগুলি সাবমোডিয়ুল হিসাবে যুক্ত করা একটি ভাল শেল সহ মোটামুটি সহজ কাজ:

for f in bundle/*/ 
do 
    git submodule add $(awk '/url =/{print $3}' "$f/.git/config") "$f"
done

সাবমোডিউলগুলি কীভাবে আমার ভিএমআরসি রেপোতে প্রদর্শিত হবে তা আপনি একবার দেখতে পারেন ।


আপনি যদি কোনও সাবমডিউলে কোনও ফাইল যুক্ত করেন বা কিছু পরিবর্তন করেন যা ভাণ্ডারগুলিকে প্রভাবিত করে না, git statusতবুও সাবমোড্যুলটিতে অনির্ধারিত পরিবর্তন বা অনিরীক্ষিত ফাইল থাকার বিষয়ে অভিযোগ করবে। আপনি ফাইলটিতে ignore = dirtyসাবমডিউল কনফিগারেশন যুক্ত করে এই জাতীয় পরিবর্তনকে উপেক্ষা করতে পারেন .gitmodules। উদাহরণ স্বরূপ:

[submodule "bundle/LaTeX-Box"]
    path = bundle/syntastic
    url = https://github.com/scrooloose/syntastic.git
    ignore = dirty

সাবমোডিয়ুলগুলির একটি সুবিধা হ'ল সাব মড্যুলের সংশোধন গিট সংগ্রহস্থলীতে যুক্ত করা হয়, যাতে git initস্বয়ংক্রিয়ভাবে সেই নির্দিষ্ট পুনর্বিবেচনাটি পরীক্ষা করে দেখার যত্ন নেওয়া হয়। আপনি এটিকে ফেলে দিতে পারেন এবং সাবমোডিয়ুলগুলিকে ফাইলে ignore = allতাদের কনফিগারেশনে যুক্ত করার পরে সাবস্কুলগুলিকে উপেক্ষা করতে গিটকে বলতে পারেন .gitmodules। উদাহরণ স্বরূপ:

[submodule "bundle/LaTeX-Box"]
    path = bundle/LaTeX-Box
    url = https://github.com/LaTeX-Box-Team/LaTeX-Box.git
    ignore = all

সবশেষে, তাদের সমস্ত আপডেট করার জন্য একটি আদেশ!

git submodule foreach git pull

সাবধানতার কথা: আমি সাবমডিউলে নতুন। তারা কীভাবে আচরণ করে আমি সত্যই জানি না।


সাবমডিউলগুলি ব্যবহার করার প্রয়োজন ছাড়াই প্যাথোজেনকে বাড়ানোর আরেকটি উপায় ভিআইএম-মহামারী । প্যানডেমিক প্যাথোজেন ছেড়ে যাওয়া দূরবর্তী সংগ্রহস্থলগুলি পরিচালনা করে রানটাইমপথ পরিচালনা করতে। এর অর্থ এই যে একটিতে দুটি সরঞ্জামের প্রয়োজন, তবে আলাদা কাজের জন্য যা পৃথকভাবে "পরিচালনা করা উচিত"।
jalanb

প্যাথোজেন রিডমে টাইপপ কেন সাবমোডিয়ুলগুলি যাওয়ার উপায় নয় কেন কেউ মন্তব্য করতে পারে? আমি সাবমডিউলগুলিও জানি না (এবং আমার সমাধানটি প্লাগইন ম্যানেজার ছাড়াও আমার পক্ষে দুর্দান্ত কাজ করে) তবে আমি অনুমান করছি যে বিরোধী সাব-মডিউল ভিড়ের কাছে আকর্ষণীয় কিছু বলার আছে।
ড্যাশ-টম-ব্যাং

1
@ ড্যাশ-টম-ব্যাং আমি তাঁর বিটটি পড়তে পড়তে বলি না যে আপনার সাবমডিউলগুলি ব্যবহার করা উচিত নয়। আমি মনে করি তিনি কেবল বলছেন এটি তার পছন্দসই পদ্ধতি নয়।
ধনী

1
টিবিএইচ কয়েক বছর ব্যবহার করার পরে আমি সাবমডিউলগুলিতে বিরক্ত হয়েছি got আমি এখন সেগুলি ব্যবহারের বিরুদ্ধে সুপারিশ করব। আমি এখন ভিএম-প্লাগ ব্যবহার করি এবং এটি আমার জীবনকে আরও সহজ করে তুলেছে।
মুড়ু

4

আপনার .gitignoreসমস্ত প্লাগইন উপেক্ষা করার জন্য এবং প্রতিশ্রুতিবদ্ধ না করার জন্য আপনি কেবল এই লাইনটি যুক্ত করতে পারেন :

vim/bundle

এছাড়াও, আপনি বলেছিলেন যে এটি সমস্যাযুক্ত যে এটিতে প্লাগিন কোড অন্তর্ভুক্ত থাকবে কারণ তারা ইতিমধ্যে গিথুব রেপো। আমি আপনি কি বলতে চান যে আপনি কোড নকল করতে না চান, কিন্তু আমি শুনেছি এটা বলেন যে আপনি এগিয়ে যান উচিত এবং সদৃশ কোড একটি নির্ভরতা যে যাতে আপনি সর্বদা আপনার কোডে একটি নির্দিষ্ট বিন্দু ফিরে যান এবং পারেন জানি যে এটা কাজ করবে। এখানে জেমস শোরের কিছু নিবন্ধ যা সে সম্পর্কে কথা বলেছেন: http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_build , http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle । তিনি প্রোগ্রামিং কোড এবং এনপিএম (ভিএম এর বিপরীতে) সম্পর্কে কথা বলছেন, তবে আমি মনে করি যুক্তিটি এখনও প্রযোজ্য, আপনি কোড বা লেখার জন্য একটি নির্ভরযোগ্য পরিবেশ চান।


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