私はDebian上のエディタは、emacs(26.1)をメインにしている。 まあ、vimが周辺をサポートしているのようなのだが。
用途は、org-mode(9.2.1)をメモに使っているのと、少し長めのpythonスクリプト。
Emacsを使っていると、smartparens が邪魔に感じる事がある。 parensがらみだ。細かく設定した対応する方法があるのかもしれないが、 私には無理っぽいので、hydraを使って逃げてみた。
emacs24.4以降、autopairs の機能が含められたらしく、 私にsmartparensは不要かも思うが、まあ頑張ってみている。 expand-region と組み合わせると、もしかしたら 使い易いくなるのかも、とか。 objedのようなパッケージを使った方がよかったのかもしれない。
smartparen (201908up)
smartparensは、show-smartparens-mode does not highlight the contained expression らしいので、 見た目の設定は、 rainbow-delimiters にやらせる。
(use-package smartparens :ensure t :diminish smartparens-mode :hook ( ((css-mode html-mode web-mode mhtml-mode) . smartparens-mode) ((rst-mode markdown-mode text-mode) . smartparens-mode) (org-mode . smartparens-mode) (prog-mode . smartparens-mode) ) :init (progn (use-package smartparens-config) (smartparens-global-mode 1) (show-smartparens-global-mode 1)) :commands smartparens-config :config (electric-pair-mode nil) ;; (show-smartparens-mode t) ; global-modeにすべきか (sp-local-pair 'minibuffer-inactive-mode "'" nil :actions nil) (sp-local-pair 'rst-mode "`" "`") ;; adds local pair (sp-local-pair 'emacs-lisp-mode "`" nil :when '(sp-in-string-p)) ;; (defun my-sp-wrap-backquote () "Wrap following sexp in square brackets." (interactive) (sp-wrap-with-pair "`")) (defun my-sp-wrap-squote () "Wrap following sexp in square brackets." (interactive) (sp-wrap-with-pair "'")) ) ;; ;; (use-package rainbow-delimiters :ensure t :diminish :hook ( ((css-mode html-mode web-mode) . rainbow-delimiters-mode) ((org-mode rst-mode markdown-mode text-mode) . rainbow-delimiters-mode) ((python-mode rust-mode) . rainbow-delimiters-mode) ) :config (setq rainbow-delimiters-outermost-only-face-count 1) (show-paren-mode 1) )
expand-region
expand-regionは、 modeによって使えるコマンドが異なったりするようで注意。 過信せず、少しづつ確認してゆくつもり。
(use-package expand-region :ensure t :bind ( ("C-M-:" . er/expand-region) ("C-M-;" . er/contract-region) ) :config (require 'expand-region) )
hydra
hydra を使うことで、キーバインドの見直し改善。 やってみると、which-keyより素人向けかもしれないと思った。 グローバルに使うキーを設定するのがよいのだろう。
沢山メニュー項目を用意しても使えない。 シンプルにすべきだったと反省。
expand-regionでは、body-preで一旦markさせる。 どこで見付けたのか、メモ忘れ。
(use-package hydra :ensure t) (defhydra hyd-sparen (:hint nil) "SmartParens" ("u" sp-up-sexp "Up" :column "Move") ("d" sp-down-sexp "Down") ("f" sp-forward-sexp "forward") ("b" sp-backward-sexp "backward") ("a" sp-beginning-of-sexp "begin") ("e" sp-end-of-sexp "end") ("N" sp-backward-down-sexp "back and down") ("P" sp-backward-up-sexp "back and up") ("h" sp-backward-slurp-sexp "back slurp" :column "Slurping barfing") ("H" sp-backward-barf-sexp "back barf") ("l" sp-forward-slurp-sexp "forward slurp") ("L" sp-forward-barf-sexp "forward slurp") ("m" sp-mark-sexp "Mark" :column "Edit") ("w" sp-copy-sexp "Copy") ("t" sp-transpose-sexp "transpose") ("c" sp-change-inner "change inner") ("C" sp-change-enclosing "change enclose") ("k" sp-kill-sexp "kill") ("K" sp-backward-kill-sexp "back kill") ("0" sp-unwrap-sexp "Unwrap" :column "Wrap") ("R" sp-rewrap-sexp "rewrap") ("U" sp-backward-unwrap-sexp "bk unweap") ("[" sp-wrap-square "wrap[]") ("(" sp-wrap-round "wrap()") ("{" sp-wrap-curly "wrap{}") ("C" sp-wrap-cancel "Cancel") ("S" sp-split-sexp "Split" :column "Juggling") ("s" sp-splice-sexp "splice") ("r" sp-raise-sexp "raise") ("j" sp-join-sexp "join") ("t" sp-transpose-sexp "transpose") ("A" sp-absorb-sexp "absorb") ("E" sp-emit-sexp "emit") ("o" sp-convolute-sexp "convolute") ("q" nil "Exit" :exit t :column "Quit") ;("q" nil "cancel" :color blue) ) (defhydra hyd-mark (:body-pre (er/expand-region 1) :color red :hint nil) "ExpandRegion" ("w" er/mark-word "Word" :column "Object1") ("c" er/mark-comment "Comment") ("s" er/mark-symbol "Symbol") ("S" er/mark-symbol-with-prefix "Prefixed symbol") ("d" er/mark-defun "def/func") ("q" er/mark-inside-quotes "In quotes" :column "Pairs") ("Q" er/mark-outside-quotes "Out quotes") ("(" er/mark-inside-pairs "In paren") (")" er/mark-outside-pairs "Out paren") ("p" er/mark-text-paragraph "Paragraph" :column "Object2") ("t" er/mark-inner-tag "In tag") ("T" er/mark-outer-tag "Ou tag") ("." er/expand-region "Expand region") ("," er/contract-region "Contract region") ("u" er/mark-url "Url" :column "others") ("E" er/mark-email "Email") ("a" er/mark-html-attribute "HTML attribute") ("q" nil "Quit" :exit t :column "Quit") ) (global-set-key (kbd "M-p") 'hyd-sparen/body) (global-set-key (kbd "M-m") 'hyd-mark/body)
smartparensとexpand-regionのメニューをひとまとめにしたいが、 しばらく使ってみて、機能を絞り込んでから。