পাইথনের জন্য ইমাকস বাল্ক ইনডেন্ট


132

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

আমি অভিজ্ঞ ইম্যাকস ব্যবহারকারী নই, তবে এসএসএসের মাধ্যমে কাজ করার জন্য এটি সেরা সরঞ্জাম is আমি কোনও কমান্ড লাইনে (উবুন্টু) ইম্যাক্স ব্যবহার করছি, গুই হিসাবে নয়, যদি এতে কোনও পার্থক্য আসে।


5
C-c >ডান জন্য। C-c <বাম দিকে
থমমে গওদা

উত্তর:


213

আপনি যদি ইমাস ব্যবহার করে পাইথন প্রোগ্রামিং করে থাকেন তবে আপনার সম্ভবত অজগর-মোড ব্যবহার করা উচিত। কোডের ব্লক চিহ্নিত করার পরে পাইথন-মোড সহ,

C-c >অথবা C-c C-l অঞ্চলটি 4 টি স্থানকে ডানে সরিয়ে দিন

C-c <বা C-c C-r অঞ্চলটি 4 টি স্থানকে বামে স্থানান্তরিত করুন

আপনার যদি দুটি স্তরের ইনেনডেনশন বা কিছু স্বেচ্ছাচারিত পরিমাণ দ্বারা কোডটি স্থানান্তর করতে হয় তবে আপনি একটি যুক্তি দিয়ে কমান্ডটি উপস্থাপন করতে পারেন:

C-u 8 C-c > অঞ্চলটি 8 টি স্পেস ডানদিকে স্থানান্তরিত করুন

C-u 8 C-c < অঞ্চলটি 8 টি স্থানকে বামে স্থানান্তরিত করুন

আর একটি বিকল্প M-x indent-rigidlyযা ব্যবহার করতে বাধ্য তা হল C-x TAB:

C-u 8 C-x TAB অঞ্চলটি 8 টি স্পেস ডানদিকে স্থানান্তরিত করুন

C-u -8 C-x TAB অঞ্চলটি 8 টি স্থানকে বামে স্থানান্তরিত করুন

আয়তক্ষেত্রাকারী কমান্ডগুলি দরকারী যা পাঠ্যের লাইনের পরিবর্তে পাঠ্যের আয়তক্ষেত্রগুলিতে কাজ করে।

উদাহরণস্বরূপ, একটি আয়তক্ষেত্রাকার অঞ্চল চিহ্নিত করার পরে,

C-x r o আয়তক্ষেত্রাকার অঞ্চলটি পূরণ করার জন্য ফাঁকা স্থান সন্নিবেশ করান (কার্যকরভাবে কোডটি ডানদিকে সরানো)

C-x r k আয়তক্ষেত্রাকার অঞ্চলটিকে হত্যা করে (কার্যকরভাবে কোডটিকে বামে স্থানান্তরিত করা হয়)

C-x r tএকটি স্ট্রিংটি দিয়ে আয়তক্ষেত্রটি প্রতিস্থাপনের জন্য অনুরোধ করে। প্রবেশের C-u 8 <space>পরে 8 টি স্পেস প্রবেশ করবে।

পুনশ্চ. উবুন্টু দিয়ে, পাইথন-মোডকে সমস্ত .py ফাইলগুলির জন্য ডিফল্ট মোড তৈরি করতে, কেবল python-modeপ্যাকেজটি ইনস্টল করুন ।


ধন্যবাদ যে পুরোপুরি কার্যকর। Emacs22 দিয়ে পাইথন-মোডটি সমস্ত .py ফাইলের সাথে স্বয়ংক্রিয়ভাবে সক্ষম হয় না? যাইহোক, সিসি> ঠিকঠাক কাজ করে।
ভার্নন

@ ভার্নন: C-c >পাইথন-মোড.এলে সংজ্ঞায়িত করা হয়েছে, সুতরাং আমি মনে করি আপনি অবশ্যই python-modeপ্যাকেজটি কোনও কোনও জায়গায় ইনস্টল করে রেখেছেন । খুশি এটা আপনার জন্য কাজ করে।
আনতুবু

