গিটে চলাফেরা করার জন্য কি ভিমে হুক সেভিংয়ের কোনও উপায় আছে?


11

আমি ভিমের বিশ্বে নতুন এবং আমি এটি তৈরি করতে চাই যাতে প্রতিবার আমি কোনও ফাইল সংরক্ষণ করি এটি সংস্করণ নিয়ন্ত্রণে পরিবর্তিত হয়। এটা কি সম্ভব?

উত্তর:


4

আপনি ভিমের স্বতঃসমান্ত ব্যবহার করতে পারেন:

:autocmd BufWritePost * execute '!git add % && git commit -m %'

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


4

আমি আমার ভিভিআরসিআরসিতে একটি ভিএম অটোকমন্ড ব্যবহার করি। কমান্ডটি প্রথমে একটি অশোধিত চেক করে যে আমরা একটি গিট ডিরেক্টরিতে কাজ করছি (বর্তমান ডিরেক্টরিতে বা ব্যবহার করে একটি .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'

1
সেন্টিমিডি শেষে ফাইয়ের ঠিক পরে একক উদ্ধৃতি নেই missing
অ্যান্ড্রু-ডুফ্রেসন

2
আপনি যদি আপনার রেপোর মূল ডিরেক্টরিতে থাকেন তবে এই সংস্করণটি কাজ করে। আরও ভাল সমাধান হ'ল autocmd BufWritePost * execute '! if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m %; fi', এসও উত্তর থেকে
অ্যান্ড্রু-ডুফ্রেসন

এটি আমার জন্য লিনাক্সে কাজ করে। উইন্ডোতে এটি কীভাবে কাজ করবেন তা সম্পর্কে কোনও ধারণা?
user334287

2

আপনি পলাতক প্লাগইনটি সন্ধান করতে পারেন , এটি ভিআইএম এর জন্য খুব শক্তিশালী গিট প্লাগইন। আপনি প্রস্তাব autocmdহিসাবে একটি সেটআপ করতে পারেন donothingsuccessfully, তবে এটি পপ আপ করুন :Gcommitবা :Gstatus(যা থেকে আপনি গিট সূচীতে যোগ করতে পরিবর্তনগুলি বেছে নিতে পারেন)


1

অন্যরা যে উত্তর সরবরাহ করেছে সেগুলির উপর ভিত্তি করে তৈরি করা:

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'

এটি সম্পূর্ণ স্বচ্ছ। আপনি "চালিয়ে যেতে টিপুন টিপুন" বার্তাটি পাবেন না (তবে যদি প্রতিশ্রুতিটি কাজ করে না, আপনি জানেন না এটি ব্যর্থ হয়েছে)।


0

আপনি অবশ্যই ম্যাক্রো বা কমান্ড রিম্যাপিংয়ের সাথে এটি করতে পারেন।

( Https://stackoverflow.com/questions/117150/can-i-re-map-commands-in-vim দেখুন )

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

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


এটি সত্য, তবে আমি একটি রাতারাতি স্ক্রিপ্টও রাখতে চাই যা "সেভ-অন-কমিট" রেপো থেকে সফলভাবে সংকলিত ফাইলগুলিকে একটি "অর্থবহ পরিবর্তন" রেপোতে সরিয়ে নিয়ে যায়।
gonzo.floyd

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

গিটের কার্যপ্রবাহগুলি সাবভারশন থেকে মূলত পৃথক হতে পারে। আপনি কখনই এসএনএন-এ এটি করতে পারবেন না কারণ এটি আপত্তিজনক হবে তবে গিটে এটির পুরোপুরি বৈধ ব্যবহার রয়েছে। উদাহরণস্বরূপ, কোনও ধরণের একটি পরীক্ষার ইন্টিগ্রেশন সার্ভারকে একটি পরীক্ষা শাখায় আটকানো যেতে পারে। সেভ করার পরে স্বতঃ-প্রতিশ্রুতি দেওয়া বেশ কার্যকর হয়ে যায়। আপনি যখন কিছু কাজ করছেন সেই বিন্দুতে পৌঁছে তখন আপনি গিট রিবেস ব্যবহার করে সমস্ত ক্রিয়াকলাপকে অর্থবোধক বার্তার মাধ্যমে একক প্রতিশ্রুতিতে স্কোয়াশ করতে ব্যবহার করবেন, তারপরে আপনার ডভেল শাখায় মার্জ করুন। যদি এটিকে ভীতিজনক বা জটিল মনে হয় তবে এটি কেবলমাত্র আপনি কোনও বিতরণযোগ্য উত্স ভিসিএসের সীমাবদ্ধতার সাথে মানিয়ে নিয়েছেন।
কালেব

0

আমি জানি এই প্রশ্নটি পুরানো এবং এটি নির্মম স্ব-প্রচার promotion তবে আমি একটি ভিম প্লাগইন লিখেছিলাম যা নির্দিষ্ট শিম স্ক্রিপ্টগুলি নির্দিষ্ট ভিমের autocmdইভেন্টগুলির পরে চালানোর জন্য ট্রিগার করবে । উদাহরণস্বরূপ, .bufwritepost.vimhook.shপ্রতিবার BufWritePostকমান্ডটি চালিত হওয়ার পরে নামের স্ক্রিপ্টটি (সিঙ্ক্রোনালি) চালানো হবে । তারপরে আপনি সেই স্ক্রিপ্টের মধ্যে গিট কমিট সম্পাদনের জন্য যা কিছু যুক্তি চান তা সহজেই অন্তর্ভুক্ত করতে পারেন। প্লাগইন এই স্ক্রিপ্টগুলির নির্দিষ্ট নামকরণের কনভেনশন গ্রহণ করে এবং "হুক" স্ক্রিপ্টগুলিকে সমর্থন করে যা কেবলমাত্র নির্দিষ্ট নামের সাথে মিলে যাওয়া বা নির্দিষ্ট এক্সটেনশন থাকা ফাইলগুলিতে ট্রিগার করে।

সম্পূর্ণ বিবরণ: https://github.com/ahw/vim-hooks


0

আমি এই সমস্যাটি সম্পর্কে আমার গ্রহণের প্রতিবেদন করতে চাই।

আমার কাছে 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

ব্যাখ্যা:

  1. উইন্ডোগুলির জন্য, আমি ডিরেক্টরিটি vimrc ফাইলের স্থানে পরিবর্তন করি। এটি সেরা নয় এবং আমি পরে লিনাক্সের অনুরূপ হতে পারে change এটিকে খুব সিরিয়াস নেবেন না তবে আপনি এটি গাইড হিসাবে ব্যবহার করতে চাইতে পারেন। gitপাথ হতে হয়েছে (অর্থাত আপনি টাইপ করতে সক্ষম হওয়া উচিত git <ENTER>মধ্যে cmd.exe)
  2. লিনাক্সের জন্য, আমি প্রথমে পরীক্ষা করে দেখছি যে আমি সঠিক vimrc.vim সম্পাদনা করছি
  3. বর্তমান ওয়ার্কিং ডিরেক্টরিটি এতে সংরক্ষণ করুন tempdir
  4. ডিরেক্টরিটি vimrc.vim ফাইলে পরিবর্তন করুন
  5. গিট কমিট করুন
  6. পূর্ববর্তী ওয়ার্কিং ডিরেক্টরিতে ফিরে যান
  7. আমি নিজেই গিট পরিবর্তনগুলি ধাক্কা

মন্তব্য:

  1. কমান্ডগুলি ভিমে "চেইন" করা যেতে পারে |। কোনও কমান্ড ব্যর্থ হলে চেইনটি বাতিল করা হবে। বেশ কয়েকটি লাইন ভাঙ্গার জন্য পরবর্তী লাইনটি শুরু করুন \
  2. এটি ftplugin ফাইলগুলিতে প্রসারিত করা যেতে পারে। আপনার ফিল্টারগুলি হবে *.vimএবংexpand($VIMCONF)."/ftplugin/"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.