[Emacs] 특정 영역을 이동시키기
Emacs에서 선택한 영역을 위/아래 라인으로 이동시키는 기능 소개.
... 쓸 모 없는 기능일지도 모른다. 왜냐하면 영역을 선택하고 cut(C-w) 한 뒤에 원하는 위치에 paste(C-y)하면 되기 때문이다. 그런데, 이런 기능을 지원하는 에디터가 대표적으로 TextMate 등등이 있는데 아무래도 있으면 비주얼적인 면에서 의외로 편한가보다.
자 그럼 무한확장을 자랑하는 Emacs 인 만큼 관련 기능을 구현해보자.
cua-mode와의 호환성 같은 건 없으리라 생각된다.
원문 참고:
... 쓸 모 없는 기능일지도 모른다. 왜냐하면 영역을 선택하고 cut(C-w) 한 뒤에 원하는 위치에 paste(C-y)하면 되기 때문이다. 그런데, 이런 기능을 지원하는 에디터가 대표적으로 TextMate 등등이 있는데 아무래도 있으면 비주얼적인 면에서 의외로 편한가보다.
자 그럼 무한확장을 자랑하는 Emacs 인 만큼 관련 기능을 구현해보자.
(defun move-region (start end n) "Move the current region up or down by N lines." (interactive "r\np") (let ((line-text (delete-and-extract-region start end))) (forward-line n) (let ((start (point))) (insert line-text) (setq deactivate-mark nil) (set-mark start)))) (defun move-region-up (start end n) "Move the current line up by N lines." (interactive "r\np") (move-region start end (if (null n) -1 (- n)))) (defun move-region-down (start end n) "Move the current line down by N lines." (interactive "r\np") (move-region start end (if (null n) 1 n))) (defun move-line-region-up (start end n) (interactive "r\np") (if (region-active-p) (move-region-up start end n) (move-line-up n))) (defun move-line-region-down (start end n) (interactive "r\np") (if (region-active-p) (move-region-down start end n) (move-line-down n))) (global-set-key (kbd "M-p") 'move-line-region-up) (global-set-key (kbd "M-n") 'move-line-region-down)영역을 선택하고 M-p 혹은 M-n 키를 누르면 선택한 영역이 위/아래로 이동하게 된다. 영역을 선택하지 않으면 현재 라인의 텍스트가 이동하게 된다.
cua-mode와의 호환성 같은 건 없으리라 생각된다.
원문 참고:
댓글
고맙습니다. ㅋㅋ
이 내용도 추가 되어야 되네요.^^