LoginSignup
1
1

More than 1 year has passed since last update.

emacs-lisp 複数行コメントアウト

Last updated at Posted at 2021-04-16

emacsで複数行コメントアウトがしたかったので、lispでショートカットキーを作ってみました。
コードは若干冗長な気がする。。

こちらを参考に作成。
http://ganmacs.hatenablog.com/entry/2013/12/01/140306

ドラッグして領域を選択し、Ctrl-/でコメントアウト。
領域の先頭行から末尾までをコメントアウトする仕様。

emacs.d/init.el
(defun lines-comment (begin end)
  (interactive "r")
  (save-excursion
    (if (region-active-p)
      (progn (goto-char begin)
      (beginning-of-line)
      (set-mark (point))
      (goto-char end)
      (end-of-line)
      (comment-or-uncomment-region (region-beginning) (region-end))
      )
      (beginning-of-line)
      (set-mark (point))
      (end-of-line)
      (comment-or-uncomment-region (region-beginning) (region-end)))))
(global-set-key (kbd "C-/") 'lines-comment)

追記

上記のコードだとファイルを開いてからC-@などでリージョンを選択していない状態ではThe mark is not set now, so there is no regionというエラーになってしまっていた。(interactive "r")のところでリージョン選択されていることが必要なようだった。
  なので(interactive)にしてリージョンの取得は(region-beginning)(region-end)で行う。(interactive "r")を使うと変数beginendでリージョンを取得できてよいと思っていたけれど、よく理解できていなかった。

emacs.d/init.el
(defun lines-comment ()
  (interactive)
  (save-excursion
    (if (region-active-p)
      (progn 
        (setq original_begin (region-beginning))
        (setq original_end (region-end))
        (goto-char (region-beginning))
        (beginning-of-line)
        (set-mark (point))
        (goto-char original_end)
        (end-of-line)
        (comment-or-uncomment-region (region-beginning) (region-end))
      )
      (beginning-of-line)
      (set-mark (point))
      (end-of-line)
      (comment-or-uncomment-region (region-beginning) (region-end))
)
))
(global-set-key (kbd "C-/") 'lines-comment)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1