計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

mykieを使った便利技

mykie

一つのキーバインドに状況によって幾つかのコマンドを割りあてることができるパッケージ

github.com

MELPAからパッケージをインストールして設定は

(require 'mykie)
(setq mykie:use-major-mode-key-override t)
(mykie:initialize)

参考

mykieを使った便利技がここで紹介されていた
この二つの技がかなり使用頻度も高く便利なのでおすすめ

masakinpo.hatenablog.com

qiita.com

そのまま使わせてもらう

1行カット、コピー

通常C-wはリージョンのカットだが、リージョンを選択してない状態でC-wとすることでカーソル位置の1行を丸ごとカットできるようにする。リージョン選択時はいつも通りにリージョンのカット。
同じようにM-wで1行コピーも可能に。

(mykie:set-keys nil
  "C-w"
  :default     (kill-region (line-beginning-position)(line-end-position))
  :region      kill-region
  "M-w"
  :default     (kill-ring-save (line-beginning-position)(line-end-position))
  :region      kill-ring-save 
  )

1行 or リージョンの上下移動

リージョン選択時は選択範囲を、そうでない時はカーソル位置の1行を上下に移動させる設定。
M-P(M+shift+p)で上へ、M-N(M+shift+n)で下へ移動するキーバインド

(defun move-line-down ()
  (interactive)
  (let ((col (current-column)))
    (save-excursion
      (forward-line)
      (transpose-lines 1))
    (forward-line)
    (move-to-column col)))

(defun move-line-up ()
  (interactive)
  (let ((col (current-column)))
    (save-excursion
      (forward-line)
      (transpose-lines -1)
      )
    (forward-line -1)
    (move-to-column col)))

(defun move-region-down ()
  (interactive)
  (let ((col (current-column)))
    (kill-region (region-beginning) (region-end))
    (forward-line 1)
    (yank)
    (set-mark  (region-beginning) (region-end))
    (move-to-column col)))

(defun move-region-up ()
  (interactive)
  (let ((col (current-column)))
    (kill-region (region-beginning) (region-end))
    (forward-line -1)
    (yank)
    (set-mark (region-beginning) (region-end))
    (move-to-column col)))

(mykie:set-keys nil
  "M-P" ;; ここでキーバインドを設定 上へ移動
  :default     move-line-up
  :region      move-region-up
  "M-N" ;; ここでキーバインドを設定 下へ移動
  :default     move-line-down
  :region      move-region-down
  )