Я не впевнений, що це те, що ви шукаєте, але, можливо, ви можете спробувати fzf та fzf.vim .
Якщо ви використовуєте vim-plug як менеджер плагінів, все, що вам потрібно буде зробити, щоб їх встановити, - це додати ці рядки у свій vimrc:
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
... десь між рядками:
call plug#begin('~/.vim/plugged')
і:
call plug#end()
Потім виконати :PlugInstall.
Серед різних команд і відображень, наданих компанією fzf.vim(єдиною метою якої є встановлення відображень і команд з проханням fzfнечіткого пошуку за попередньо визначеними джерелами) є така команда :Ag.
Щоб мати можливість ним скористатися, потрібно встановити команду shell shell ag . У дистрибутивах на основі debian це можна зробити за допомогою наступної команди:
apt-get install silversearcher-ag
Проект на github пояснює, як його встановити на MacOS:
brew install the_silver_searcher
:Agє обгорткою навколо $ agі дозволяє нечітко шукати шаблон у файлах поточного каталогу (той, який відображається під час введення :pwd). Збіги оновлюються після кожного натискання клавіш.
Ти можеш:
- рухатися вперед і назад через поєдинки з
C-nіC-p
- виберіть поточний збіг та перейдіть до наступного / попереднього за допомогою
Tab/S-Tab
- виберіть або скасуйте вибір усіх збігів з
M-aабоM-d
Якщо ви вибрали одне чи кілька збігів, після натискання клавіші Enter, вони заповнять список швидких виправлень. Звідти ви зможете переміщатися по них за допомогою команд / відображень за замовчуванням Vim, таких як :cnextі :cprevious.

Якщо ви хочете додати префікс до всіх команд, встановлених командою fzf.vim, і уникати переопределення існуючих команд, ви можете додати це у свій vimrc:
let g:fzf_command_prefix = 'your_prefix'
Я використовую Fzfяк префікс, тому я не ввів, :Agале :FzfAg.
Якщо ви віддаєте перевагу використовувати git grepзамість цього ag, то, здається, ви могли б встановити навколо нього власну власну обгортку :GGrep, наприклад:
command! -bang -nargs=* GGrep
\ call fzf#vim#grep('git grep --line-number '.shellescape(<q-args>), 0, <bang>0)
Це пояснено в :h fzf-vim-customization.
Крім того , якщо fzfвідкриває панель в tmux, і ви хотіли б це займає весь екран замість цього, ви можете додати чубок для всіх команд ( :Ag!, :GGrep!, ...).
Як ви сказали в своєму останньому коментарі , за замовчуванням fzfзмінюється конфігурація вашої оболонки. Наприклад, якщо ви використовуєте bash, він додасть наступний рядок у ваш ~/.bashrc:
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
Це створить файл ~/.fzf.bash. Останній містить деякий код:
# Setup fzf
# ---------
if [[ ! "$PATH" == */home/user/.fzf/bin* ]]; then
export PATH="$PATH:/home/user/.fzf/bin"
fi
# Auto-completion
# ---------------
[[ $- == *i* ]] && source "/home/user/.fzf/shell/completion.bash" 2> /dev/null
# Key bindings
# ------------
source "/home/user/.fzf/shell/key-bindings.bash"
Цей код додає шлях до змінної оточення $PATH: /home/user/.fzf/bin; яка є папкою, що містить fzfпрограму.
Він також джерело 2 інших файлів:
/home/user/.fzf/shell/completion.bash
/home/user/.fzf/shell/key-bindings.bash
Перший, здається, визначає функції завершення, а другий встановлює ключові прив’язки.
На жаль, ключові прив’язки можуть замінити readlineфункції за замовчуванням .
Наприклад, fzfприв'язує функцію fzf-file-widgetдо C-t. Цей ключ зазвичай використовується лінією читання для виконання transpose-charsфункції.
Якщо ви цього не хочете, одне можливе рішення - відновити ключові прив’язки всередині вашого ~/.bashrc, після того, як fzfбуде створено його конфігурацію. Наприклад, якщо ви хотіли C-tзберегти його стару поведінку, тобто перенести два символи навколо курсору, і прив'язати fzf-file-widgetдо іншого ключа, скажімо C-x C-t, ви могли б додати ці рядки наприкінці ~/.bashrc:
bind -x '"\C-x\C-t": fzf-file-widget'
bind '"\C-t": transpose-chars'
Те ж саме стосується zshоболонки, але синтаксис для встановлення прив'язки ключа трохи інший:
bindkey '^X^T' fzf-file-widget
bindkey '^T' transpose-chars
Якщо одне з ключів оболонки, до якого ви звикли, було відмінено fzf, ви хочете відновити його, але не знаєте, яке саме ім’я виконується, ви можете спробувати наступне.
По-перше, всередині вашого місця ~/.bashrcтимчасово прокоментуйте рядок, що джерелом fzfконфігурації. Потім знову відкрийте термінал і перегляньте вихід bind -Pкоманди, яку ви можете прочитати в буфері Vim:
bind -P | vim -R -
Я не впевнений, але я думаю, що він повинен відображати більшість або всі readlineключові прив’язки. Якщо ви шукаєте назву функції readline, прив'язаної до C-tключа, у буфері Vim слід здійснити пошук \\C-t. І якби ви шукали ту, яка прив’язана до M-c(мета / alt ключ), ви б шукали \\ec( \eозначає, що ключ для виходу, і, здається, M-cстворює ті самі кодові ключі, що і escape + c).
Ви можете зробити те саме, що zshподивившись на результат bindkeyкоманди. На цей раз, це ^[означає, що мета / модифікатор клавіші модифікатора alt, тоді як один символ caret ( ^) виступає за керуючий ключ.
В даний час я знайшов 4 ключових прив’язки, що виконують функції, що містять fzfключове слово у їхньому імені. Вони використовують ключові послідовності C-i(такі ж, як Tab) C-r, C-tі M-c. Вони пов'язані з такими функціями:
C-i fzf-completion
C-r fzf-history-widget
C-t fzf-file-widget
M-c fzf-cd-widget
У моїй системі спочатку readline(бібліотека, яка використовується bashдля редагування командного рядка) прив'язувала ці клавіші до цих функцій:
C-i complete
C-r reverse-search-history
C-t transpose-chars
M-c capitalize-word
І zle(редактор рядків, який використовує zsh), прив'язує їх до:
C-i expand-or-complete
C-r history-incremental-search-backward
C-t transpose-chars
M-c capitalize-word
ctrl-pабо подібний плагін - це те, що ви шукаєте. Зауважте, щоunite.vimце також має бути в змозі, але я б не рекомендував цього, оскільки, на мою думку, це досить важкий плагін і створює помилки.