Emacs では様々なグローバルマイナーモードが存在したりしていていつでも使えるようなコマンドが多数存在するのでここでまとめて定義している。
が、Hydra 関係もここに書くと項目が大きくなりすぎるので、それはまた別途定義している。
(if (eq window-system 'ns)
(progn
(setq ns-alternate-modifier (quote super)) ;; option => super
(setq ns-command-modifier (quote meta)))) ;; command => meta
C-h で文字を消せないと不便なのでずっと昔からこの設定は入れている。
(keyboard-translate ?\C-h ?\C-?)
(keymap-global-set "C-h" nil)
string-replace はよく使うのでそれなりに使いやすいキーにアサインしている
(keymap-global-set "M-g r" 'replace-string)
replace-regexp もまあまあ使うけどそれはキーを当ててないのでどこかでなんとかしたい。 Hydra 使う?
C-\ で skk-mode を起動できるようにしている。 C-x C-j の方も設定は生きているが使ってない。っていうか忘れてた。
(keymap-global-set "C-\\" 'skk-mode)
余談だけど org-mode とか commit message 書く時とかは自動で有効になるようにしたい気はする。
デフォルトだと C-s でインクリメンタルサーチが起動するが swiper の方が絞り込みができて便利だしカッチョいいのでそっちを使うようにしている
(keymap-global-set "C-s" 'swiper)
C-x o はデフォルトだと順番に window を移動するコマンドだが ace-window を使えばたくさん画面分割している時の移動が楽だし 2分割の時は元の挙動と同様に2つの window を行き来する感じになので完全に置き換えても大丈夫と判断して、置き換えている。
(keymap-global-set "C-x o" 'ace-window)
ace-window は他にもコマンドがあって Hydra の方で ace-swap-window は使えるようにしている
シフトキーを押しながらカーソルキーを押すことでも window を移動できるようにしている
(windmove-default-keybindings)
ただし org-mode のキーバインドとぶつかるので実はあまり使ってないしそろそろ無効にしてもいいんじゃないかなという気もしている
undo と redo には undo-fu を使っている
(keymap-global-set "C-/" 'undo-fu-only-undo)
(keymap-global-set "C-M-/" 'undo-fu-only-redo)
Mac だとデフォルト状態だと \ を入れると円マークになるのだがプログラムを書く上ではバックスラッシュであってほしいので円マークが入力された時はバックスラッシュが入力されたように扱われるようにしている。
(define-key global-map [?¥] [?\\])
(define-key global-map [?\C-¥] [?\C-\\])
(define-key global-map [?\M-¥] [?\M-\\])
(define-key global-map [?\C-\M-¥] [?\C-\M-\\])
ただ、たまに円マークを出したくなる時があるのでその時はどうすべきかという課題がある。
カーソルを複数表示できる multiple-cursors 用のキーバインド。基本的には公式 README に従って設定している。
;; multiple-cursors
(keymap-global-set "C-:" 'mc/edit-lines)
(keymap-global-set "C->" 'mc/mark-next-like-this)
(keymap-global-set "C-<" 'mc/mark-previous-like-this)
(keymap-global-set "C-c C-<" 'mc/mark-all-like-this)
Ladicle さんの https://ladicle.com/post/config/#multiple-cursor の設定が便利そうだなって思って気になってるけどまだ試してない。
Helm から乗り換えて今はこちらをメインで使っている。基本的には既存のキーバインドの持っていた機能が強化されるようなコマンドを代わりに割り当てている。デフォルトより良い感じで良い。
(keymap-global-set "M-x" 'counsel-M-x)
(keymap-global-set "M-y" 'counsel-yank-pop)
(keymap-global-set "C-x b" 'counsel-switch-buffer)
(keymap-global-set "C-x C-f" 'counsel-find-file)
Key | 効果 |
---|---|
M-x | コマンド実行。絞り込みができるのでコマンド名がうろ覚えでも実行できて便利 |
M-y | kill-ring の候補表示。適当に複数 kill-ring に入れておいてこれを起動して絞り込んで貼り付けとかできて便利 |
C-x b | バッファ切替。これも適当にバッファを絞り込めて便利 |
C-x C-f | find-file の置き換え。ido より便利な感じの絞り込み選択ができる。 |
zoom-window は tmux の zoom 機能のように選択している window だけを表示したり戻したりができるパッケージ。
(keymap-global-set "C-x 1" 'zoom-window-zoom)
実は戻すことがあんまりないので、このキーバインドは戻してもいいかもしれないなと思っていたりする。
Neotree]] は IDE みたいにファイルツリーを表示を表示するパッケージ。有効にしているとちょっぴりモダンな雰囲気になるぞい。
(keymap-global-set "<f8>" 'neotree-toggle)
f8 にバインドしているけど Helm でも起動できるようにしているので、こっちの設定は外してもいいかもなとか思っている。
みんな大好き org-mode 用にもキーバインドを設定している。
(setq my/org-mode-prefix-key "C-c o ")
(keymap-global-set (concat my/org-mode-prefix-key "a") 'org-agenda)
(keymap-global-set (concat my/org-mode-prefix-key "c") 'org-capture)
(keymap-global-set (concat my/org-mode-prefix-key "l") 'org-store-link)
けど org-mode 用の Hydra も用意しているのでこれもそろそろ削除かな……
keycohrd は2つのキーを同時押しというキーバインドを実現するパッケージ。
とりあえず jk を入力するとグローバルに使いたいコマンドを載せた Hydra が起動するようにしている。めっちゃ使ってる。便利。
(key-chord-define-global "jk" 'pretty-hydra-usefull-commands/body)
何か質問された時に yes とか入力するのがだるいので y だけで済ませられるようにしている。
;; Don't ask yes or no.
(defalias 'yes-or-no-p 'y-or-n-p)
一応 Emacs 的には重要なのは yes/no で回答するようになっていたはずなのでより安全に使いたい人はこの設定は入れない方が良いはず。