একাধিক-কার্সারের মূলসূত্র


55

আমি সম্প্রতি সম্পর্কে শিখেছি multiple-cursors, এবং এটি একটি খুব দরকারী প্যাকেজ মত মনে হচ্ছে। আমি মূল রেপোতে ডকুমেন্টেশন দিয়েছিলাম তবে কমান্ডগুলি এখনও আমার কাছে কিছুটা অস্পষ্ট দেখাচ্ছে।

আমি তখন ইমাকস রকসে ভিডিওটি দেখেছি ! এবং ভিডিওটি দুর্দান্ত, তবে এটি কীভাবে করা যায় multiple-cursorsতার চেয়ে বেশিরভাগ ক্ষেত্রে কী করতে সক্ষম তা নিয়ে দৃষ্টি নিবদ্ধ করে।

এমন কি কোনও ওয়াক-থ্রো, টিউটোরিয়াল বা উদাহরণ রয়েছে যা এর সর্বাধিক প্রাথমিক কার্যকারিতা চিত্রিত করে?


4
আমি multiple-cursorsকেবল README ফাইলটি পড়ে খুব তাড়াতাড়ি উঠে দৌড়াতে সক্ষম হয়েছি । আমার সুপারিশটি কেবল শিখতে হবে mc/mark-next-like-this। এটি ব্যবহার করে দেখুন এবং এটি কী করে তা সম্পর্কে পরিচিত হন। সেখান থেকে পুনরায় README দেখুন whenever ভিডিওটি নতুনদের জন্য সহায়ক হবে।
নিসপিও

সম্পূর্ণ একমত! এটি কীভাবে ব্যবহার করবেন তা একেবারে অস্পষ্ট। আমি কেবল লাইনগুলি মাস্ক করেছি তারপরে কেবিডি বাইন্ডেডযুক্ত এমসি / সম্পাদনা-লাইনগুলি করেছি (গিথুব হিসাবে উল্লিখিত এমএক্সের মাধ্যমে নয়) তবে আমি একাধিক কার্সার দেখতে পাচ্ছি তবে তারা কেবল কোনও পাঠ্য ইনপুট পরে অদৃশ্য হয়ে যায়
ডিমা ফমিন

উত্তর:


19

@ বাসতিবে বর্ণিত ব্যবহারগুলি ছাড়াও, আমি একটি গ্রুপের লাইনের শুরু / শেষ থেকে পাঠ্য যুক্ত করতে বা সরানোর জন্য একাধিক কার্সার ব্যবহার করি:

  1. আগ্রহের ক্ষেত্রের শুরু বা শেষের দিকে পয়েন্ট সরান
  2. কল set-rectangular-region-anchor( আপনার কাছে যা পছন্দসই হবে তার কাছে আবদ্ধ, আমি মনে করি ম্যাগনারদের কাছ থেকে পরামর্শটি ছিল H-space, যদি আপনার কাছে হাইপার কী থাকে)
  3. আপনি সম্পাদনা করতে চান এমন প্রতিটি লাইনে কার্সার না হওয়া পর্যন্ত পয়েন্ট ( C-nএবং C-p) দ্বারা পয়েন্টটি সামনে বা পিছনে সরানো হয়েছে
  4. প্রয়োজন অনুসারে পাঠ্য সন্নিবেশ করান বা মুছুন, C-eসেখানে পরিবর্তন করতে allyচ্ছিকভাবে লাইনের ( ) প্রান্তে চলে যান ।

আপনি লাইনগুলি পিছনে পিছনে সরানোর জন্য ইত্যাদি ব্যবহার করতে পারেন forward-word, forward sentenceযা প্রতিটি লাইনের পাঠ্য একরকম না হলেও আপনি প্রতিটি লাইনে চতুর্থ শব্দটি সম্পাদনা করতে পারবেন।

উদাহরণ হিসাবে, আমি এই ধরণের কাজটি সর্বদা করি:

  • C-u M-!ls / test-dat / pp5 / * fsaRETURN

    এটি বাফারে পিপি 5 ডিরেক্টরিতে থাকা কনটেন্টগুলি সন্নিবেশ করায়। আমি !তালিকাটির শুরুতে পয়েন্ট রাখি :

