Nie jestem pewien, czy tego właśnie szukasz, ale może możesz spróbować fzf i fzf.vim .
Jeśli używasz vim-plug jako menedżera wtyczek, wszystko, co musisz zrobić, aby je zainstalować, to dodać następujące wiersze w vimrc:
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
... gdzieś między wierszami:
call plug#begin('~/.vim/plugged')
i:
call plug#end()
Następnie wykonaj :PlugInstall.
Wśród różnych poleceń i mapowań dostarczonych przez fzf.vim(których jedynym celem wydaje się być instalowanie mapowań i poleceń proszących fzfo wyszukiwanie rozmyte przez predefiniowane źródła), jest polecenie :Ag.
Aby móc z niego korzystać, musisz zainstalować komendę shell ag . W przypadku dystrybucji opartych na Debianie można to zrobić za pomocą następującego polecenia:
apt-get install silversearcher-ag
Projekt na github wyjaśnia, jak zainstalować go na MacOS:
brew install the_silver_searcher
:Agjest opakowaniem $ agi pozwala na rozmyte wyszukiwanie wzorca w plikach bieżącego katalogu (wyświetlanego podczas pisania :pwd). Dopasowania są aktualizowane po każdym naciśnięciu klawisza.
Możesz:
- przewijać mecze do przodu i do tyłu za pomocą
C-niC-p
- wybierz bieżący mecz i przejdź do następnego / poprzedniego za pomocą
Tab/S-Tab
- zaznacz lub odznacz wszystkie dopasowania za pomocą
M-alubM-d
Jeśli wybierzesz jedno lub kilka dopasowań, po naciśnięciu Enter, zostaną one wypełnione na liście szybkich poprawek. Stamtąd będziesz mógł nawigować po nich za pomocą domyślnych poleceń / mapowań Vima, takich jak :cnexti :cprevious.

Jeśli chcesz dodać prefiks do wszystkich poleceń zainstalowanych przez fzf.vimi uniknąć zastępowania istniejących poleceń, możesz dodać to w vimrc:
let g:fzf_command_prefix = 'your_prefix'
Używam Fzfjako prefiksu, dlatego nie napisałem, :Agale :FzfAg.
Jeśli wolisz używać git grepzamiast ag, wygląda na to, że możesz zainstalować wokół niego własne niestandardowe opakowanie :GGrep, w następujący sposób:
command! -bang -nargs=* GGrep
\ call fzf#vim#grep('git grep --line-number '.shellescape(<q-args>), 0, <bang>0)
Wyjaśniono to w :h fzf-vim-customization.
Ponadto, jeśli fzfotworzy się okienko w tmux i wolisz zajmuje cały ekran zamiast tego można dołączyć huk do wszystkich poleceń ( :Ag!, :GGrep!...).
Jak powiedziałeś w swoim ostatnim komentarzu , domyślnie fzfzmienia konfigurację twojej powłoki. Na przykład, jeśli użyjesz bash, doda następujący wiersz do ~/.bashrc:
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
Spowoduje to źródło pliku ~/.fzf.bash. Ten ostatni zawiera trochę kodu:
# 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"
Ten kod dołącza ścieżkę do zmiennej środowiskowej $PATH: /home/user/.fzf/bin; który jest folderem zawierającym fzfprogram.
Pozyskuje również 2 inne pliki:
/home/user/.fzf/shell/completion.bash
/home/user/.fzf/shell/key-bindings.bash
Pierwszy wydaje się definiować funkcje uzupełniania, a drugi instaluje powiązania klawiszy.
Niestety, powiązania klawiszy mogą zastąpić domyślne readlinefunkcje.
Na przykład fzfwiąże funkcję fzf-file-widgetz C-t. Ten klucz jest zwykle używany przez readline do wykonania transpose-charsfunkcji.
Jeśli nie chcesz tego, jednym z możliwych rozwiązań byłoby przywrócenie kluczowych powiązań wewnątrz twojego ~/.bashrc, po fzftym jak pozyskasz jego konfigurację. Na przykład, jeśli chcesz C-tzachować swoje stare zachowanie, czyli transponowanie 2 znaków wokół kursora i powiązanie fzf-file-widgetz innym klawiszem, powiedzmy C-x C-t, możesz dodać te linie na końcu ~/.bashrc:
bind -x '"\C-x\C-t": fzf-file-widget'
bind '"\C-t": transpose-chars'
To samo dotyczy zshpowłoki, ale składnia instalacji powiązania klawiszy jest nieco inna:
bindkey '^X^T' fzf-file-widget
bindkey '^T' transpose-chars
Jeśli jedno z powiązań klucza powłoki, do którego byłeś przyzwyczajony, zostało zastąpione fzf, chcesz je przywrócić, ale nie wiesz, jaka jest dokładna nazwa funkcji, która została wykonana, możesz wypróbować następującą rzecz.
Po pierwsze, ~/.bashrctymczasowo skomentuj wiersz, z którego pochodzi fzfkonfiguracja. Następnie ponownie otwórz terminal i spójrz na dane wyjściowe bind -Ppolecenia, które możesz odczytać w buforze Vima:
bind -P | vim -R -
Nie jestem pewien, ale myślę, że powinien wyświetlać większość lub wszystkie readlinepowiązania klawiszy. Jeśli szukasz nazwy funkcji readline związanej z C-tkluczem, w buforze Vima możesz wyszukać \\C-t. A jeśli szukałeś tego, do którego jest przypisany M-c(klawisz meta / alt), szukałbyś \\ec( \eoznacza klawisz Escape i wydaje się, że M-ctworzy te same kody, co escape + c).
Możesz zrobić to samo, zshpatrząc na wynik bindkeypolecenia. Ale tym razem ^[oznacza klawisz modyfikujący meta / alt, a pojedynczy znak karetki ( ^) oznacza klawisz kontrolny.
Obecnie znalazłem 4 powiązania klawiszy wykonujące funkcje zawierające fzfsłowo kluczowe w ich nazwie. Używają sekwencji klawiszy C-i(takich samych jak Tab) C-r, C-ti M-c. Są one powiązane z następującymi funkcjami:
C-i fzf-completion
C-r fzf-history-widget
C-t fzf-file-widget
M-c fzf-cd-widget
W moim systemie pierwotnie readline(biblioteka używana bashdo edycji wiersza poleceń) powiązała te klucze z następującymi funkcjami:
C-i complete
C-r reverse-search-history
C-t transpose-chars
M-c capitalize-word
I zle(używany przez edytor linii zsh), powiązał je z:
C-i expand-or-complete
C-r history-incremental-search-backward
C-t transpose-chars
M-c capitalize-word
ctrl-plub podobna wtyczka jest tym, czego szukasz. Pamiętaj, żeunite.vimpowinienem to zrobić, ale nie poleciłbym tego, ponieważ moim zdaniem jest to dość ciężka i powodująca błędy wtyczka.