(require 'ivy)
(require 'swiper)
+(ivy-mode 1)
+(counsel-mode 1)
+
(setq ivy-wrap t)
(setq ivy-extra-directories '("./"))
(setq ivy-count-format "%d/%d ")
(setq counsel-find-file-at-point t)
(setq counsel-find-file-ignore-regexp "\\(?:\\`[#.]\\)\\|\\(?:[#~]\\'\\)")
-(setq counsel-git-cmd "git ls-files --full-name --cached --others --exclude-standard --")
-(setq counsel-git-grep-cmd-default "git --no-pager grep --full-name -n --no-color --untracked -i -e \"%s\"")
+(setq counsel-grep-base-command "grep -E -n -i -e %s %s")
+(setq counsel-rg-base-command "rg -S --no-heading --line-number --color never --hidden --ignore-file ~/.emacs.d/rg-ignore %s .")
+(defvar counsel-rg-files-command "rg --files --hidden --ignore-file ~/.emacs.d/rg-ignore")
-(setq counsel-grep-base-command "grep -niE %s %s")
-
-(ivy-mode 1)
+(defun counsel-rg-jump (&optional initial-input initial-directory)
+ "Jump to a file below the current directory.
+List all files within the current directory or any of its subdirectories.
+INITIAL-INPUT can be given as the initial minibuffer input.
+INITIAL-DIRECTORY, if non-nil, is used as the root directory for search."
+ (interactive
+ (list nil
+ (when current-prefix-arg
+ (read-directory-name "From directory: "))))
+ (counsel-require-program "rg")
+ (let ((default-directory (or initial-directory
+ (locate-dominating-file default-directory ".git")
+ default-directory)))
+ (ivy-read "rg --files: "
+ (split-string
+ (shell-command-to-string counsel-rg-files-command)
+ "\n" t)
+ :matcher #'counsel--find-file-matcher
+ :initial-input initial-input
+ :action (lambda (x)
+ (with-ivy-window
+ (find-file (expand-file-name x ivy--directory))))
+ :preselect (counsel--preselect-file)
+ :require-match 'confirm-after-completion
+ :history 'file-name-history
+ :keymap counsel-find-file-map
+ :caller 'counsel-rg-jump)))
(global-set-key (kbd "C-z") nil)
(global-set-key (kbd "C-x C-z") nil)
-;; General commands
-(global-set-key (kbd "M-x") 'counsel-M-x)
-
;; Search
(global-set-key (kbd "C-s") 'counsel-grep-or-swiper)
(global-set-key (kbd "C-r") 'ivy-resume)
;; Files/buffers
-(global-set-key (kbd "C-x C-f") 'counsel-find-file)
-(global-set-key (kbd "C-x f") 'counsel-git)
-(global-set-key (kbd "C-x g") 'counsel-git-grep)
+(global-set-key (kbd "C-x f") 'counsel-rg-jump)
+(global-set-key (kbd "C-x g") 'counsel-rg)
(global-set-key (kbd "C-x l") 'counsel-locate)
(global-set-key (kbd "C-x c") 'my/kill-buffers-not-in-frame)
(global-set-key (kbd "C-x C-b") 'ibuffer)
(global-set-key (kbd "C-,") 'goto-last-change-reverse)
;; Killing and deleting
-(global-set-key (kbd "M-y") 'counsel-yank-pop)
(global-set-key (kbd "M-z") 'zap-up-to-char)
(global-set-key (kbd "C-c k") 'kill-whole-line)
(global-set-key (kbd "C-c s") 'my/substitute-line)