!/test-dat/pp5/ONAB-6-5_Frag#89.fsa
/test-dat/pp5/QCJB-22-5_Frag#90.fsa
/test-dat/pp5/ONGL-1-5_Frag#102.fsa
/test-dat/pp5/ONGL-1-5_Frag#78.fsa
  • প্রতিটি লাইনে এক্সিকিউটেবল-এর পাথ যোগ করুন H-space, C-nএক্স 4
  • প্রতিটি লাইন দিয়ে নকল C-k C-y space C-y C-a

!/test-dat/pp5/ONAB-6-5_Frag#89.fsa /test-dat/pp5/ONAB-6-5_Frag#89.fsa
!/test-dat/pp5/QCJB-22-5_Frag#90.fsa /test-dat/pp5/QCJB-22-5_Frag#90.fsa
!/test-dat/pp5/ONGL-1-5_Frag#102.fsa /test-dat/pp5/ONGL-1-5_Frag#102.fsa
!/test-dat/pp5/ONGL-1-5_Frag#78.fsa /test-dat/pp5/ONGL-1-5_Frag#78.fsa
  • M-dx 3 C-d C-fx3 M-dx3 <এর সাহায্যে প্রথম বিভাগটি পরিবর্তনশীল নামে ট্রিম করুন <-

ONAB-6-5 <-! /test-dat/pp5/ONAB-6-5_Frag#89.fsa
QCJB-22-5 <-! /test-dat/pp5/QCJB-22-5_Frag#90.fsa
ONGL-1-5 <-! /test-dat/pp5/ONGL-1-5_Frag#102.fsa
ONGL-1-5 <-! /test-dat/pp5/ONGL-1-5_Frag#78.fsa
  • তারপরে এটি লোড করতে ফাংশনটিতে প্রকৃত ফাইলের নামটি মুড়িয়ে দিন: read.file ( C-d" C-e")RETURN

ONAB-6-5 <- read.file("/test-dat/pp5/ONAB-6-5_Frag#89.fsa")
QCJB-22-5 <- read.file("/test-dat/pp5/QCJB-22-5_Frag#90.fsa")
ONGL-1-5 <- read.file("/test-dat/pp5/ONGL-1-5_Frag#102.fsa")
ONGL-1-5 <- read.file("/test-dat/pp5/ONGL-1-5_Frag#78.fsa")

এবং ভয়েলা, আপনি সেই তালিকাটি পড়তে কোডের মধ্যে একটি ফাইল তালিকা রূপান্তর করেছেন। প্রকৃতপক্ষে বর্ণনা করার চেয়ে এটি বর্ণনা করা বেশ শক্ত!


3
আপনি যদি একই কাজটি ঘন ঘন করেন তবে আপনি এটি একটি কীবোর্ড ম্যাক্রোতে মুড়িয়ে রাখতে পারেন। কীবোর্ড ম্যাক্রোগুলি এবং multiple-cursorsসত্যিই শক্তিশালী সংমিশ্রণ তৈরি করতে পারে।
নিসপিও

@নিস্পিও রাজি! কখনও কখনও আমি একই প্রক্রিয়া পুনরাবৃত্তি করছি এবং একটি ম্যাক্রো দরকারী হবে। প্রায়শই, যদিও কাজের প্রবাহের মাঝামাঝি সময়ে ছোট ছোট পার্থক্য রয়েছে যার জন্য সামান্য পরিবর্তন প্রয়োজন যা ম্যাক্রোকে 'ব্রেক' করে।
টাইলার

1
আপনি প্রায়শই সঠিক অবস্থানটি বর্ণনা করতে পারেন যেখানে আপনি কার্সারটি একটি রেজিএক্সএক্সপ ব্যবহার করে যেতে চান jump এই জাতীয় ক্ষেত্রে, phi-searchকমান্ডগুলি সহ নেভিগেট করার চেয়ে আরও শক্তিশালী হতে পারেM-f (x3)
নিসপিও

@ নিস্পিও নিশ্চিত, এটি পরিস্থিতির উপর নির্ভর করে। ধারাবাহিকভাবে কাঠামোগত নামের সাথে শব্দ দিয়ে সরানো সহজ। আমি একাধিক কার্সারে অনুসন্ধান ব্যবহার করিনি কারণ অন্তর্নির্মিত ইমাস সন্ধানের আদেশগুলি এমসিতে ভঙ্গুর rit আমি সম্পর্কে জানতাম না phi-search, দুর্দান্ত দেখাচ্ছে!
টাইলার

