Jeśli użyję:
:tabedit file1 file2
Dostaję:
E172: Only one file name allowed
Czy jest jakiś sposób na użycie :tabedit
wielu nazw plików? Lub inny sposób otwierania wielu kart jednocześnie?
tabbed-user-interface
Martin Tournoij
źródło
źródło
:args *.c | tab all
. Drugie pytanie jest bardziej popularne, więc dobrze jest je również połączyć.Odpowiedzi:
Biorąc pod uwagę problemy i złożoność mojej drugiej odpowiedzi przy użyciu „wbudowanego” sposobu modyfikowania listy argumentów, dodałem własną funkcję, aby to zrobić:
Możesz teraz użyć
:Tabedit *.vim
. Ta funkcja rozszerzy wszystkie wzorce globowania i wykona:tabedit <f>
dla każdego pliku. Możesz dodać dowolną liczbę ścieżek, na przykład to wszystko działa:Cóż, i tak dalej ...
Ja to w małym globedit.vim wtyczce, która zawiera również polecenie
:Edit
,:Split
itdźródło
[<f-args>]
zamiast"<args>"
- w ten sposóbpattern
parametrem będzie List (tablica) i nie będziesz musiał radzić sobie z ręcznym dzieleniem łańcucha. (2) Podaj niezerową wartość jako trzeci argument, abyglob()
zwrócić listę. Wtedy możesz również uniknąć ręcznego podziału. Musisz zdać0
jako drugi argument, aby pominąć to bez wpływu na zachowanie:glob(l:p, 0, 1)
.O ile mi wiadomo, jedynym wbudowanym sposobem na to jest:
Najpierw
:args
zastąpi listę argumentów. Lista argumentów zawiera listę plików, w których otworzyłeś Vima; takvim file1 file2
oznacza, że lista argument zawierafile1
ifile2
.Możemy to zmodyfikować w czasie wykonywania, a Vim otworzy bufor dla każdego nowego wpisu na liście argumentów.
Zobacz
:help argument-list
po więcej informacji.:all
Polecenie otwiera okno dla każdego wpisu na liście argumentu:tab
polecenie wykonuje polecenie i otwiera nową kartę, gdy polecenie danego otworzy się nowe okno.Ostrzeżenia
Istnieje kilka zastrzeżeń dotyczących tej metody.
Przede wszystkim nie ma sprawdzania duplikatów, więc możesz uzyskać 2 lub więcej zakładek dla tego samego bufora.
Ale największym problemem jest to, że zastępuje wszystkie twoje zakładki tym, co znajduje się na liście argumentów; więc straciłeś wszystkie istniejące karty.
Można obejść ten nieznacznie używając
:argadd *.vim
aby dodać do listy argumentów, a nie zastąpienie go; ale poleceń takich jak:edit
lub:tabedit
czy nie zmienia listę argumentów, a stracisz te zaczepy chyba dodać je do listy argumentów (wciąż masz je na liście bufora, chociaż). Możesz także nie chcieć otwierać wszystkiego na liście argumentów na karcie, być może po prostu chcesz otworzyć 2 pliki jako dodatkową kartę.Być może mógłbyś to nieco poprawić, dodając najpierw wszystkie aktualnie otwarte karty do listy argumentów (czego tak naprawdę nie mogę zabrać do pracy), ale nadal nie jest to idealne. Jeśli karta ma 2 lub więcej okien, nadal je zmodyfikuje ...
źródło
:argdo tabedit %
, co otwiera nową kartę dla każdego argumentu. Zaczynając od jednej karty i otwierając n nowych, naturalnie pozostawisz z n + 1 kartami.:tab all
jest znacznie lepszym rozwiązaniem.Zamiast tego możesz użyć
:next
polecenia, na przykład:lub:
źródło
:args *.vim
? Przynajmniej zachowuje się tak samo i:help next_f
dokumentuje to jako to samo ...Z wiersza poleceń możesz użyć:
A jeśli zapomniałeś użyć
-p
nadal możesz użyćPrzy okazji nie zapominaj, że zmienna
tabpagemax
(wartość domyślna 10) ogranicza liczbę kart, które możesz otworzyć w ten sposób.źródło
W rzeczywistości możesz otwierać nowe karty i przechowywać bieżące karty bez pisania nowych funkcji (zobacz tę odpowiedź na temat przepełnienia stosu ):
:tabe
Przed otwarciem możesz chcieć otworzyć nową pustą kartę ( ), ponieważ pierwszy plik otworzy się na bieżącej karcie. Dodatkowa pusta karta pozostanie otwarta (zobacz,:help argdo
aby zrozumieć, dlaczego).źródło
:tabnew | args file1 file2 | argdo tabe | tabdo syntax on
Musisz nacisnąć Enter, aby wyczyścić monit i wpisać,:close
aby usunąć ostatnie ( pusta) karta ... to strasznie dużo pisania i warto, jeśli otwierasz dużo kart (dla 2 lub 3 plików, użycie tylko:tabe
dwa razy byłoby szybsze).