1. ホーム
  2. emacs

[解決済み] emacsで行や領域を上下に移動する

2023-02-21 09:16:40

質問

emacsで選択した領域や行(選択範囲がない場合)を上下に移動させる最も簡単な方法は何でしょうか?私はeclipseにあるのと同じ機能(M-up, M-downに束縛される)を探しています。

どのように解決するのですか?

行の移動は トランスポーズ-ライン に束縛される C-x C-t . リージョンは知らんけど。

私が見つけたのは これ elispのスニペットで、バインディングを変更する必要があることを除いて、あなたが望むことを行うことができます。

(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)