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 fzf
o 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
:Ag
jest opakowaniem $ ag
i 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-n
iC-p
- wybierz bieżący mecz i przejdź do następnego / poprzedniego za pomocą
Tab
/S-Tab
- zaznacz lub odznacz wszystkie dopasowania za pomocą
M-a
lubM-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 :cnext
i :cprevious
.
Jeśli chcesz dodać prefiks do wszystkich poleceń zainstalowanych przez fzf.vim
i uniknąć zastępowania istniejących poleceń, możesz dodać to w vimrc
:
let g:fzf_command_prefix = 'your_prefix'
Używam Fzf
jako prefiksu, dlatego nie napisałem, :Ag
ale :FzfAg
.
Jeśli wolisz używać git grep
zamiast 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 fzf
otworzy 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 fzf
zmienia 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 fzf
program.
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 readline
funkcje.
Na przykład fzf
wiąże funkcję fzf-file-widget
z C-t
. Ten klucz jest zwykle używany przez readline do wykonania transpose-chars
funkcji.
Jeśli nie chcesz tego, jednym z możliwych rozwiązań byłoby przywrócenie kluczowych powiązań wewnątrz twojego ~/.bashrc
, po fzf
tym jak pozyskasz jego konfigurację. Na przykład, jeśli chcesz C-t
zachować swoje stare zachowanie, czyli transponowanie 2 znaków wokół kursora i powiązanie fzf-file-widget
z 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 zsh
powł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, ~/.bashrc
tymczasowo skomentuj wiersz, z którego pochodzi fzf
konfiguracja. Następnie ponownie otwórz terminal i spójrz na dane wyjściowe bind -P
polecenia, 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 readline
powiązania klawiszy. Jeśli szukasz nazwy funkcji readline związanej z C-t
kluczem, 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
( \e
oznacza klawisz Escape i wydaje się, że M-c
tworzy te same kody, co escape + c
).
Możesz zrobić to samo, zsh
patrząc na wynik bindkey
polecenia. 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 fzf
słowo kluczowe w ich nazwie. Używają sekwencji klawiszy C-i
(takich samych jak Tab
) C-r
, C-t
i 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 bash
do 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-p
lub podobna wtyczka jest tym, czego szukasz. Pamiętaj, żeunite.vim
powinienem to zrobić, ale nie poleciłbym tego, ponieważ moim zdaniem jest to dość ciężka i powodująca błędy wtyczka.