শব্দের অংশ হিসাবে আন্ডারস্কোরকে কীভাবে আচরণ করবেন?


34

আমি ইম্যাকস + evilমোড ব্যবহার করি ।

যখন আমি উপর কার্সারটি অবস্থিত eযেমন লেখার একটা খণ্ড মধ্যে (স্বাভাবিক অবস্থায়) abc_def_ghi, ciw(পরিবর্তন ভেতরের শব্দ) শুধুমাত্র পরিবর্তন def, স্ট্রিংয়ের অংশকে যখন তেজ সমগ্র পরিবর্তন হবে abc_def_ghi।

আমি কীভাবে evilআন্ডারস্কোরটিকে ভিমের মতো আচরণ করতে বাধ্য করতে পারি (অর্থাত্ শব্দটির অংশ হিসাবে)?

উত্তর:


26

সবচেয়ে সহজ কাজ: ciWএকটি সাদা স্থান-বিস্মৃত শব্দ নির্বাচন করতে ব্যবহার করুন।

সিনট্যাক্স সারণীতে_ অক্ষরের মানটি নিয়ে বড় সমস্যাটিই করতে হবে । সমস্যাটি হ'ল ডিফল্টরূপে সিন্ট্যাক্স টেবিলের প্রতীক উপাদান এবং আপনি এটি একটি শব্দ উপাদান হিসাবে বিবেচনা করতে চান।_

আপনি যদি ইমাস 24.4 ব্যবহার করছেন তবে আপনি সক্ষম করার চেষ্টা করতে পারেন superword-mode। আমি নিজে চেষ্টা করে দেখিনি, তাই আপনার মাইলেজটি আলাদা হতে পারে।

একটি বিকল্পটি হ'ল সিন্ট্যাক্স টেবিলটি নিজেরাই সংশোধন করা এবং ইম্যাক্সকে বলা আপনি _চরিত্রটিকে একটি শব্দ উপাদান হিসাবে বিবেচনা করতে চান , যেমন:

(modify-syntax-entry ?_ "w")

আপনি ciwএটি করার পরে, আপনি যেমনটি চান তেমন কাজ করে, যেমন এটি ন্যায়বিচারের abc_def_ghiচেয়ে সমস্ত নির্বাচন করে def।

এইভাবে এটি করা অত্যধিক কিল হতে পারে, বিশেষত যদি আপনি কেবল _পাঠ্য অবজেক্টের শব্দের অংশ হিসাবে গণনা করতে চান । পরিবর্তে, আপনি evil-inner-wordনিম্নলিখিত হিসাবে পরামর্শ দিতে পারেন :

(defadvice evil-inner-word (around underscore-as-word activate)
  (let ((table (copy-syntax-table (syntax-table))))
    (modify-syntax-entry ?_ "w" table)
    (with-syntax-table table
      ad-do-it)))

এখন, অভ্যন্তরীণ-শব্দের পাঠ্য অবজেক্টটি ব্যতীত অন্য_ কিছুর জন্য এখনও প্রতীক উপাদান , সুতরাং অন্য যে কোনও কিছুর কার্যকারিতা স্পর্শ না করে আপনি যা চান তা অবিকলভাবে করবে।ciw

আপনি ইমাসকুইকি নোডে সিনট্যাক্স সারণী পরিবর্তন করার বিষয়ে আরও পড়তে পারেন ।


এটি একটি কবজির মতো কাজ করে। সব আন্দোলন (পরিবর্তন করা w, awইত্যাদি), আপনি নিম্নলিখিত ফাংশন খুব একইভাবে কাজ করতে পারেন: evil-forward-word-begin, evil-forward-word-end, evil-backward-word-begin, evil-backward-word-end, evil-a-word, evil-inner-word। দ্রষ্টব্য: আপনাকে underscore-as-wordবিভিন্ন, অনন্য (স্বেচ্ছাসেবী) মানগুলিতে পরিবর্তন করতে হবে ।
— সিটাকটিফ

(modify-syntax-entry ?_ "w")কোন কারণে আমার জন্য কাজ করেনি। ইন্টারেক্টিভভাবে এটি করা কোনওভাবেই কাজ করে নি। কেন বা কীভাবে আমি এটি ডিবাগ করতে পারি তার কোনও ধারণা? প্রাসঙ্গিক ক্ষেত্রে আমি স্পেসম্যাকসে আছি।
— হেল্ডার এস রিবেইরো

