Rozumiem, że ograniczenie się do waniliowego Vima (nie używającego wtyczek) ogranicza możliwości edytora, ale ponieważ często przełączam się między różnymi maszynami, często przenoszenie mojego środowiska wszędzie jest zbyt trudne. Chcę po prostu zostać w waniliowym Vimie.
Coś, co mnie powstrzymuje, to możliwość szybkiego przełączania się między plikami. I (wierzcie przynajmniej) mają dobre zrozumienie buforów , okien , zakładek , a także netrw ( Vex
, Ex
itp).
Ale w edytorze, takim jak Sublime Text , mogę po prostu pisać ctrl- pi od razu znajduję się w pliku.
Wiem, że mogę zejść do powłoki, ale zastanawiam się, czy są jakieś inne „ukryte” sekrety szybkiego przełączania się między plikami w Vimie w oparciu o coś więcej niż tylko nazwę pliku.
Odpowiedzi:
Najbliższym odpowiednikiem („najbliższym”, a nie „dokładnym”) Ctrl+ ST2 Pjest wtyczka o nazwie, przygotuj się… CtrlP . Istnieją inne podobne wtyczki, takie jak Command-T lub FuzzyFinder .
Używam CtrlP i uwielbiam to, ale z całego serca popieram Twoją decyzję o przejściu na „brak wtyczek”. Nie jest to najłatwiejsza droga, ale na dłuższą metę się opłaci.
Otwieranie plików
Najbardziej podstawowym sposobem otwarcia pliku jest
:e /path/to/filename
. Na szczęście otrzymujesz uzupełnianie tabulatorów i symbole wieloznaczne: klasyczne*
i specjalne**
, co oznacza „dowolny podkatalog”.Łącząc to wszystko, możesz:
wybrać spośród wszystkich plików zawierających
foo
w swojej nazwie w katalogu roboczym lub:aby wybrać spośród wszystkich plików zawierających
bar
ich nazwę w dowolnym podkatalogu zawierającymfoo
jego nazwę, w dowolnym miejscu w katalogu roboczym.Oczywiście, że pracuje dla
:tabe[dit]
,:sp[lit]
a:vs[plit]
także.Te polecenia są jednak ograniczone do jednego pliku. Służy
:next
do otwierania wielu plików:i spójrz na
:help arglist
.Skakanie między zderzakami
:b[uffer]
jest podstawowym poleceniem przełączania bufora:Zauważ, że wiele z tych poleceń i ich krewnych akceptuje liczbę.
Na
:ls
polecenie pokazuje listę załadowanych bufory. Jest to jednak trochę „specjalne”: bufory mają przypisany numer podczas ich tworzenia, więc możesz mieć listę, która wygląda jak1 2 5
po usunięciu buforów. Jest to trochę niezręczne, tak, i to sprawia, że przełączanie się na bufor według jego numeru jest nieco zbyt kłopotliwe. Wolę przełączania przez częściowe nazwy,:b foo<Tab>
lub na rowerze,:bn :bp
.W każdym razie, tutaj jest fajne mapowanie, które wyświetla wszystkie załadowane bufory i wypełnia monit, czekając, aż wpiszesz numer bufora i naciśnij
<enter>
:Dzięki temu mapowaniu przejście do innego bufora jest tak proste, jak:
lub:
Pomysł pochodzi z tego obrazu zaczerpniętego z kolekcji infografik Vima Bairui :
Vim ma również
<C-^>
(lub<C-6>
na niektórych klawiaturach) - odpowiednik trybu normalnego:b#
- przeskakiwanie między bieżącym a poprzednim buforem. Użyj go, jeśli często przełączasz się między dwoma buforami.Przeczytaj wszystko o buforach w
:help buffers
.Przejdź do deklaracji
W pliku możesz użyć
gd
lubgD
.W projekcie funkcja „tagów” Vima jest twoim przyjacielem, ale będziesz potrzebować zewnętrznego indeksatora kodu, takiego jak ctags lub cscope. Najbardziej podstawowe polecenia to
:tag foo
i<C-]>
z kursorem na nazwie metody. Oba narzędzia są dobrze zintegrowane Vima: patrz:help tags
,:help ctags
i:help cscope
.Z tego co warto, intensywnie korzystam z nawigacji po tagach do poruszania się w projekcie (głównie używając CtrlP
:CtrlPTag
i:CtrlPBufTag
poleceń, ale też wbudowanych), a moją ulubioną „ogólną” metodą przełączania buforów jest nazwa.Wdrażam plik config
Wielu użytkowników Vima poddaje swoją konfigurację kontroli wersji, co sprawia, że instalacja własnej konfiguracji na nowej maszynie jest bardzo szybka i łatwa. Pomyśl o tym.
EDYTOWAĆ
Kilka miesięcy temu musiałem pracować na zdalnym komputerze z przestarzałym Vimem. Mogłem zainstalować odpowiedniego Vima i sklonować swoją ukochaną konfigurację, ale tym razem zdecydowałem się podróżować lekko, aby „wyostrzyć piłę”. Szybko zbudowałem minimalistyczny
.vimrc
i ponownie odwiedziłem kilka na wpół zapomnianych natywnych funkcji. Po tym koncercie zdecydowałem, że CtrlP nie jest tak konieczne i pozbyłem się go: natywne funkcje i niestandardowe mapowania nie są tak atrakcyjne, ale wykonują zadanie bez większych zależności.Żonglowanie plikami
:find
jest naprawdę świetnym poleceniem, gdy tylko będzieszset path
poprawnie. Z moimi ustawieniami,,ffoo<Tab>
znajdziefoo
rekursywnie wszystkie pliki zawierające w bieżącym katalogu. Jest szybki, intuicyjny i lekki. Oczywiście korzystam z tego samego ukończenia i symboli wieloznacznych, co z:edit
przyjaciółmi.Aby proces był jeszcze szybszy, poniższe mapowania pozwalają mi na pominięcie całej części projektu i rekurencyjne wyszukiwanie plików w katalogu bieżącego pliku:
OSTRZEŻENIE! Ta
path
opcja jest niezwykle potężna. Powyższa wartość - -.,**
działa dla mnie, ale języki, których używam, nie mają standardowej biblioteki. Prawidłowa wartość zależy wyłącznie od Twoich potrzeb.Żonglowanie buforami
Powyższe mapowania zawierają listę dostępnych buforów w „dzikim menu” z pustym znakiem zachęty, co pozwala mi albo poruszać się po menu,
<Tab>
albo wpisać kilka liter i<Tab>
ponownie zawęzić listę. Podobnie jak w przypadku powyższych mapowań plików, proces jest szybki i prawie bezproblemowy.Te odwzorowania mówią same za siebie.
Żonglerka tagami
To odwzorowanie wykorzystuje wyszukiwanie regex zamiast wyszukiwania całych słów, więc mogę
,jba<Tab>
znaleźć tagfoobarbaz()
.Tak, dopasowywanie rozmyte uzależnia, ale bez niego możesz być równie produktywny. I za ułamek ceny.
WIĘCEJ EDYTUJ
Kilka dodatkowych porad / wskazówek…
Opcje Wildmenu
„Dzikie menu”, włączone za pomocą
set wildmenu
, ułatwia nawigację po plikach / buforach . Jego zachowanie zależy od kilku opcji, które warto zbadać:wildmode
mówi Vimowi, jak chcesz, aby zachowywało się "wildmenu":wildignore
odfiltrowuje wszystkie cruft:wildignorecase
umożliwia wyszukiwaniefoo
i znajdowanieFoo
:Ślady pilników
Niedawno znalazłem ten klejnot u kogoś innego
~/.vimrc
. Tworzy znacznik pliku w dokładnym położeniu kursora za każdym razem, gdy opuszczasz bufor, dzięki czemu, gdziekolwiek jesteś,'J
przeskakuje do ostatniego edytowanego buforu JavaScript. Niesamowite.źródło
:e
ale od teraz będę go często używać . Podziwiam pracę, która dostała się do Ctrl-P i mogę się z niej wiele nauczyć, ale to nie zadziałało dla mnie. Okazało się, że jest trochę powolny i jako taki przerywa mój tok myślenia podczas pracy (może to być mój system, moje ustawienia, ja, ale nie badałem)**
jest naprawdę świetny.gb
mapą. Kolejny, którego będę używał dużo. Wszystkie wtyczki bufora, które wypróbowałem (CtrlP, bufExplorer, ...) nie są tak szybkie jak ta ( oczywiście, oferują większą funkcjonalność, ale nie wystarczają, abym mógł ich używać) .Odpowiedź w dużej mierze zależy od twoich preferencji i okoliczności. Kilka przykładów:
<C-^>
jest to bardzo przydatne. Ogólnie rzecz biorąc, plik alternatywny to ważna koncepcja.:split
rozwiązuje problem ze zlokalizowaniem bufora zamiast zlokalizowania okna (po otwarciu wszystkich buforów). Możesz użyć,[N]<C-w><C-w>
aby szybko się do niego przełączyć.:[N]b[uffer]
i:[N]sb[uffer]
są całkiem przydatne;:ls
podaje liczby.Wtyczki (lub przynajmniej niestandardowe mapowania) mogą wiele poprawić, a na vim.org jest cała różnorodność na ten temat . Istnieją różne mechanizmy dystrybucji konfiguracji (Pathogen + GitHub, Dropbox, ...) lub możesz zdalnie edytować pliki serwera za pośrednictwem wtyczki netrw dostarczanej z Vimem.
źródło
mA
aby zapisać znakA
i `` A '', aby powrócić. Uważam, że netrw jest znacznie bardziej przydatne, gdy dowiedziałem się,:Rex
który powrót do Explorera.:b
,:e
i wiele innych może używać symboli wieloznacznych, takich jak*
i**
.:b
Polecenie może wziąć częściową nazwę pliku. Połącz to z<c-d>
lub z dzikim menu, do którego możesz zajść całkiem daleko. Jeśli chodzi o wtyczki, możesz użyć czegoś specyficznego dla domeny, na przykład rail.vim, który zapewnia polecenia nawigacyjne specyficzne dla railsów lub czegoś bardziej ogólnego, jak CtrlP.Czasami przydatne jest również sekwencyjne przeglądanie listy plików (np. Jeśli zrobiłeś coś takiego, jak
vim *.php
otwieranie kilku plików jednocześnie). Następnie można użyć:n[ext]
(jak również:prev[ious]
,:fir[st]
i:la[st]
) do nawigacji (oprócz tego, co zostało zaproponowane w innych odpowiedzi).źródło
Możesz wykonać znak wieloznaczny w wierszu poleceń bez żadnych wtyczek. na przykład
pozwoli ci przejść przez wszystkie pliki zaczynające się od „foo” w drzewie katalogów pod ./src i wybrać ten, który chcesz edytować.
Jeśli już edytowałeś plik i nadal znajduje się w buforze, możesz się do niego przełączyć za pomocą:
który przejdzie przez wszystkie bufory z „foo” w ścieżce. Może być konieczne ustawienie opcji wildmode i wildmenu, aby uzyskać pożądane zachowanie. mam
w moim .vimrc.
źródło
Jeśli jesteś na nazwie pliku i chcesz przejść do tego pliku,
gf
zrobi to za Ciebie. Lubię też używać ctags , które nie są wtyczką; po prostu budujesz tagi i możesz łatwo przeskakiwać po swojej bazie kodu.źródło
Jeśli chcesz przełączać się między plikami w edytorze vim, zobacz poniższą odpowiedź
Najpierw naciśnij
Esc
klawisz, aby wyjść z trybu edycji.Następnie wpisz,
:e
aby sprawdzić bieżącą ścieżkę pliku.jeśli chcesz przejść do innego pliku, wpisz
:e /path-of-file.txt/
używając tego, który możesz przełączyć.Jeśli chcesz przejść do poprzedniego pliku, po prostu wpisz,
:e#
który przełączy się na poprzednią ścieżkę pliku.źródło
Miałem ten sam problem z Vimem.
Ostatnią rzeczą, której chcę, jest poleganie na wtyczkach w zadaniu tak przyziemnym, jak przełączanie plików.
Dodałem następujące wiersze do
.vimrc
I BAM! Mogę teraz,
:find any/filename/in/any/folder/
o ile vim znajduje się w katalogu głównym projektu. Uzupełnianie zakładek działa. Symbole wieloznaczne działają!Gdy pliki są już otwarte, aw tle znajduje się mnóstwo buforów (możesz użyć
:ls
do wyświetlenia wszystkich buforów), uruchomienie:b any/file <TAB>
spowoduje rozmyte wyszukiwanie wszystkich buforów i przeskoczy do wymaganego pliku. W przypadku, gdy nie jest unikalny, pojawi się dzikie menu zakładek (stąd druga linia w .vimrc), które można wybrać za pomocą tabulatora.Moja odpowiedź pochodzi z tego niesamowitego filmu
https://www.youtube.com/watch?v=XA2WjJbmmoM&feature=youtu.be&t=489
Jest więcej sztuczek i polecam go obejrzeć.
źródło