1
সিসি> পাইথন-মোড ইনস্টল না করে ইম্যাক্স 23.2 এ সূক্ষ্মভাবে কাজ করে কারণ প্রদত্ত পাইথন.এল
কোডাসোন

@ ল্যান্ডস্ট্যাটিক: তথ্যের জন্য ধন্যবাদ। এটি আমাকে ভাবতে বাধ্য করে যে উপরে বর্ণিত সমস্ত কমান্ডগুলি পাইথন-মোড.এল বা পাইথন.এল এর জন্য একই কাজ করে?
আনটবু

2
@ রেডবোট: C-c C-lএবং আপনি নিজেরাই C-c C-rসেট আপ করেছেন কাস্টম বাইন্ডিং। আপনি যদি চালনা করেন emacs -q(কোনও init ফাইল লোড না করে ইম্যাক চালাতে) আপনি দেখতে পাবেন পাইথন মোডের জন্য C-c C-lবা কোনও বাঁধাই নেই C-c C-r
আনটবু

9

ডিফল্টরূপে indent-regionম্যাপ করা ছাড়াও , C-M-\আয়তক্ষেত্র সম্পাদনা কমান্ড পাইথনের জন্য খুব দরকারী। একটি অঞ্চলকে সাধারণ হিসাবে চিহ্নিত করুন, তারপরে:

  • C-x r t( string-rectangle): আপনি প্রতিটি লাইনে প্রবেশ করতে চান এমন অক্ষরগুলির জন্য আপনাকে অনুরোধ জানাবে; একটি নির্দিষ্ট স্থান ফাঁকা করার জন্য দুর্দান্ত
  • C-x r k( kill-rectangle): একটি আয়তক্ষেত্র অঞ্চল অপসারণ; ইন্ডেন্টেশন সরানোর জন্য দুর্দান্ত

আপনিও C-x r y( yank-rectangle) করতে পারেন তবে এটি খুব কমই কার্যকর।


4

indent-regionম্যাপ করা C-M-\উচিত কৌশলটি করা উচিত।


3
এটা ভয়ানক পরামর্শ। পাইথন ইন্ডেন্টেশন অনুমান করা যায় না (যেহেতু এটি সিনট্যাক্স!) সুতরাং পরিচয়-অঞ্চলটি অকেজো।
স্যাম ক্লিয়ারম্যান

1

আমি আমার ইনডেন্টিং এবং আন-ইন্ডেন্টিং পরিচালনা করতে এই ফাংশনটি ব্যবহার করছি:

