改變Emacs下的註釋程式碼方式以支援當前行(未選中情況下)的註釋/反註釋

weixin_34015860發表於2019-01-08

Emacs下支援多行程式碼的註釋/反註釋,命令是comment-or-uncomment-region。

我喜歡把它繫結在快捷鍵C-c C-/上,如下:

 

(global-set-key [?\C-c ?\C-/] 'comment-or-uncomment-region)


這樣當選定多行程式碼的時候就可以方便的進行註釋/反註釋了。

 

但是這個命令有一個小問題,那就是隻能針對當前選中的行(region)做操作。

如果當前沒有選中任何行的話就什麼也不做。

用過Eclipse的同學都知道,在Eclipse裡面用C-/來進行註釋/反註釋操作時,

如果選中多行則註釋/反註釋選中行,如果什麼都沒有選中,則針對當前游標所在行進行操作。

這個功能還是比較方便的,如何能讓Emacs也能做到這一點呢?

在自己的.emacs追加如下函式定義就可以了,這個函式會加入針對region的判斷和處理:

 

(defun my-comment-or-uncomment-region (beg end &optional arg)
  (interactive (if (use-region-p)
                   (list (region-beginning) (region-end) nil)
                 (list (line-beginning-position)
                       (line-beginning-position 2))))
  (comment-or-uncomment-region beg end arg)
)
(global-set-key [remap comment-or-uncomment-region] 'my-comment-or-uncomment-region)


現在Emacs的行為接近於Eclipse了,不過還是有幾處細微的不同:

 

(1)它不會像Eclipse那樣,在選中多行註釋的時候,把其中的空行也加上註釋

(2)Eclipse的註釋一律加在一行頂頭的位置,而Emacs會加在相應indent對齊的位置。

當然,具體的行為方式在Emacs中肯定是可以調整的,對我來說現在Emacs的方式已經可以滿足我的需要了。


參考url:http://www.emacswiki.org/emacs/WholeLineOrRegion


 

/********************************************************************

* 不落魄的書生的記事簿[blog.csdn.net/songyuanyao]

********************************************************************/

相關文章