Я не впевнений, що це те, що ви шукаєте, але, можливо, ви можете спробувати 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
це також має бути в змозі, але я б не рекомендував цього, оскільки, на мою думку, це досить важкий плагін і створює помилки.