はじめに
以前、selected.elの設定を記事にしたことがあった。
今回はその設定を一部見直し、新しい関数に置き換えた部分があるので、それをまとめておこうというのが主旨である。 selected.el自体は以下の記事を読むのがよい。
設定
以下にコードを示す。クリックで展開する。requireされているパッケージは適当に探せばすぐに見つかるものばかりである。
コードを表示する
;; http://github.com/Kungsgeten/selected.el (require 'selected) ;; https://github.com/minad/consult (require 'consult) ;; https://github.com/emacsorphanage/anzu (require 'anzu) ;; https://github.com/victorhge/iedit (require 'iedit) ;; https://github.com/magnars/multiple-cursors.el (require 'multiple-cursors) ;; https://github.com/xuchunyang/osx-dictionary.el (require 'osx-dictionary) ;; http://www.emacswiki.org/emacs/download/replace-from-region.el (require 'replace-from-region) ;; http://github.com/Malabarba/emacs-google-this (require 'google-this) ;; https://github.com/remyferre/comment-dwim-2 (require 'comment-dwim-2) ;; https://gist.github.com/tam17aki/be6445e3b2b28a70ccce3546d2963680 (require 'consult-selected) ;; https://gist.github.com/tam17aki/f5046e9381436e783df385b42b11125b (require 'consult-thing-at-point) ;; 参考 http://blog.fujimisakari.com/elisp_useful_for_programming/ (defun region-to-single-quote () (interactive) (quote-formater "'%s'" "^\\(\"\\).*" ".*\\(\"\\)$")) (defun region-to-double-quote () (interactive) (quote-formater "\"%s\"" "^\\('\\).*" ".*\\('\\)$")) (defun region-to-bracket () (interactive) (quote-formater "\(%s\)" "^\\(\\[\\).*" ".*\\(\\]\\)$")) (defun region-to-square-bracket () (interactive) (quote-formater "\[%s\]" "^\\(\(\\).*" ".*\\(\)\\)$")) (defun region-to-brace () (interactive) (quote-formater "\%s\]" "^\\(\(\\).*" ".*\\(\)\\)$")) (defun quote-formater (quote-format re-prefix re-suffix) (if mark-active (let* ((region-text (buffer-substring-no-properties (region-beginning) (region-end))) (replace-func (lambda (re target-text) (replace-regexp-in-string re "" target-text nil nil 1))) (text (funcall replace-func re-suffix (funcall replace-func re-prefix region-text)))) (delete-region (region-beginning) (region-end)) (insert (format quote-format text))) (error "Not Region selection"))) (defun my:google-this () "検索確認をスキップして直接検索実行" (interactive) (google-this (current-word) t)) (setq google-this-location-suffix "co.jp") (when (require 'selected nil t) ;; コメントアウト・アンコメントアウト (define-key selected-keymap (kbd ";") #'comment-dwim-2) ;; 選択した関数のヘルプを表示 (define-key selected-keymap (kbd "f") #'describe-function) ;; 選択した変数のヘルプを表示 (define-key selected-keymap (kbd "v") #'describe-variable) ;; 選択したシンボルのヘルプを表示 (define-key selected-keymap (kbd "y") #'describe-symbol) ;; 辞書を引く (Mac限定) (define-key selected-keymap (kbd "d") #'osx-dictionary-search-pointer) ;; 置換関連 (define-key selected-keymap (kbd "q") #'query-replace-from-region) (define-key selected-keymap (kbd "Q") #'anzu-query-replace) ;; リージョンの文字数や単語数をカウント (define-key selected-keymap (kbd "=") #'count-words-region) ;; 複数カーソルによるマーク (define-key selected-keymap (kbd "A") #'mc/mark-all-like-this) (define-key selected-keymap (kbd "n") #'mc/mark-next-like-this) (define-key selected-keymap (kbd "p") #'mc/mark-previous-like-this) (define-key selected-keymap (kbd "u") #'mc/unmark-next-like-this) (define-key selected-keymap (kbd "U") #'mc/unmark-previous-like-this) (define-key selected-keymap (kbd "s") #'mc/skip-to-next-like-this) (define-key selected-keymap (kbd "S") #'mc/skip-to-previous-like-this) ;; 同時編集 iedit ;; デフォルトではバッファ全体にカーソルが分身して編集可能になるので、 ;; ナローイングを適宜用いる (define-key selected-keymap (kbd "i") #'iedit-mode) ;; 参考 http://blog.fujimisakari.com/elisp_useful_for_programming/ ;; リージョンをシングルクオートで囲う (define-key selected-keymap (kbd "\'") #'region-to-single-quote) ;; リージョンをダブルクオートで囲う (define-key selected-keymap (kbd "\"") #'region-to-double-quote) ;; リージョンをブラケット(カッコ)で囲う (define-key selected-keymap (kbd "(") #'region-to-bracket) ;; リージョンをカギカッコで囲う (define-key selected-keymap (kbd "[") #'region-to-square-bracket) ;; consult-line (define-key selected-keymap (kbd "w") #'consult-line-thing-at-point) ;; google 検索 (define-key selected-keymap (kbd "g") #'my:google-this) ;; consultインターフェイスで選択 (define-key selected-keymap (kbd "l") #'consult-selected) ;; 有効化 (selected-global-mode 1))
主な変更点
- counselの削除
- swiperの削除
- consultの導入(
consult-apropos
,consult-selected
,consult-line-thing-at-point
)
consult-selected
とconsult-line-thing-at-point
は新たに書いた関数なので、以下で詳しく説明する。
consult系の関数群の導入
takaxp氏により、helm-selected.el
やcounsel-selected.el
が書かれていたので、これのconsult
用の代替ライブラリとしてconsult-selected.el
を書いた。
さらに、選択されたリージョンを元にconsult-line
を発動させるために、consult-thing-at-point.el
を書いた。
このライブラリにより、consult-line-thing-at-point
という関数が提供されるので、これを適当なキーにバインドして使うことができる。
おわりに
selected.el
は便利なので、利用を勧めたい。