নির্বাচিত অঞ্চল বা রেখাটি (যদি কোনও নির্বাচন না থাকে) ইমাসে উপরে বা নীচে সরানোর সহজতম উপায় কী? আমি গ্রহণের মতো একই কার্যকারিতাটি খুঁজছি (এম-আপকে আবদ্ধ, এম-ডাউন)।
নির্বাচিত অঞ্চল বা রেখাটি (যদি কোনও নির্বাচন না থাকে) ইমাসে উপরে বা নীচে সরানোর সহজতম উপায় কী? আমি গ্রহণের মতো একই কার্যকারিতাটি খুঁজছি (এম-আপকে আবদ্ধ, এম-ডাউন)।
উত্তর:
আবদ্ধ ট্রান্সপোজ-লাইন ব্যবহার করে একটি লাইন সরানো যেতে পারে C-x C-t
। অঞ্চলগুলি সম্পর্কে ডুনো যদিও।
আমি এই এলিস্প স্নিপেটটি পেয়েছি যা আপনি যা চান তা করেন, বাইন্ডিংগুলি পরিবর্তন করার প্রয়োজন ব্যতীত।
(defun move-text-internal (arg)
(cond
((and mark-active transient-mark-mode)
(if (> (point) (mark))
(exchange-point-and-mark))
(let ((column (current-column))
(text (delete-and-extract-region (point) (mark))))
(forward-line arg)
(move-to-column column t)
(set-mark (point))
(insert text)
(exchange-point-and-mark)
(setq deactivate-mark nil)))
(t
(beginning-of-line)
(when (or (> arg 0) (not (bobp)))
(forward-line)
(when (or (< arg 0) (not (eobp)))
(transpose-lines arg))
(forward-line -1)))))
(defun move-text-down (arg)
"Move region (transient-mark-mode active) or current line
arg lines down."
(interactive "*p")
(move-text-internal arg))
(defun move-text-up (arg)
"Move region (transient-mark-mode active) or current line
arg lines up."
(interactive "*p")
(move-text-internal (- arg)))
(global-set-key [\M-\S-up] 'move-text-up)
(global-set-key [\M-\S-down] 'move-text-down)
আপডেট: নিম্নলিখিত কোডটি পেতে মারম্যালেডmove-text
বা মেলপা থেকে প্যাকেজটি ইনস্টল করুন ।
আমি যা ব্যবহার করি তা এখানে, যা উভয় অঞ্চল এবং স্বতন্ত্র লাইনে কাজ করে:
(defun move-text-internal (arg)
(cond
((and mark-active transient-mark-mode)
(if (> (point) (mark))
(exchange-point-and-mark))
(let ((column (current-column))
(text (delete-and-extract-region (point) (mark))))
(forward-line arg)
(move-to-column column t)
(set-mark (point))
(insert text)
(exchange-point-and-mark)
(setq deactivate-mark nil)))
(t
(let ((column (current-column)))
(beginning-of-line)
(when (or (> arg 0) (not (bobp)))
(forward-line)
(when (or (< arg 0) (not (eobp)))
(transpose-lines arg)
(when (and (eval-when-compile
'(and (>= emacs-major-version 24)
(>= emacs-minor-version 3)))
(< arg 0))
(forward-line -1)))
(forward-line -1))
(move-to-column column t)))))
(defun move-text-down (arg)
"Move region (transient-mark-mode active) or current line
arg lines down."
(interactive "*p")
(move-text-internal arg))
(defun move-text-up (arg)
"Move region (transient-mark-mode active) or current line
arg lines up."
(interactive "*p")
(move-text-internal (- arg)))
(global-set-key [M-S-up] 'move-text-up)
(global-set-key [M-S-down] 'move-text-down)
আপনার চেষ্টা করা উচিত drag-stuff
!
এটি একক লাইনের পাশাপাশি গ্রীক Alt+ Up/ এর মতো Downনির্বাচিত অঞ্চল রেখার মতো কাজ করে!
এছাড়াও এটি আপনাকে Alt+ Left/ দিয়ে শব্দ সরাতে দেয় Right
যা আপনি খুঁজছেন ঠিক এটিই! এমনকি এটি ইএলপিএ রেপো থেকে পাওয়া যায় !
অন্যান্য সমাধানগুলি কখনই আমার পক্ষে কার্যকর হয়নি। তাদের মধ্যে কিছু বগি ছিল (ক্রম পরিবর্তন করার সময় লাইন ট্রান্সপোসিংয়ের সময়, ডাব্লুটিএফ?) এবং তাদের মধ্যে কিছু সঠিক অবস্থান বেছে নিয়েছিল, তাদের অবস্থানগুলিতে লাইনের অনির্বাচিত অংশ রেখে। তবে drag-stuff
ঠিক গ্রহের মতোই কাজ করে!
এবং আরও বেশি! আপনি একটি অঞ্চল নির্বাচন এবং Alt+ Left/ ব্যবহার করে চেষ্টা করতে পারেন Right! এটি নির্বাচিত অঞ্চলটিকে একটি অক্ষর দ্বারা বাম বা ডানে স্থানান্তরিত করবে। আশ্চর্য!
এটি বিশ্বব্যাপী সক্ষম করতে কেবল এটি চালান:
(drag-stuff-global-mode)
আমি লাইনগুলি উপরে / নিচে সরানোর জন্য কয়েকটি ইন্টারেক্টিভ ফাংশন লিখেছি:
;; move line up
(defun move-line-up ()
(interactive)
(transpose-lines 1)
(previous-line 2))
(global-set-key [(control shift up)] 'move-line-up)
;; move line down
(defun move-line-down ()
(interactive)
(next-line 1)
(transpose-lines 1)
(previous-line 1))
(global-set-key [(control shift down)] 'move-line-down)
কী-বাইন্ডিংগুলি হ'ল ইন্টেলিজ আইডিইএ শৈলী, তবে আপনি যা চান তা ব্যবহার করতে পারেন। আমার সম্ভবত কিছু ফাংশন প্রয়োগ করা উচিত যা অঞ্চলগুলিতেও পরিচালনা করে।
সক্রিয় অঞ্চল দ্বারা প্রসারিত বর্তমান লাইন বা রেখাগুলি সরানোর জন্য আমার স্নিপেট এখানে। এটি কার্সার অবস্থান এবং হাইলাইটেড অঞ্চলকে সম্মান করে। যখন অঞ্চলটি লাইন বর্ডারে (গুলি) শুরু / শেষ না হয় তখন লাইনগুলি ভাঙবে না। (এটি গ্রহণ দ্বারা অনুপ্রাণিত; আমি 'ট্রান্সপোজ-লাইন' এর চেয়ে বেশি সহজলভ্যভাবে ग्रहण পেলাম))
;; move the line(s) spanned by the active region up/down (line transposing)
;; {{{
(defun move-lines (n)
(let ((beg) (end) (keep))
(if mark-active
(save-excursion
(setq keep t)
(setq beg (region-beginning)
end (region-end))
(goto-char beg)
(setq beg (line-beginning-position))
(goto-char end)
(setq end (line-beginning-position 2)))
(setq beg (line-beginning-position)
end (line-beginning-position 2)))
(let ((offset (if (and (mark t)
(and (>= (mark t) beg)
(< (mark t) end)))
(- (point) (mark t))))
(rewind (- end (point))))
(goto-char (if (< n 0) beg end))
(forward-line n)
(insert (delete-and-extract-region beg end))
(backward-char rewind)
(if offset (set-mark (- (point) offset))))
(if keep
(setq mark-active t
deactivate-mark nil))))
(defun move-lines-up (n)
"move the line(s) spanned by the active region up by N lines."
(interactive "*p")
(move-lines (- (or n 1))))
(defun move-lines-down (n)
"move the line(s) spanned by the active region down by N lines."
(interactive "*p")
(move-lines (or n 1)))
ইমাস উইকিটিতে কেবল এর জন্য একটি এন্ট্রি রয়েছে:
http://www.emacswiki.org/emacs/MoveLine
চলমান অঞ্চলের জন্য:
কোনও বিল্ট-ইন নেই। আপনি ট্রান্সপোজ-লাইনগুলি (Cx Ct) ব্যবহার করতে পারেন তবে আপনি এটি বারবার ব্যবহার করতে পারবেন না। Http://www.schuerig.de/michael/blog/index.php/2009/01/16/line-movement-for-emacs/ এ ফাংশনগুলি দেখুন ।
অঞ্চলগুলিতেও এটি মানিয়ে নেওয়া সহজ হওয়া উচিত।
transpose-paragraph
ফাংশন আপনাকে সাহায্য করতে পারে।
আপনি ইমাস ম্যানুয়ালটিতে ট্রান্সপোজ বিভাগটি দেখতে চান । মূলত:
C-t
Transpose two characters (transpose-chars).
M-t
Transpose two words (transpose-words).
C-M-t
Transpose two balanced expressions (transpose-sexps).
C-x C-t
Transpose two lines (transpose-lines).
আমি এর জন্য স্মার্ট শিফট প্যাকেজটি (মেলপাতে) ব্যবহার করি। ডিফল্টরূপে এটি C-C <arrow>
একটি লাইন বা অঞ্চল সরানোর জন্য পুনঃতফসিল করে। এটি প্রধান-মোড-নির্দিষ্ট পরিমাণের (যেমন সি-বেসিক-অফসেট বা পাইথন-ইনডেন্ট-অফসেট) দ্বারা অনুভূমিকভাবে সরানো হয়। অঞ্চলগুলিতেও কাজ করে।
;; binds C-C <arrows>
(when (require 'smart-shift nil 'noerror)
(global-smart-shift-mode 1))