Skrót do otwierania pliku w Vimie

123

Chcę otworzyć plik w Vimie, jak w Eclipse, używając Ctrl+ Shift+ Rlub opcji Ctrl+ Nautouzupełniania. Wywołaj skrót klawiaturowy, wpisz nazwę / wzorzec pliku i wybierz spośród wszystkich pasujących nazw plików.

Wiem, że otwieram go normalnie jak:

:tabe <filepath>
:new <filepath>
:edit <filepath>

Problem polega na tym, że w takich przypadkach muszę określić całą ścieżkę do pliku.

Techmaddy
źródło
1
Zwróć uwagę, że sugerowane polecenia mają inny efekt :tabe, otwierając plik w nowej karcie, :newdzieląc poziomo okno i :editzamykając bieżący plik przed otwarciem nowego.
Skippy le Grand Gourou

Odpowiedzi:

61

Niedawno zakochałem się w fuzzyfinder.vim ... :-)

: FuzzyFinderFile pozwoli ci otwierać pliki poprzez wpisywanie częściowych nazw lub wzorców.

f3lix
źródło
141

To, co zwykle robię, to e .(e-spacja-kropka), która daje mi możliwy do przeglądania bieżący katalog - wtedy mogę /- szukać fragmentów nazw, tak jak znajdowanie słowa w pliku tekstowym. Ogólnie uważam, że jest to wystarczająco dobre, proste i szybkie.

dkretz
źródło
22
Nie potrzebujesz miejsca, oszczędzając dodatkowe 25% pisania. ( :e.).
Konrad Rudolph
67
Nie potrzebujesz kropki, jeśli używasz dużej litery e, np .: E <ENTER>
Andriy Drozdyuk
2
@drozzy Dzieje się tak z
vimem
7
Jest różnica w zachowaniu między :e.i :Echociaż: jeśli bieżący plik był edytowany i nie został jeszcze zapisany, pierwszy będzie narzekał (jak :edit) z powodu „braku zapisu od ostatniej zmiany”, podczas gdy ten drugi podzieli okno w poziomie (jak :new), aby umożliwić otwarcie nowego pliku (podczas gdy oba zastąpią bieżący plik nowym plikiem, jeśli nie został on zmodyfikowany (jak :edit)).
Skippy le Grand Gourou
1
Jeśli otworzysz plik, a następnie zastąpisz go drugim plikiem, możesz wrócić do pierwszego, używając „e #”
dkretz
33

:find to inna opcja.

Otwieram vim z katalogu głównego mojego projektu i mam tam pathzestaw.

Następnie mogę otwierać pliki znajdujące się w dowolnym miejscu w drzewie za pomocą:

:find **/filena< tab >

Karta będzie automatycznie uzupełniać różne mecze. ( **nakazuje jej rekurencyjne przeszukiwanie ścieżki).

mattwarren
źródło
Nie wydaje mi się przydatne, :findponieważ uzyskanie ścieżki względnej do katalogu roboczego. Zobacz pytanie i odpowiedź @romainl tutaj: stackoverflow.com/questions/28224168/… . Uważam, że bardziej interesująca jest odpowiedź @strager, aby łatwiej uzyskać ścieżkę względem katalogu roboczego.
ziiweb
25

Możesz wyszukać plik w bieżącej ścieżce, używając **:

:tabe **/header.h

Kliknij kartę, aby zobaczyć różne zakończenia, jeśli jest więcej niż jedno dopasowanie.

