Zwykle pracuję z 2 oknami, pionowo podzielonymi.
Problem, który chciałbym rozwiązać, to: łatwe przeskakiwanie do przodu i do tyłu z pliku implementacyjnego nagłówka <->
Badam, bez szczęścia, 2 sposoby na zrobienie tego:
- Otwórz alternatywny plik w bieżącym oknie : Istnieje wiele sposobów, aby to zrobić, jednak nie mogę znaleźć sposobu, który zapamięta miejsce, w którym znajdowałem się w poprzednim pliku (tj. Przeskocz do nagłówka, przeskocz do tyłu, ale nie w to samo miejsce, w którym byłem ).
- Otwórz alternatywny plik w drugim oknie : Jest to dobrze zdefiniowane, ponieważ zawsze pracuję tylko z 2 oknami, jednak brakuje mi wiedzy na ten temat.
vim-windows
zach
źródło
źródło
:h line()
(ogólne rozwiązanie): „Ta komenda automatyczna przeskakuje do ostatniej znanej pozycji w pliku zaraz po jej otwarciu, jeśli ustawiony jest znak„ ”: au BufReadPost * if line („ ” \ "")> 1 && line ("'\" ") <= line (" $ ") | exe "normal! g` \" "| endifOdpowiedzi:
Istnieją trzy główne kroki w realizacji tego, o co pytasz:
Aby znaleźć alternatywną nazwę pliku, należy podzielić bieżącą nazwę pliku na „root” i „rozszerzenie”. Prostym sposobem na to jest:
Jeśli wiesz, że zawsze przełączasz się między plikami
.h
i.cpp
, możesz łatwo zmienić rozszerzenie z jednego na drugi:Alternatywnie, utwórz słownik mapujący znane rozszerzenia na potencjalnie ważne alternatywne rozszerzenia. Lub użyj,
globpath()
aby uzyskać wszystkie możliwe alternatywy dla bieżącego pliku:i wybierz pierwszy, czy cokolwiek innego. Wolę to
globpath
podejście, z dodatkowymi sprytami opiszę później. Po wybraniu rozszerzenia docelowego utwórz pełną ścieżkę docelową:Teraz możesz otworzyć alternatywny plik w bieżącym oknie:
Lub użyj,
winnr()
aby uzyskać numer „innego okna” (winnr("#")
jest to okno,<C-W>p
do którego można by przeskoczyć, lub możesz go na stałe zakodować, jeśli wiesz, że zawsze będzie takie samo dla twojej konfiguracji) i zrobić coś takiego:Daje to naprawdę podstawowe rozwiązanie do otwierania alternatywnych plików. W powyższym podejściu jest kilka niedociągnięć, ponieważ napisałem, że jest to proste i jest trochę nietypowe. Napisałem wtyczkę , która przełącza pliki na przemian „tak, jak chciałem” (przeglądając wszystkie dostępne
globpath()
wyniki). Rozwiązuje niektóre problemy z prostotą powyższego, możesz sprawdzić jego implementację, jeśli chcesz dowiedzieć się więcej.Na koniec punkt „przywróć pozycję kursora”. Zapisałem go na koniec, ponieważ jest prostopadły do alternatywnego przełączania (moja wtyczka nie obsługuje tego na przykład), ale możesz wprowadzić go do swojej funkcji, jeśli chcesz rzucić własny.
:help line()
ma komendę automatyczną, która jest przydatna do przywracania pozycji kursora do miejsca, w którym znajdowała się w momencie ostatniego otwarcia pliku:Po prostu włożyłem to lub coś bardzo podobnego,
.vimrc
ponieważ wolę takie zachowanie przez cały czas. Możesz łatwo po prostu umieścić kod w innym miejscu.źródło
Możesz użyć wtyczki vim-fswitch wraz z następującą konfiguracją w swoim
.vimrc
pliku:Jeśli wpiszesz
<Leader>
(która jest\
domyślnie), a następnies
w sposób.hpp
lub.h
pliku, plugin będzie sprawdzić, czy dopasowanie.cpp
,.cc
czy.c
plik istnieje:include
przezsrc
w ścieżce bieżącego plikusrc
folderu nad bieżącym plikiemIstnieje więcej opcji można użyć, aby dopasować swój projekt lepiej w dokumentacji . Zajmie ci to kilka minut, ale kiedy już to dobrze zrobisz, powinieneś to pokochać. Osobiście uważam, że jest bardzo elastyczny i rozszerzalny, a ponadto działa równie dobrze dla wielu rodzajów plików (.m, .h, .inl itp ...).
źródło
W Twoim
.vimrc
Umożliwia to szybkie poruszanie się między oknami, po prostu używając klawiszy kierunkowych Ctrl i VIM z wiersza głównego. Niesamowite jest to, że masz jeden wspólny sposób na przeskakiwanie do dowolnego okna, w tym do okna szybkiego dostępu.
Aby szybko przełączać się między nagłówkiem i źródłem, którego używam, można
vim-scripts/a.vim
znaleźć tutaj: https://github.com/vim-scripts/a.vim , użyj:A
polecenia, aby przełączyć.Uwaga dodatkowa => Jeśli używasz tmux, możesz użyć https://github.com/christoomey/vim-tmux-navigator, aby płynnie przechodzić między oknami vim lub nvim a terminalem.
źródło
Po prostu podzielę się moją super szybką i brudną wersją ...
Skonfiguruj moje mapowania; Alt-O otwiera powiązany plik w tym samym oknie, Alt-Shift-O otwiera się w podziale ...
Następnie mam funkcję, która pobiera listę powiązanych plików. Chciałem go ulepszyć, aby posiekać nazwę pliku w pierwszej kropce, a nie w ostatniej, ale to wciąż ćwiczenie dla czytelnika.
Moja konfiguracja .vimrc jest czasami wyspecjalizowana dla każdego klienta; niektóre mają źródła i zawierają osobne hierarchie folderów, niektóre mają je razem. Domyślnie zakładam, że wszystkie są w pobliżu, ale jeśli będę musiał polować, zapewnię funkcję zastępczą taką jak ta.
Następnie przeglądam tę listę plików, aby znaleźć plik bieżącego bufora i przechodzę do następnego na liście. To nie jest często tak proste jak para .cpp / .h, często będę miał inne rzeczy, które należy wziąć pod uwagę.
I w końcu dwie funkcje, które albo otwierają się w bieżącym oknie, albo dzielą ...
Moja wersja dzielenia zawsze umieszcza pliki .cpp i .c w podziale poniżej, w innym przypadku domyślnym podziale (co w moim przypadku jest powyżej).
źródło