Czy istnieje sposób skonfigurowania VIM do interaktywnego wyszukiwania w każdym pliku dla całego projektu?
Przez interaktywne rozumiem aktualizację każdego naciśnięcia klawisza.
Coś jak Emacs counsel-git-grep , patrz: przykładowe demo .
Czy istnieje sposób skonfigurowania VIM do interaktywnego wyszukiwania w każdym pliku dla całego projektu?
Przez interaktywne rozumiem aktualizację każdego naciśnięcia klawisza.
Coś jak Emacs counsel-git-grep , patrz: przykładowe demo .
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.ctrl-p
istnieje sposób interaktywnego przeszukiwania zawartości pliku? Użyłem go tylko do interaktywnego wyszukiwania plików na podstawie ich nazw.Odpowiedzi:
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
:... gdzieś między wierszami:
i:
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ącychfzf
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:
Projekt na github wyjaśnia, jak zainstalować go na MacOS:
: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:
C-n
iC-p
Tab
/S-Tab
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 wvimrc
:Używam
Fzf
jako prefiksu, dlatego nie napisałem,:Ag
ale:FzfAg
.Jeśli wolisz używać
git grep
zamiastag
, wygląda na to, że możesz zainstalować wokół niego własne niestandardowe opakowanie:GGrep
, w następujący sposób: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żyjeszbash
, doda następujący wiersz do~/.bashrc
:Spowoduje to źródło pliku
~/.fzf.bash
. Ten ostatni zawiera trochę kodu:Ten kod dołącza ścieżkę do zmiennej środowiskowej
$PATH
:/home/user/.fzf/bin
; który jest folderem zawierającymfzf
program.Pozyskuje również 2 inne pliki:
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
zC-t
. Ten klucz jest zwykle używany przez readline do wykonaniatranspose-chars
funkcji.Jeśli nie chcesz tego, jednym z możliwych rozwiązań byłoby przywrócenie kluczowych powiązań wewnątrz twojego
~/.bashrc
, pofzf
tym jak pozyskasz jego konfigurację. Na przykład, jeśli chceszC-t
zachować swoje stare zachowanie, czyli transponowanie 2 znaków wokół kursora i powiązaniefzf-file-widget
z innym klawiszem, powiedzmyC-x C-t
, możesz dodać te linie na końcu~/.bashrc
:To samo dotyczy
zsh
powłoki, ale składnia instalacji powiązania klawiszy jest nieco inna: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 pochodzifzf
konfiguracja. Następnie ponownie otwórz terminal i spójrz na dane wyjściowebind -P
polecenia, które możesz odczytać w buforze Vima: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 zC-t
kluczem, w buforze Vima możesz wyszukać\\C-t
. A jeśli szukałeś tego, do którego jest przypisanyM-c
(klawisz meta / alt), szukałbyś\\ec
(\e
oznacza klawisz Escape i wydaje się, żeM-c
tworzy te same kody, coescape + c
).Możesz zrobić to samo,
zsh
patrząc na wynikbindkey
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 klawiszyC-i
(takich samych jakTab
)C-r
,C-t
iM-c
. Są one powiązane z następującymi funkcjami:W moim systemie pierwotnie
readline
(biblioteka używanabash
do edycji wiersza poleceń) powiązała te klucze z następującymi funkcjami:I
zle
(używany przez edytor liniizsh
), powiązał je z:źródło
ag
zainstalować osobną wtyczkę / narzędzie?ag
było również konieczne. Zaktualizowałem odpowiedź.