22

আমার কাছে সাধারণত দুটি ঘন ঘন ব্যবহারের মামলা রয়েছে multiple-cursors:

  • কিছু স্ট্রিং প্রতিস্থাপন করুন। একটি স্ট্রিংয়ের একটি উদাহরণ চিহ্নিত করুন, তারপরে এটি ব্যবহার করুন mc/mark-next-like-thisএবং এর mc/mark-previous-like-thisআরও উদাহরণ চিহ্নিত করুন। আমি তারপরে তত্ক্ষণাত্ C-wপ্রতিটি ঘটনা মুছতে এবং তার পরিবর্তে একটি নতুন স্ট্রিং লিখুন hit কোডে কোনও ভেরিয়েবলের নাম পরিবর্তন করতে আমি প্রায়শই এটি ব্যবহার করি।
  • একসাথে বেশ কয়েকটি জায়গা সম্পাদনা করুন। হয় আগের মতো স্ট্রিংয়ের বেশ কয়েকটি উদাহরণ চিহ্নিত করুন, তবে তাত্ক্ষণিকভাবে নির্বাচন বাছাইটি বাতিল করুন (তবে কার্সার নয়) C-g, অথবা চিহ্ন এবং বিন্দুটি বিভিন্ন লাইনের একই কলামে রাখুন এবং mc/edit-linesপ্রতি লাইনে একটি কার্সার পেতে ব্যবহার করুন । আপনি এখন নিয়মিত সম্পাদনা কমান্ডগুলি ব্যবহার করতে পারেন যা এই কার্সারগুলির প্রত্যেকটিতে কাজ করে।

প্রথম ব্যবহারের ক্ষেত্রে বিশেষভাবে কার্যকর expand-region। আমি করেছি er/expand-regionআবদ্ধ C-j, এবং mc/mark-next-like-thisএবং mc/mark-previous-like-thisকরতে C->এবং C-<। এটির সাহায্যে আমি খুব সহজে শব্দ পয়েন্টটি নির্বাচন করতে পারি এবং তত্ক্ষণাত্ সেই শব্দটির পরবর্তী / পূর্ববর্তী চিহ্নটি চিহ্নিত করতে পারি।

দ্বিতীয় ব্যবহারের ক্ষেত্রে আমার জন্য বেশিরভাগ ম্যাক্রোগুলির ব্যবহার প্রতিস্থাপন। ম্যাক্রো রেকর্ডিংয়ের পরিবর্তে এবং তারপরে বেশ কয়েকটি জায়গায় প্রয়োগ করে, আমি প্রতিটি জায়গাতে একটি কার্সার রেখেছি এবং সমস্ত জায়গায় একযোগে অপারেশন করব।


ধন্যবাদ @bastibe। কোন বিশেষ বাইন্ডিং আপনার বা multiple-cursors যেমন জন্য সুপারিশ mark-next-like-this& mark-previous-like-this?
আমিলিও ওয়াজকেজ-রেইনা

@ user815423426 যেমন পোস্টে রূপরেখা, আমি ব্যবহার C->এবং C-<জন্য mark-next-like-thisএবং mark-previous-like-this
814

অনুসন্ধান এবং প্রতিস্থাপনের জন্য স্ট্যান্ডার্ড এম-% ব্যবহার করবেন না কেন ?
দিমা ফমিন

6

আমি কিছু অতিরিক্ত যুক্ত করতে চাই যা আমি মাঝে মাঝে ব্যবহার করি multiple-cursors

আমি নিম্নলিখিতটি দরকারী হিসাবে খুঁজে পেয়েছি:

iy যেতে যেতে টু গৃহস্থালির কাজ

কখনও কখনও, আপনি নিজেকে পরের #বা পরবর্তী ,বা কিছু নির্দিষ্ট ডিলিমিটারে যাওয়ার প্রয়োজন মনে করেন find এটি বিশেষত সহজ যখন আপনার প্রতিটি কার্সারের জন্য বিভিন্ন সংখ্যক শব্দের জুড়ে সরানো প্রয়োজন। এটি ফাংশন সরবরাহ করে iy-go-to-charএবং iy-go-to-char-backward, যা আপনি ভালভাবে বাঁধতে এবং ব্যবহার করতে পারেন।

