এটিই আমি নিজের জন্য তৈরি করেছি, একই সমস্যার মুখোমুখি। এটি সংস্থা-মোডের ইমাসস উইকি পৃষ্ঠা থেকে এসেছে তবে এটির প্রসারিতভাবে বাড়ানো হয়েছে:
(defun check-expansion ()
(save-excursion
(if (looking-at "\\_>") t
(backward-char 1)
(if (looking-at "\\.") t
(backward-char 1)
(if (looking-at "->") t nil)))))
(defun do-yas-expand ()
(let ((yas/fallback-behavior 'return-nil))
(yas/expand)))
(defun tab-indent-or-complete ()
(interactive)
(cond
((minibufferp)
(minibuffer-complete))
(t
(indent-for-tab-command)
(if (or (not yas/minor-mode)
(null (do-yas-expand)))
(if (check-expansion)
(progn
(company-manual-begin)
(if (null company-candidates)
(progn
(company-abort)
(indent-for-tab-command)))))))))
(defun tab-complete-or-next-field ()
(interactive)
(if (or (not yas/minor-mode)
(null (do-yas-expand)))
(if company-candidates
(company-complete-selection)
(if (check-expansion)
(progn
(company-manual-begin)
(if (null company-candidates)
(progn
(company-abort)
(yas-next-field))))
(yas-next-field)))))
(defun expand-snippet-or-complete-selection ()
(interactive)
(if (or (not yas/minor-mode)
(null (do-yas-expand))
(company-abort))
(company-complete-selection)))
(defun abort-company-or-yas ()
(interactive)
(if (null company-candidates)
(yas-abort-snippet)
(company-abort)))
(global-set-key [tab] 'tab-indent-or-complete)
(global-set-key (kbd "TAB") 'tab-indent-or-complete)
(global-set-key [(control return)] 'company-complete-common)
(define-key company-active-map [tab] 'expand-snippet-or-complete-selection)
(define-key company-active-map (kbd "TAB") 'expand-snippet-or-complete-selection)
(define-key yas-minor-mode-map [tab] nil)
(define-key yas-minor-mode-map (kbd "TAB") nil)
(define-key yas-keymap [tab] 'tab-complete-or-next-field)
(define-key yas-keymap (kbd "TAB") 'tab-complete-or-next-field)
(define-key yas-keymap [(control tab)] 'yas-next-field)
(define-key yas-keymap (kbd "C-g") 'abort-company-or-yas)
মূলত, এটি বেশিরভাগ সময় <tab>সঠিক কাজটি করে। ট্যাব টিপতে হবে
- বর্তমান লাইনটি ইনডেন্ট করুন,
- যদি প্রসারণ, প্রসারিত করার জন্য কোনও ইয়াসনিপেট থাকে তবে এর অর্থ কোনও সংস্থার সমাপ্তি বাতিল করা (যদিও আমি সংক্ষেপগুলি বেশি ব্যবহার করি না, তাই কোনও সংক্ষেপণ সমর্থন এখনও নেই),
- যদি কোনও সংস্থার সমাপ্তি চলমান থাকে তবে নির্বাচিত আইটেমটি দিয়ে সম্পূর্ণ করুন,
- অন্যথায় স্বতঃপূরণ শুরু করতে সংস্থাটি ব্যবহার করার চেষ্টা করুন,
- যদি স্বয়ংসম্পূর্ণ হওয়ার মতো কিছু না থাকে এবং আমরা যাসনিপেট প্লেসহোল্ডারে থাকি, পরবর্তী স্থানধারকটিতে যান।
মনে রাখবেন যে যদি স্বয়ংক্রিয়রূপে চলে যাওয়ার সুযোগ থাকে এবং আপনি বর্তমানে স্নিপেটের স্থানধারকটিতে সম্পাদনা করছেন, পরিস্থিতিটি দ্বিধাদ্বন্ধিক। আপস হিসাবে, আমি C-<tab>সরাসরি পরবর্তী স্থানধারককে সরাসরি এড়িয়ে যেতে বাধ্য ।
স্নিপেটের নামটি কোম্পানির মেনুতে উপস্থিত হয় না এবং একটি স্নিপেটের অস্তিত্ব নীরবে ট্যাব কীটির আচরণকে পরিবর্তন করে তোলে বিশেষত, দুর্ভাগ্যবশত ... যদিও কমপক্ষে এটির <return>পরিবর্তে সম্পূর্ণতা পাওয়ার জন্য টাইপ করা সম্ভব স্নিপেটের।
tab
জন্যcompany
এবংC-o
জন্য ব্যবহার করছিyasnippet
। আপনার আগ্রহ থাকলে আমি আরও বর্ণনা করতে পারি।