Otworzyć nazwę pliku pod kursorem jak gf, ale w nowej karcie (lub podzielonej)?

43

Polecenie trybu normalnego gfprzechodzi do pliku ze ścieżką, w której aktualnie znajduje się kursor.

Ale robi to w bieżącym oknie, zastępując bieżący tekst. Oznacza to, że musisz wyraźnie przejść wstecz, aby później przejść wstecz, i że potencjalnie musisz zapisać zmiany w bieżącym buforze.

Jestem pewien, że jest to możliwe zamiast otwarcia pliku pod kursorem w nowym widoku tabulacji?

Volker Siegel
źródło
3
Włączenie 'hidden'opcji ( set hidden) pozwala odejść od niezapisanych buforów. Dla mnie był to ogromny wzrost wydajności i był niezbędny, aby przestać tak bardzo polegać na podziałach i kartach.
tommcdo

Odpowiedzi:

56

EDYCJA: Sugeruj ładnie symetryczne odwzorowania dla przypadku podziału pionowego, ponieważ Vim domyślnie ma dwa odwzorowania dla przypadku podziału poziomego.

Istnieje kilka sposobów edytowania „pliku pod kursorem” i chociaż na pewno możesz gfzmienić mapowanie, aby edytować na nowej stronie, jak wspomina @ Alexander-myshov, oznacza to, że masz dwa sposoby na edycję go na nowej stronie, ale nie ma możliwości edytuj go w bieżącym oknie, co czasem możesz chcieć zrobić. Nie jest trudno korzystać ze standardowych mapowań, ale jeśli chcesz zmienić mapowanie jednego z nich gf, sugeruję zmianę mapowań, aby nie stracić żadnego z nich.

Niektóre sposoby edytowania nazwy pliku pod kursorem to

  • gf - Edytuj istniejący plik pod kursorem w tym samym oknie
  • C-Wf - Edytuj istniejący plik pod kursorem w podzielonym oknie
  • C-WC-F - Edytuj istniejący plik pod kursorem w podzielonym oknie
  • C-Wgf - Edytuj istniejący plik pod kursorem na nowej karcie

Nie ma standardowego mapowania do edycji istniejącego pliku pod kursorem w podziale pionowym, ale można to osiągnąć, najpierw dzieląc okno w pionie, a następnie edytując plik pod kursorem w bieżącym oknie.

  • C-Wv+ gf- Edytuj istniejący plik pod kursorem w pionowo podzielonym oknie

Jak widać powyżej, istnieją dwa domyślne odwzorowania do edycji pliku pod kursorem w podziale poziomym. Możesz zatem zmienić mapowanie jednego z powyższych na keystring powyżej, rozszerzając grupę map, tak aby obejmowała również przypadek podziału pionowego. Można powiązać czegokolwiek, oczywiście, ale to wydaje się zakończyć symetrię ładnie: nnoremap <C-W><C-F> <C-W>vgf. Teraz masz

  • gf - Edytuj istniejący plik pod kursorem w tym samym oknie
  • C-Wf - Edytuj istniejący plik pod kursorem w podzielonym oknie
  • C-WC-F - Edytuj istniejący plik pod kursorem w pionowo podzielonym oknie
  • C-Wgf - Edytuj istniejący plik pod kursorem na nowej karcie

Możesz także przejść do określonej linii w pliku, jeśli po nazwie pliku pod kursorem znajduje się numer linii. Jeśli masz

filename:10

możesz edytować plik i przesunąć kursor do linii 10 za pomocą gF. Odpowiednik ten obowiązuje w C-WFprzypadku podziału i C-WgFstrony karty. Uzupełnienie symetrii dla podziału pionowego nie jest tutaj tak proste, ale sugerowałbym, że C-WC-S-Fmapa uzyskana z nnoremap <C-W><C-S-F> <C-W>vgF, naśladując Flub Shift+ fz domyślnych map jako kandydata.

:Jest przykładem, można użyć dowolny znak, który nie jest postacią nazwa pliku (zobacz :h 'isfname').


Wszystkie te polecenia pochodzą z sosem jabłkowym, np

  • rozwiń symbole wieloznaczne
  • Szukaj więcej miejsc niż w bieżącym katalogu, zgodnie z twoją 'path'opcją
  • dodając rozszerzenie pliku do nazwy pliku, zgodnie z twoją 'suffixesadd'opcją
  • w przeciwnym razie zmodyfikuj podaną nazwę pliku, aby znaleźć dopasowanie, zgodnie z Twoją 'includeexpr'opcją

Przeczytaj więcej na :help gfi tematy pomocy dla tych różnych opcji.


Jeśli nazwa pliku pod kursorem nazywa plik, który nie istnieje, możesz lepiej użyć standardowych poleceń edycji <cfile>, na przykład

:edit <cfile> // edit non-existent file under cursor in current window
:split <cfile> // edit non-existent file under cursor in split window
:vsplit <cfile> // edit non-existent file under cursor in vertical split window
:tabe <cfile> // edit non-existent file under cursor in new tabpage

i przy pomocy tych oczywiście możesz użyć rzeczy takich jak :spl+10 filenameprzesunięcie kursora do określonej linii lub :tabe+/cologne filenameprzesunięcie kursora do pierwszego wystąpienia wzoru.

jjaderberg
źródło
+1 Najlepszy komentarz z jasnym wyjaśnieniem, znacznie lepszy niż dokumentacja podzielona na kilka tematów.
Loves Prawdopodobieństwo
8

Po prostu użyj do tego powiązań:

otwieranie w nowym oknie (podział):

nnoremap gf <C-W>f
vnoremap gf <C-W>f

otwieranie w nowej karcie:

nnoremap gf <C-W>gf
vnoremap gf <C-W>gf

sprawdź również: :help CTRL-W_gf

Aleksander Myszow
źródło
Czy te ostatecznie działają dla Ciebie? Vim nie chce, żebym zmienił mapę gfna coś innego. Nawet nnoremap gf :echo "hello"<CR> nadal otwiera plik pod kursorem w nowym buforze (i tak, sourced vimrc).
tandrewnichols
Ach, nie ważne - przeszkadza mi wtyczka.
tandrewnichols