প্রসারিত-অঞ্চল

এটি অনুরূপ কারণের জন্য সত্যই কার্যকর iy- যখন আপনি প্রতিটি কার্সারের নীচে কিছুটা আলাদা লাইন পেয়ে থাকেন এবং আপনি সম্ভবত পয়েন্ট বা অনুরূপের নিচে উদ্ধৃত স্ট্রিংটি নির্বাচন করতে চান।

কাস্টম স্টাফ

এগুলি এমন জিনিস যা আমার কনফিগারেশনে কেবলমাত্র এলিস্প, তবে আমি দরকারী মনে করি। সম্ভবত আমার লিখিত না।

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

(defun prompt-for-insert ()
  (interactive)
  (insert (read-string "Insert: ")))

বিন্দুতে বৃদ্ধির সংখ্যা
এটি হয় এসও, অথবা ইমাকসিকি থেকে এসেছে। নিশ্চিত যা না। এটি নিজস্বভাবে বেশ কার্যকর এবং যখন এটির সংমিশ্রণে ব্যবহৃত হয়mc/insert-numbers

(defun my-increment-number-decimal (&optional arg)
  "Increment the number forward from point by 'arg'."
  (interactive "p*")
  (save-excursion
    (save-match-data
      (let (inc-by field-width answer)
        (setq inc-by (if arg arg 1))
        (skip-chars-backward "0123456789")
        (when (re-search-forward "[0-9]+" nil t)
          (setq field-width (- (match-end 0) (match-beginning 0)))
          (setq answer (+ (string-to-number (match-string 0) 10) inc-by))
          (when (< answer 0)
            (setq answer (+ (expt 10 field-width) answer)))
          (replace-match (format (concat "%0" (int-to-string field-width) "d")
                                 answer)))))))

এভাল-এ-রিপ্লেস
এটি অতি শক্তিশালী, এবং কিছু সত্যিকারের দরকারী বিট 'এন' টুকরো সক্ষম করে। এটি কার্সারের পিছনে যা কিছু সেক্সপ রয়েছে তার মূল্যায়ন করে এবং এটি মূল্যায়নের ফলাফল সন্নিবেশ করে।
এটির সাথে মিশ্রণ করুন multiple-cursors-numbersউদাহরণস্বরূপ দুটি, বা 0 1 2 0 1 2 0 1 2প্রতিটি লাইন বা কিছু কিছু জুড়ে যায় এমন একটি সিরিজ powers োকান । (আমি এই দুটি কার্যকরভাবেই সম্পন্ন করেছি) বা s.elডিফল্ট জিনিসগুলির সাথে সেই ক্লান্তিকর জাভা কনফিগারেশনটি লিখতে এটি ব্যবহার করুন । আপনি প্রতিটি লিখুন CONFIG_VALUE_VARIABLE, তারপরে CONFIG_VALUE_VARIABLE = "configValueVariable"দৌড় দিয়ে এটিকে রূপান্তর করুন s-camel-case

(defun eval-and-replace ()
  (interactive)
  (let ((value (eval (preceding-sexp))))
    (kill-sexp -1)
    (insert (format "%s" value))))

আই-গো-টু-চর সুপার সহায়ক। শুধু আমি যা খুঁজছিলাম।
হেনরিচ হার্টম্যান

1
  1. আপনি যা চান তা শেষ * তে যান।
  2. প্রেস C-S-bবা M-S-bপিছনের দিকে নির্বাচন করার জন্য যতক্ষণ না আপনি একটি অংশ নির্বাচিত পেতে। আপনি শিফট বাম তীর ব্যবহার করতে পারেন।
  3. তারপরে টিপুন C->( >আপনার কীবোর্ডের কী এর উপরে কীটি থাকলে শিফট টিপুন) যতক্ষণ না আপনি একাধিক আইটেম নির্বাচন না করে।

* পিছনের দিকটি নির্বাচন করা গুরুত্বপূর্ণ বা প্রথম নির্বাচনটি কার্সরটিকে ভুল অবস্থানে রাখবে।

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