2013-03-23 6 views
17

W Zsh mogę używać dopełniania nazw plików za pomocą ukośników, aby kierować plik głęboko w moim drzewie źródłowym. Na przykład, jeśli typ:Jak autouzupełnianie ścieżek plików w Vimie, tak jak w zsh?

vim s/w/t/u/f >TAB< 

zsh zastępuje wzorca:

vim src/wp-contents/themes/us/functions.php 

Co chciałbym to, aby móc kierować plików w ten sam sposób w wierszu poleceń Vima, tak że pisanie

:vi s/w/t/u/f >TAB< 

uzupełni do:

:vi src/wp-contents/themes/us/functions.php 

Próbuję parsować dokumentację Vima dla trybu dzikiego, ale nie widzę, jakie ustawienia by mi to dały. Robi autouzupełnianie dla poszczególnych nazw plików, ale nie ścieżek plików. Czy Vim obsługuje to natywnie? Lub w jaki sposób mogę dostosować algorytm autouzupełniania dla plików?

Dzięki za porady! -mykle-

+0

Odpowiedziałem na to niepoprawnie w oparciu o błędne odczytanie pytania. Nie wiem, jak to zrobić w Vimie. Z całą pewnością nie jest to możliwe z żadną opcją Vima, a nic z pomocy 'wildmode' nie pomoże. Możliwe jest wdrożenie za pomocą wtyczki. Nie wiem, czy taki istnieje. Nagle chcę tego teraz, gdy go podniosłeś, więc jeśli nie mogę znaleźć wtyczki, napiszę. –

Odpowiedz

8

Nie mogłem znaleźć wtyczki, aby to zrobić, więc napisałem jedną. Nazywa się vim-zsh-path-completion. Robi to, czego szukasz, ale przez <C-s> zamiast <Tab>. Możesz go użyć z <Tab>, aby uzyskać jeszcze większą kontrolę nad dopasowaniem.

Zawiera błędy, ale w przypadku podstawowych ścieżek bez spacji/znaków specjalnych powinno działać. Uważam, że jest on wystarczająco użyteczny w swoim obecnym stanie, aby być pomocnym. Mam nadzieję zniwelować błędy i oczyścić kod, ale doszedłem do wniosku, że zacznę teraz wysyłać opinie.

Dzięki za pomysł!

Oryginalna (błędna) odpowiedź, ale z kilkoma przydatnymi informacjami na temat trybu dzikiego Vima.

umieścić następujące informacje w swojej .vimrc:

set wildmenu 
set wildmode=list:longest 

który będzie wykonywał do najdłuższego unikalnej meczu na <Tab>, w tym dołączenie / i schodząc do katalogów gdzie stosowne. Jeśli jest kilka meczów, wyświetli się lista meczów z dotychczasowych zgłoszeń. Następnie możesz ponownie wpisać więcej znaków i <Tab>.

Wolę następujące ustawienie, co kończy się pierwszym unikalnym meczu na <Tab>, a następnie wyskakuje menu, jeśli trafisz <Tab> ponownie, którym można poruszać się za pomocą klawiszy strzałek i wciskamy ENTER, aby wybrać spośród:

set wildmode=list:longest,list:full 

Zapoznaj się z :help wildmenu i :help wildmode. Możesz także ustawić wildignore na listę wzorców, które mają zostać zignorowane podczas wypełniania. Mam mój jako:

set wildignore=.git,*.swp,*/tmp/* 
+0

erhegerd! jak rad to jest? wielkie dzięki! –

+0

Nadal próbuję sprawić, żeby działało ... jest wymienione w moich: nazwach skryptów, ale nie otrzymuję żadnej akcji z Ctrl-S. Wydaje się, że robisz coś z gvimem, ale nie z prostym starym vimem. Czy są określone wymagania dotyczące wersji vim? –

+0

Jest w stanie ciągłego przepraszania. W większości pracowałem, kiedy to opublikowałem, ale było to trochę przedwczesne roszczenie. Opracowuję błędy i testuję je teraz. Sprawdź w GitHub za kilka dni i zapisz tam błędy. Wezmę tu jeszcze jeden komentarz, gdy jestem pewien, że istnieje stabilne wydanie, ale nie jest to właściwe forum do aktualizacji statusu. –

5

Vim nie ma takiej funkcji domyślnie. Najbliżej wbudowaną funkcją jest combo wildmenu/wildmode, ale wciąż jest bardzo różne.

A quick look at the script section of vim.org nic nie zwróciłem, ale nie wyglądałem zbyt daleko: należy dalej szukać. Może gdzieś tam jest.

Czy wypróbowałeś Command-T, LustyExplorer, FuzzyFinder, CtrlP lub jedną z wielu podobnych wtyczek?

Używam CtrlP, a dopasowywanie rozmyte można wykonać na filepath lub nazwie pliku. Kiedy odbywa się na ścieżkę np mogę użyć KeySequence poniżej, aby otworzyć src/wp-contents/themes/us/functions.php (zakładając functions.php jest plikiem tylko pod us że zaczyna się f):

,f " my custom mapping for the :CtrlP command 
swtuf<CR> 

edit

W myśleć o możliwe rozwiązanie Obawiam się, że byłem trochę krótkowzroczny. Skoncentrowałem się na Twoich konkretnych wymaganiach, ale Vim ma fajne sztuczki, jeśli chodzi o otwieranie plików!

Komenda :e[dit] akceptuje dwa rodzaje symboli wieloznacznych: * jest jak * należałoby użyć w swojej skorupie i ** oznacza „dowolny podkatalog”.

Więc jest to całkowicie możliwe do zrobienia:

:e s*/w*/t*/u*/f*<Tab> 

lub coś podobnego:

:e **/us/f<Tab> 

lub nawet:

:e **/fun<Tab> 

połączeniu z ustawieniami wildmode w odpowiedzi Jima, myślę masz tutaj dość potężne narzędzie do nawigacji po plikach.

+0

CtrlP to dobre rzeczy. Zastanawiam się, czy istnieje łatwy sposób, aby podłączyć się do niego w wierszu poleceń. –

+0

Oczywiście się zgadzam. Czy chodzi ci o "użycie funkcji z CtrlP do uzupełnienia linii poleceń"? – romainl

+1

Naprawdę usunąłem odpowiedź, ponieważ błędnie przeczytałem pytanie. Ale potem poszedłem i napisałem samodzielną wtyczkę, żeby to zrobić. Zobacz moją nową odpowiedź, aby poznać szczegóły. Dodałem komentarze "wildmode" w nowej odpowiedzi dla innej opcji. –