はてブロ@ama_ch

https://twitter.com/ama_ch

Emacsでカーソル位置から行頭まで削除する方法

Emacsには、デフォルトでカーソル位置から行頭まで削除(キル)するキーバインドが設定されていません。
C-u 0 C-kとかM-0 C-kでできます*1が、個人的によく使う機能なので1ストロークでいきたいですね。
なんかやり方ないかなーと探していたら、こんな便利なものがあるじゃない!

;; define the function to kill the characters from the cursor
;; to the beginning of the current line
(defun backward-kill-line (arg)
"Kill chars backward until encountering the end of a line."
(interactive "p")
(kill-line 0))

EmacsWiki: Backward Kill Line

これを.emacs.elに貼り付けて、C-S-kにglobal-set-keyします。

;; カーソル位置から行頭まで削除する
(defun backward-kill-line (arg)
  "Kill chars backward until encountering the end of a line."
  (interactive "p")
  (kill-line 0))
;; C-S-kに設定
(global-set-key (kbd "C-S-k") 'backward-kill-line)

設定を保存したら、

M-x load-file
.emacs.el

で動くようになります。


Emacsがまた便利になりました!やったね!!!

追記

C-u 0 C-k
M-0 C-k

なぜこれで行頭からカーソル位置まで削除できるのかわからなかったので、C-kの引数の取り方について調べてみました。
Emacsでヘルプを参照

C-h k C-k

C-h kで、次に入力したコマンドの解説が表示されます。


一部抜粋:

With prefix argument, kill that many lines from point.
Negative arguments kill lines backward.
With zero argument, kills the text before point on the current line.

対訳:

先頭に引数を付けると、カーソル位置から複数行をキルできます。
負の引数は後ろの行をキルします。
引数0は、現在行のカーソル位置から後ろをキルします。

なるほど、C-kに与える引数で動作が変わるのか!

*1:なぜこれでできるのかは分からない。