# anzu.el ## Introduction `anzu.el` is an Emacs port of [anzu.vim](https://github.com/osyo-manga/vim-anzu). `anzu.el` provides a minor mode which displays *current match* and *total matches* information in the mode-line in various search modes. ## Requirements - Emacs 24 or higher - `cl-lib` 0.5 or higher (you don't need to install `cl-lib` if you use Emacs 24.3 or higher) ## Installation You can install `anzu.el` from [MELPA](https://melpa.org/) with `package.el` ``` M-x package-install anzu ``` ## Basic Usage ##### `global-anzu-mode` Enable global anzu mode: ```lisp (global-anzu-mode +1) ``` ##### `anzu-mode` Enable anzu minor mode: ```lisp (anzu-mode +1) ``` ##### `anzu-query-replace` Same as `query-replace` except anzu information in mode-line ##### `anzu-query-replace-regexp` Same as `query-replace-regexp` except anzu information in mode-line Add following S-exp in your configuration if you want to use anzu's replace commands by default. ```lisp (global-set-key [remap query-replace] 'anzu-query-replace) (global-set-key [remap query-replace-regexp] 'anzu-query-replace-regexp) ``` ##### `anzu-query-replace-at-cursor` Same as `anzu-query-replace` except *from-string* is symbol at cursor ##### `anzu-query-replace-at-cursor-thing` Same as `anzu-query-replace-at-cursor` except replaced region is specified by `anzu-replace-at-cursor-thing`. ##### `anzu-replace-at-cursor-thing` Same as `anzu-query-replace-at-cursor-thing` except not query. This command is useful in refactoring such as changing variable name in the function. ##### `anzu-isearch-query-replace` Anzu version of `isearch-query-replace` ##### `anzu-isearch-query-replace-regexp` Anzu version of `isearch-query-replace-regexp` ## Customization ##### `anzu-mode-line` Face of mode-line anzu information ##### `anzu-replace-highlight` Face of from-string of replacement ##### `anzu-replace-to` Face of to-string of replacement ##### `anzu-mode-line-update-function` Function which constructs mode-line string. anzu.el puts its output to mode-line. It is called at searching, inputting replaced word, replacing. This must be non-nil. The function takes 2 integer arguments, current position and total match number. You can get current-state from `anzu--state`(`'search`, `'replace-query`, `replace`). ```lisp (defun my/anzu-update-func (here total) (when anzu--state (let ((status (cl-case anzu--state (search (format "<%d/%d>" here total)) (replace-query (format "(%d Replaces)" total)) (replace (format "<%d/%d>" here total))))) (propertize status 'face 'anzu-mode-line)))) (custom-set-variables '(anzu-mode-line-update-function #'my/anzu-update-func)) ``` ##### `anzu-cons-mode-line-p`(Default is `t`) Set `nil` if you want to display anzu information at any position in mode-line. `anzu.el` cons search information head of `mode-line` as default. For example, show search information tail of `minor-mode-alist` ```lisp (setq anzu-cons-mode-line-p nil) (setcar (cdr (assq 'isearch-mode minor-mode-alist)) '(:eval (anzu--update-mode-line))) ``` ##### `anzu-mode-lighter` Mode name in `mode-line`. Default is ` Anzu`. ##### `anzu-input-idle-delay`(Default is `0.05`) Delay second of updating mode-line information when you input from-string ##### `anzu-regexp-search-commands` Commands which have regexp input. If the last command is a member of this list, `anzu.el` treats input as regular expression. The default value is `'(isearch-forward-regexp isearch-backward-regexp)`. ##### `anzu-use-migemo`(Default is `nil`) Set to `t` if you use [migemo](https://github.com/emacs-jp/migemo). ##### `anzu-search-threshold`(Default is `nil`) Threshold of searched words. If there are searched word more than this value, `anzu.el` stops to search and display total number like `1000+`(as default). If this value is `nil`, `anzu.el` counts all words. ##### `anzu-replace-threshold`(Default is `nil`) Threshold of replacement overlay. If this value is `nil`, ##### `anzu-minimum-input-length`(Default is 1) Minimum input length to enable anzu. This parameter is useful for `migemo` users. Searching 1 or 2 characters with `migemo` is too heavy if buffer is so large. Please set 3 or higher if you frequently edit such file. ##### `anzu-deactivate-region`(Default is `nil`) Deactivate region at anzu replace command if this value is non-nil. It is hard to see with anzu replace command when region is active. ##### `anzu-replace-at-cursor-thing`(Default is 'defun) Thing at point of `anzu-query-replace-at-cursor-thing`. This parameter is same as `thing-at-point`. ##### `anzu-replace-to-string-separator`(Default is "") Separator of `to` string. ## Sample Configuration ```lisp (require 'anzu) (global-anzu-mode +1) (set-face-attribute 'anzu-mode-line nil :foreground "yellow" :weight 'bold) (custom-set-variables '(anzu-mode-lighter "") '(anzu-deactivate-region t) '(anzu-search-threshold 1000) '(anzu-replace-threshold 50) '(anzu-replace-to-string-separator " => ")) (define-key isearch-mode-map [remap isearch-query-replace] #'anzu-isearch-query-replace) (define-key isearch-mode-map [remap isearch-query-replace-regexp] #'anzu-isearch-query-replace-regexp) ```