Mój projekt ma następujące pliki:
$ find . -type f -and -name 'peop*'
./app/assets/stylesheets/admin/sections/people.css.sass
./app/controllers/admin/people_controller.rb
Kiedy zmęczyłem się pisaniem :e app/assets/stylesheets/admin/sections/people.css.sass
, pomyślałem, że ctrlp może być dobrym sposobem na zaoszczędzenie pisania. Nie mogę jednak dopasować plików w sposób, który uważam za rozsądny.
Najpierw używam <C-p>
i piszę peop
, a to daje mi następujące wyniki („pierwsze” dopasowanie jest na dole):
> app/models/attribute_group.rb
> app/models/contract_template.rb
> app/policies/contract_policy.rb
> app/uploaders/photo_uploader.rb
> app/policies/invoice_policy.rb
> app/views/layouts/pdf.pdf.haml
> app/uploaders/logo_uploader.rb
> app/models/property_object.rb
> app/policies/person_policy.rb
> app/policies/photo_policy.rb
>>> peop_
Te wyniki są okropne. Nie peop
ma tam żadnych plików . Nawet gdy rozwinę to do people
:
> app/policies/contract_template_policy.rb
> app/models/concerns/exportable.rb
> app/models/contract_template.rb
> app/uploaders/photo_uploader.rb
> app/uploaders/logo_uploader.rb
> app/views/admin/people/_show.html.haml
> app/views/admin/people/_form.html.haml
> app/views/admin/people/show.html.haml
> app/views/admin/people/edit.html.haml
> app/views/admin/people/new.html.haml
>>> people_
Nie wymieniono żadnego z nich (!)
Przeszedłem :help ctrlp-options
i znalazłem jedną opcję, która nieco poprawia:
Set this to 1 to set searching by filename (as opposed to full path) as the
default:
let g:ctrlp_by_filename = 0
Can be toggled on/off by pressing <c-d> inside the prompt.
Po ustawieniu tego otrzymuję następujące wyniki peop
:
> app/controllers/admin/organisation_people_controller.rb
> app/assets/stylesheets/admin/sections/people.css.sass
> doc/formulieren/opdrachtverlening-woningbeheer.pdf
> doc/formulieren/hulptabellen-object-unit-soort.pdf
> doc/formulieren/brandpreventievoorjongeren.pdf
> app/policies/organisation_person_policy.rb
> doc/prototype-admin/prototype/inspectiemodule_apparaten.html
> app/policies/property_object_policy.rb
> app/policies/person_policy.rb
> app/controllers/admin/people_controller.rb
>d> peop_
Okej, więc jest to nieco lepsze, otrzymuję co najmniej jeden z oczekiwanych plików przy pierwszym wyniku, a drugi jako 9. Nadal hulptabellen-object-unit-soort.pdf
jest lepszym rozwiązaniem niż people.css.sass
chociaż (!)
Pisanie w people
końcu daje mi 2 oczekiwane pliki jako pierwsze 2:
> app/controllers/admin/organisation_people_controller.rb
> app/assets/stylesheets/admin/sections/people.css.sass
> app/controllers/admin/people_controller.rb
>>> people_
Jak mogę poprawić to dopasowanie? Nie mam nic przeciwko „rozmytemu dopasowaniu”, ale nie powinno być tak rozmyte, aby pasowało do wszystkich i wszystkich ... W tym przypadku oczekiwałbym, że pisanie <c-P>peop
będzie miało miejsce app/assets/stylesheets/admin/sections/people.css.sass
jako 1. lub 2. dopasowanie.
źródło
'g:ctrlp_match_func
Dobrym przykładem tego w użyciu jest ta wtyczka: vim.org/scripts/script.php?script_id=4884Odpowiedzi:
Podobne pytanie zostało właśnie zadane na reddicie Vima tutaj . Sam zacząłem używać ctrlp-cmatcher już jakiś czas temu, co wydaje mi się znacznie bardziej inteligentne w dopasowywaniu odpowiedniego pliku. Zauważ, że wymaga skompilowanego komponentu. W przeciwnym razie będziesz musiał wypróbować niektóre podejścia z tego artykułu .
źródło
CtrlP ma kilka różnych trybów
Ctrl-R
iCtrl-D
.Ctrl-R
używa twoich danych wejściowych jako surowego Regexu, co oznacza, że znajdzieszpeople
w nim tylko dopasowania wyraźnie.Ctrl-D
dopasowuje tylko nazwę pliku, ignorując ścieżkę.Uważam, że domyślną funkcją CtrlP jest łączenie się
.*
z każdą postacią jako postać surową, więc kropka jest traktowana jak kropka. Jeśli wiesz z góry, że plik ma głębokość co najmniej 2 katalogów, możesz to zrobić//people
.źródło