(defun unindent-dwim (&optional count-arg)
  "Keeps relative spacing in the region.  Unindents to the next multiple of the current tab-width"
  (interactive)
  (let ((deactivate-mark nil)
        (beg (or (and mark-active (region-beginning)) (line-beginning-position)))
        (end (or (and mark-active (region-end)) (line-end-position)))
        (min-indentation)
        (count (or count-arg 1)))
    (save-excursion
      (goto-char beg)
      (while (< (point) end)
        (add-to-list 'min-indentation (current-indentation))
        (forward-line)))
    (if (< 0 count)
        (if (not (< 0 (apply 'min min-indentation)))
            (error "Can't indent any more.  Try `indent-rigidly` with a negative arg.")))
    (if (> 0 count)
        (indent-rigidly beg end (* (- 0 tab-width) count))
      (let (
            (indent-amount
             (apply 'min (mapcar (lambda (x) (- 0 (mod x tab-width))) min-indentation))))
        (indent-rigidly beg end (or
                                 (and (< indent-amount 0) indent-amount)
                                 (* (or count 1) (- 0 tab-width))))))))

এবং তারপরে আমি এটিকে একটি কীবোর্ড শর্টকাটে বরাদ্দ করি:

(global-set-key (kbd "s-[") 'unindent-dwim)
(global-set-key (kbd "s-]") (lambda () (interactive) (unindent-dwim -1)))

1

আমি একজন ইমাস নতুন, সুতরাং এই উত্তরটি সম্ভবত এটি অকেজো এর সীমানা।

এখনও অবধি উল্লিখিত কোনও উত্তর dictবা এর মতো আক্ষরিকের পুনরায় প্রবেশের বিষয়টি কভার করে না list। উদাহরণস্বরূপ: আপনি এবং নিম্নলিখিত সংস্থাগুলি যদি সংক্ষিপ্তভাবে আটকানো দরকার এবং উদাহরণস্বরূপ এটি পুনরায় ইন্টেন্ট করা দরকার হয় তবে উদাহরণস্বরূপ M-x indent-regionবা M-x python-indent-shift-rightসংস্থাটি সাহায্য করবে না:

    foo = {
  'bar' : [
     1,
    2,
        3 ],
      'baz' : {
     'asdf' : {
        'banana' : 1,
        'apple' : 2 } } }

এটি মনে হয় যে M-x indent-regionকিছুটা বোধগম্যভাবে করা উচিত python-mode, তবে এটি (এখনও) হয়নি।

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

সুতরাং আমি এই ধরনের ক্ষেত্রে যা করছি তাড়াতাড়ি F3, Ctrl-n (বা নীচে তীর), ট্যাব, এফ 4 এর মতো একটি কীবোর্ড ম্যাক্রো রেকর্ড করা হচ্ছে <f3> C-n TAB <f4>এবং তারপরে ম্যাক্রো প্রয়োগ করতে F4 বারবার ব্যবহার করা কয়েক কীট্রোক সংরক্ষণ করতে পারে। অথবা আপনি C-u 10 C-x eএটি 10 ​​বার প্রয়োগ করতে পারেন।

(আমি জানি এটি খুব বেশি শোনায় না, তবে ডাউন-তীরটি না হারিয়ে 100 লাইনের আবর্জনা পুনরায় প্রবেশের চেষ্টা করুন, এবং তারপরে 5 লাইন উপরে গিয়ে পুনরাবৃত্তি করতে হবে;)))


1

আমি নিম্নলিখিত স্নিপেট ব্যবহার। ট্যাবটিতে যখন নির্বাচনটি নিষ্ক্রিয় থাকে, তখন এটি বর্তমান লাইনে প্রবেশ করায় (যেমন এটি সাধারণত হয়); যখন নির্বাচনটি নিষ্ক্রিয় থাকে, তখন এটি পুরো অঞ্চলটিকে ডানদিকে প্রবেশ করে।

(defun my-python-tab-command (&optional _)
  "If the region is active, shift to the right; otherwise, indent current line."
  (interactive)
  (if (not (region-active-p))
      (indent-for-tab-command)
    (let ((lo (min (region-beginning) (region-end)))
          (hi (max (region-beginning) (region-end))))
      (goto-char lo)
      (beginning-of-line)
      (set-mark (point))
      (goto-char hi)
      (end-of-line)
      (python-indent-shift-right (mark) (point)))))
(define-key python-mode-map [remap indent-for-tab-command] 'my-python-tab-command)

1

ইন্টারেক্টিভভাবে ইনডেন্টেশন করুন।

  1. ইন্টেন্ট করা অঞ্চল নির্বাচন করুন।
  2. Cx TAB
  3. ইন্টারেক্টিভভাবে ইনডেন্ট করতে তীরগুলি ( <-এবং ->) ব্যবহার করুন ।
  4. Escআপনার প্রয়োজনীয় ইনডেন্টেশনটি শেষ হয়ে গেলে তিনবার টিপুন ।

আমার পোস্ট থেকে অনুলিপি করা হয়েছে: ইম্যাক্সে কয়েকটি লাইন ইনডেন্ট করুন


-2

আমি সর্বজনীনভাবে এরকম কিছু করি

;; intent whole buffer 
(defun iwb ()
  "indent whole buffer"
  (interactive)
  ;;(delete-trailing-whitespace)
  (indent-region (point-min) (point-max) nil)
  (untabify (point-min) (point-max)))

2
যেহেতু হোয়াইটস্পেস পাইথনের সিনট্যাক্সের অংশ, তাই পুরো ফাইলের ইনডেন্ট-অঞ্চলটি একটি খারাপ ধারণা।
ড্যানিয়েল স্টুটজবাচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.