আমি ভিমের বিশ্বে নতুন এবং আমি এটি তৈরি করতে চাই যাতে প্রতিবার আমি কোনও ফাইল সংরক্ষণ করি এটি সংস্করণ নিয়ন্ত্রণে পরিবর্তিত হয়। এটা কি সম্ভব?
আমি ভিমের বিশ্বে নতুন এবং আমি এটি তৈরি করতে চাই যাতে প্রতিবার আমি কোনও ফাইল সংরক্ষণ করি এটি সংস্করণ নিয়ন্ত্রণে পরিবর্তিত হয়। এটা কি সম্ভব?
উত্তর:
আপনি ভিমের স্বতঃসমান্ত ব্যবহার করতে পারেন:
:autocmd BufWritePost * execute '!git add % && git commit -m %'
এটি অপরিশোধিত তবে এটি ফাইল যুক্ত করা উচিত এবং প্রতিশ্রুতি বার্তা হিসাবে ফাইলের সাথে এটি প্রতিশ্রুতিবদ্ধ।
ফাইলটি লেখার পরে এটি ট্রিগার হওয়ার কারণে আপনি বুফরাইটপোস্টটি চান। আমি কল্পনা করতে পারি যদিও সেখানে প্রচুর উদাসীন বা অনিরাপদ প্রান্তের মামলা রয়েছে।
আমি আমার ভিভিআরসিআরসিতে একটি ভিএম অটোকমন্ড ব্যবহার করি। কমান্ডটি প্রথমে একটি অশোধিত চেক করে যে আমরা একটি গিট ডিরেক্টরিতে কাজ করছি (বর্তমান ডিরেক্টরিতে বা ব্যবহার করে একটি .git ডিরেক্টরি অস্তিত্ব পরীক্ষা করে git rev-parse
), তারপরে ব্যবহার করা হয় git -a -m %
যাতে কেবল পূর্বে যুক্ত করা ফাইলগুলি স্টেজড এবং প্রতিশ্রুতিবদ্ধ হয় ।
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi'
, এসও উত্তর থেকে
অন্যরা যে উত্তর সরবরাহ করেছে সেগুলির উপর ভিত্তি করে তৈরি করা:
autocmd BufWritePost * execute ':silent ! if git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m "Auto-commit: saved %"; fi > /dev/null 2>&1'
এটি সম্পূর্ণ স্বচ্ছ। আপনি "চালিয়ে যেতে টিপুন টিপুন" বার্তাটি পাবেন না (তবে যদি প্রতিশ্রুতিটি কাজ করে না, আপনি জানেন না এটি ব্যর্থ হয়েছে)।
আপনি অবশ্যই ম্যাক্রো বা কমান্ড রিম্যাপিংয়ের সাথে এটি করতে পারেন।
( Https://stackoverflow.com/questions/117150/can-i-re-map-commands-in-vim দেখুন )
আমি নিশ্চিত না যদিও এটি একটি ভাল বিকল্প। আমি আপাতত গিটে দক্ষ নই এবং আমি জানি এটি কখনও কখনও এসএনএন থেকে আলাদা হয়। তবে আমি এসএনএন দিয়ে এই অটো-কমিট করব না। প্রতিশ্রুতিবদ্ধ অর্থপূর্ণ হওয়া দরকার এবং নিয়মিত কিছু সংরক্ষণ করা উচিত নয়।
আপনি সাধারণত কোনও প্রতিশ্রুতি দেন কারণ আপনি কোনও ফাংশন যুক্ত করেছেন, বাগ সংশোধন করেছেন ... ... কেবলমাত্র আপনি কোনও ফাইলের উপর কাজ করার কারণে নয়। আপনি সংকলনবিহীন প্রকল্প বা অসমাপ্ত ফাংশনটি শেষ করবেন না।
আমি জানি এই প্রশ্নটি পুরানো এবং এটি নির্মম স্ব-প্রচার promotion তবে আমি একটি ভিম প্লাগইন লিখেছিলাম যা নির্দিষ্ট শিম স্ক্রিপ্টগুলি নির্দিষ্ট ভিমের autocmd
ইভেন্টগুলির পরে চালানোর জন্য ট্রিগার করবে । উদাহরণস্বরূপ, .bufwritepost.vimhook.sh
প্রতিবার BufWritePost
কমান্ডটি চালিত হওয়ার পরে নামের স্ক্রিপ্টটি (সিঙ্ক্রোনালি) চালানো হবে । তারপরে আপনি সেই স্ক্রিপ্টের মধ্যে গিট কমিট সম্পাদনের জন্য যা কিছু যুক্তি চান তা সহজেই অন্তর্ভুক্ত করতে পারেন। প্লাগইন এই স্ক্রিপ্টগুলির নির্দিষ্ট নামকরণের কনভেনশন গ্রহণ করে এবং "হুক" স্ক্রিপ্টগুলিকে সমর্থন করে যা কেবলমাত্র নির্দিষ্ট নামের সাথে মিলে যাওয়া বা নির্দিষ্ট এক্সটেনশন থাকা ফাইলগুলিতে ট্রিগার করে।
সম্পূর্ণ বিবরণ: https://github.com/ahw/vim-hooks
আমি এই সমস্যাটি সম্পর্কে আমার গ্রহণের প্রতিবেদন করতে চাই।
আমার কাছে vimrc.vim
একটি গিট সংগ্রহস্থল রয়েছে ( $VIMCONF
একটি বুটস্ট্র্যাপ .vimrc সহ), এবং <Leader>ve
একটি নতুন ট্যাবে vimrc খোলার জন্য ম্যাপযুক্ত ("ভিিম সম্পাদনা") রয়েছে। এটি বর্তমান চলমান ডিরেক্টরিকে প্রভাবিত করে না।
সুতরাং আমি যদি vimrc.vim
আমার ভিআইএম গিট সংগ্রহস্থলের বাইরে কোনও ডিরেক্টরি ডিরেক্টরিতে শুরু করি তবে নিক এডওয়ার্ডস যে পদ্ধতিটি নিয়ে আলোচনা করেছিলেন তা ব্যর্থ হবে। আমার হ্যাকটি নিম্নলিখিত (উইন্ডোজ এবং লিনাক্সের জন্য)
if has('win32')
" The git command has to be passed to git. So we need to call bash.exe.
autocmd BufEnter *vimrc.vim silent! lcd %:p:h
autocmd BufWritePost *vimrc.vim if expand('<amatch>') =~ substitute(expand('$VIMCONF\vimrc.vim'), '\', '/', "g") | execute '! git add % & git commit -m %' | endif
else " Linux
autocmd BufWritePost *vimrc.vim
\ if expand('<amatch>') =~ expand($VIMCONF)."/vimrc.vim" |
\ let tempdir = getcwd() | execute 'cd' fnameescape(expand('<amatch>:h')) |
\ execute '! if git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m % ; fi' |
\ execute 'cd' fnameescape(tempdir) |
\ endif
endif
ব্যাখ্যা:
git
পাথ হতে হয়েছে (অর্থাত আপনি টাইপ করতে সক্ষম হওয়া উচিত git <ENTER>
মধ্যে cmd.exe
)tempdir
মন্তব্য:
|
। কোনও কমান্ড ব্যর্থ হলে চেইনটি বাতিল করা হবে। বেশ কয়েকটি লাইন ভাঙ্গার জন্য পরবর্তী লাইনটি শুরু করুন \
।*.vim
এবংexpand($VIMCONF)."/ftplugin/"