strager
źródło
Próbowałem tego użyć, ale to działa tak wolno. Mam na myśli, że moja aplikacja jest duża, a redaktor na jakiś czas przestał działać. Czy znasz jakieś ustawienie zwiększające wydajność i szybkość edytora?
Techmaddy
1
Niezła odpowiedź. Użyj czegoś takiego :tabe **/*der.h, jak, jeśli nie pamiętasz pełnej nazwy pliku.
ziiweb
16

Rozważ użycie wtyczki CtrlP .

Jest zawarty w Janus Distributive .

Umożliwia wyszukiwanie plików w bieżącym katalogu, otwieranie buforów lub ostatnio używanych plików przy użyciu „dopasowania rozmytego” lub wyrażenia regularnego.

Alexey
źródło
1
właściwie używam go jako części dystrybucji Janusa.
Alexey
Oryginalne repozytorium CtrlP jest nieaktywne, ale istnieje aktywny fork
jpyams
12

chyba że czegoś brakuje,: e nazwa pliku jest najszybszą metodą, jaką znalazłem.

Możesz również użyć tabulatora, aby automatycznie uzupełnić nazwę pliku.

Ian P
źródło
@dirkgently, tak jest. To wciąż jest skrót, jak sugeruje tytuł tego pytania, ale nie sądzę, żeby tego szukał pytający.
strager
U mnie autouzupełnianie karty nie działa dla: e. Poza tym nie zawsze chcesz szukać nazwy pliku, która zaczyna się od czegoś, ale raczej środkowe słowo w nazwie pliku.
Andriy Drozdyuk
9

Używam kilku skrótów w moim pliku .vimrc (dokładna składnia poniżej).

Opierają się one na fakcie, że w 90% przypadków chcę otworzyć inny plik w tym samym katalogu, w którym aktualnie edytuję lub w katalogu, który jest bardzo zbliżony w hierarchii do edytowanego pliku.

Oto, co robią polecenia:

,cd : Zmień bieżący katalog roboczy na katalog, w którym znajduje się aktualnie edytowany plik.

,e: Otwiera plik z już wypełnionym bieżącym katalogiem roboczym, więc musisz podać tylko nazwę pliku.

Umieść je w swoim .vimrc:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

Oto sekwencja wydarzeń:


  1. Edytujesz plik o nazwie test.java w katalogu „/ home / prog”
  2. ,cd -> Bieżący katalog roboczy to teraz „/ home / prog”
  3. ,e -> Rozwija się do „: e / home / prog”, aby można było po prostu wpisać nazwę pliku, powiedz test.h.

  1. ,e -> rozwija się do „: e / home”
  2. tab -> Przełączaj między podkatalogami / home
  3. enter-> cddo katalogu, który chcesz powiedzieć / home / prog
  4. ,e -> rozwija się do „: e / home / prog”
Himadri Choudhury
źródło
8

Jest też polecenie-t, które uważam za najlepsze z tej grupy (i wypróbowałem je wszystkie). Instalacja jest drobna, ale po zainstalowaniu jest to marzenie.

https://wincent.com/products/command-t/

Bronson
źródło
1
Możesz również spróbować ctrlp.vim ( github.com/kien/ctrlp.vim ). Zasadniczo jest to to samo co Command-T, ale napisane w czystym Vimscript. (IMHO jest też prostszy w użyciu)
datentyp
6

Używaj zakładek, działają podczas wprowadzania ścieżek plików w trybie ucieczki vima!

dirkgently
źródło
4

Jeśli masz tagi (a powinieneś), możesz otworzyć plik z linii poleceń po prostu podając nazwę klasy lub metody lub funkcji c, używając "vim -t DBPlaylist", aw vimie za pomocą ": tag ShowList ”.

Paul Tomblin
źródło
4

Jeśli edytujesz pliki we wspólnym katalogu, możesz :cdprzejść do tego katalogu, a następnie użyć :etylko nazwy pliku.

Na przykład zamiast:

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java

Możesz to zrobić:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java

Lub, jeśli masz już otwarty plik w żądanym katalogu, możesz użyć %skrótu dla bieżącej nazwy pliku i przyciąć go do bieżącego katalogu za pomocą :hmodyfikatora ( :help :_%:):

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java

I, jak powiedzieli inni, nazwy plików można uzupełniać tabulatorami w ex-line (zobacz :help cmdline-completionwięcej).

rampion
źródło
4

Nie jest to dokładnie to, czego szukasz, ale w wielu przypadkach jest dobre (choć nie we wszystkich).

Jeśli otworzysz VIM i pojawi się nazwa pliku w buforze, możesz umieścić kursor na tej nazwie i typie gf. Spowoduje to otwarcie pliku, którego nazwa znajduje się pod kursorem w tym samym buforze. To jest to samo co

:e CTRL+r CTRL+w

Nathan Fellman
źródło
1
Nacisnąłem gf i teraz otworzyłem nowy plik, który jest pod kursorem. Jak teraz wrócić do oryginalnego pliku. !!
vrbilgi,
@ user430294: Jest otwarty w innym buforze. Użyj:b oldname
Nathan Fellman
@vrbilgi, użyj Ctrl + o, aby wrócić do wcześniej edytowanego pliku. Użyj Ctrl + i, aby przejść dalej do pliku, z którego wróciłeś.
Беров
3

Znam trzy wtyczki, które pozwalają na otwieranie plików, obsługują autouzupełnianie i nie wymagają podawania pełnej ścieżki do pliku (ów) do otwarcia (o ile pliki znajdują się w jednym z katalogów z &pathopcji vim) :

Ostatnio widziałem inną wtyczkę z podobną funkcją, ale nie pamiętam nazwy.

Wkrótce: find prawdopodobnie będzie obsługiwał automatyczne uzupełnianie - łaty na ten temat krążą obecnie na liście dyskusyjnej vim_dev.

Luc Hermitte
źródło
1
  • możesz użyć (ustaw wildmenu)
  • możesz użyć tabulatora do autouzupełniania nazw plików
  • możesz też użyć dopasowania, na przykład: e p*.datlub coś w tym stylu (jak w starych dosach)
  • możesz również: przeglądaj potwierdź e (dla okna graficznego)

  • ale prawdopodobnie powinieneś także określić jakiej wersji vima używasz i jak to działa w emacsie. Może moglibyśmy znaleźć dokładną alternatywę dla vimów.

Wieża
źródło
1

Wspomniano o FuzzyFinderze, jednak uwielbiam zachowanie wtyczki FuzzyFinderTextmate, podobne do tekstu, które rozszerza zachowanie o wszystkie podkatalogi.

Upewnij się, że używasz wersji 2.16 pliku fuzzyfinder.vim - Wyższe wersje psują wtyczkę.

Naseer
źródło
1

Dzięki Exuberant ctags możesz tworzyć pliki tagów z informacjami o pliku:

ctags --extra=+f -R *

Następnie otwórz plik z VIM za pomocą

:tag filename

Możesz także użyć <tab>do autouzupełniania nazwy pliku.

Wonil
źródło
1

W GVIM plik można przeglądać za pomocą okna dialogowego otwórz / odczyt / zapis;

:browse {command}

{polecenie} - otwórz / odczyt / zapis

open - otwiera plik do odczytu - dołącza plik zapis - okno dialogowe Zapisz jako

Samantha
źródło
0

Zainstalowałem FuzzyFinder. Jednak ograniczenie polega na tym, że znajduje tylko pliki w bieżącym katalogu. Jednym z obejść tego jest dodanie FuzzyFinderTextmate. Jednak na podstawie dokumentacji i komentarzy nie działa to niezawodnie. Potrzebujesz odpowiedniej wersji FuzzyFindera i potrzebujesz skompilować swoją kopię Vima z obsługą Rubiego.

Innym rozwiązaniem, które teraz wypróbowuję, jest otwarcie wszystkich plików, których prawdopodobnie będę potrzebować na początku sesji edycji. Np. Otwórz wszystkie pliki w kluczowych katalogach ...

:args app/**
:args config/**
:args test/**
etc...

(Oznacza to, że prawdopodobnie miałbym otwarte dziesiątki plików, jednak jak dotąd wydaje się, że nadal działa OK.)

Potem mogę używać FuzzyFindera w trybie bufora i będzie on działał trochę jak command-oskrót TextMate ...

:FuzzyFinderBuffer
Ethan
źródło
Jesteś pewien? Mam trochę konfiguracji w moim .vimrc, poszukaj "g: fuf_abbrevMap". Musiałem znaleźć przykład w dokumentacji. Kiedy piszę skrót, wpisuję skrót, np. „Web:”, i wyszukuje wszystkie pliki w wybranym folderze. Mój problem polega na tym, że z jakiegoś powodu nie otwiera już plików, zamiast tego widzę [NEW DIRECTORY] na pasku stanu. Ale mam ten sam problem z: o, wydaje się nie mieć związku z fuf.