1
এটি আমার সমস্যার ব্যাখ্যা দেয়। স্পষ্টতই আপনাকে লক্ষ্য সিনট্যাক্স টেবিলটি স্পষ্টভাবে উল্লেখ করতে হবে। আমার ক্ষেত্রে আমি ব্যবহার (modify-syntax-entry ?_ "w" rust-mode-syntax-table), তারপর এটি কাজ করে।
— হেল্ডার এস রিবেইরো

সিনট্যাক্স এন্ট্রি পরিবর্তন করার অযৌক্তিক প্রভাবগুলি কী কী?
— লুটেইন

এফটিআর: superword-modeচলাচলে কোনও প্রভাব ফেলবে না evil-mode। সুতরাং এটি সিনট্যাক্স টেবিলগুলি সংশোধন করার উপাদান নয়।
— হাই-অ্যাঞ্জেল

28

নিম্নলিখিত স্নিপেট একটি শব্দ হিসাবে ইভিলকে একটি ইম্যাক্স প্রতীক হিসাবে ব্যবহার করবে ।

(with-eval-after-load 'evil
    (defalias #'forward-evil-word #'forward-evil-symbol)
    ;; make evil-search-word look for symbol rather than word boundaries
    (setq-default evil-symbol-word-search t))

ভাষার সুবিধা অনুসারে এটির পরিবর্তনের ফলে এটির সুবিধা হয়:

foo-bar

একটিতে একটি চিহ্ন lisp-modeতবে দুটি প্রতীক (দ্বারা পৃথক -) ইন c-mode।


14

Spacemacs faq অফার নিম্নলিখিত ভাষা-নির্দিষ্ট সমাধান:

;; For python
(add-hook 'python-mode-hook #'(lambda () (modify-syntax-entry ?_ "w")))
;; For ruby
(add-hook 'ruby-mode-hook #'(lambda () (modify-syntax-entry ?_ "w")))
;; For Javascript
(add-hook 'js2-mode-hook #'(lambda () (modify-syntax-entry ?_ "w")))

এটি নিয়মিত ইমাসেও কাজ করে। উপর মন্দ সঙ্গে, এটা সব শব্দ সংক্রান্ত নির্দেশগুলো সাথে কাজ করে ( w, e, *, #, ইত্যাদি)

আরও সাধারণভাবে, এটি সমস্ত বড় মোডের জন্য এটি করবে:

(add-hook 'after-change-major-mode-hook
          (lambda ()
            (modify-syntax-entry ?_ "w")))

2
'prog-mode-hookপ্রতিটি ভাষা কভার করার জন্য একটি বিকল্প ব্যবহার করছেন ?
— বলপয়েন্টবেন

2

ইমাস 24 প্রবর্তিত superword-mode, একটি গৌণ মোড যা শব্দের অংশ হিসাবে আন্ডারস্কোরকে আচরণ করে। evil-modeএই সেটিংটিকে সম্মান করে।

এখানে ডকুমেন্টেশন রয়েছে:

(superword-mode &optional ARG)

টগল সুপারওয়ার্ড মুভমেন্ট এবং এডিটিং (সুপারওয়ার্ড মোড)। একটি উপসর্গ যুক্তি দিয়ে ARG, ARGধনাত্মক হলে সুপারওয়ার্ড মোড সক্ষম করুন এবং অন্যথায় এটি অক্ষম করুন। যদি লিস্প থেকে কল করা ARGহয়, বাদ দেওয়া বা শূন্য করা থাকলে মোডটি সক্ষম করুন ।

সুপারওয়ার্ড মোড একটি বাফার-স্থানীয় মাইনর মোড। যেমন, মধ্যে: এটি সক্রিয় শব্দের সংজ্ঞা যেমন যে প্রতীক অক্ষর শব্দের অংশের হিসাবে গণ্য করা হয় পরিবর্তন superword-mode, "this_is_a_symbol"এক শব্দ হিসাবে গণ্য।


আপনি যদি ব্যবহার করছেন evil-mode, দুর্ভাগ্যক্রমে, superword-modeসক্ষম হওয়ার পরে একটি বাগ রয়েছে । এটি যখন কিছু অনৈতিক আচরণের কারণ evil-forward-word-beginহয়: github.com/emacs-evil/evil/issues/721
— modulitos

0

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

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