Jak mogę otworzyć kilka plików jednocześnie w Vimie?


87

Czy jest sposób, aby otworzyć wszystkie pliki w katalogu z poziomu Vima? Więc to :commandw efekcie powiedziałoby: „Otwórz wszystkie pliki /some/pathdo buforów”.

Idealnie byłoby wspaniale otwierać rekursywnie wszystkie pliki w katalogu.

Odpowiedzi:


105

Polecenie, którego szukasz, to args:

Na przykład:

:args /path_to_dir/*

otworzy wszystkie pliki w katalogu


32
Służy **do rekurencyjnego dopasowywania plików. Np.:args /path_to_dir/**
daf

1
Aby otworzyć pliki bez rozszerzenia, określ katalog nadrzędny, np. Args ** /. Hg / hgrc działa, ale ** / hgrc nie.
79E09796

11
Po otwarciu plików użyj, :tab allaby umieścić je w poszczególnych zakładkach.
Backlin

„Wszystkie pliki” będą zawierały podkatalogi, które mogą być niepożądane. (Moje błędy vima "/path_to_dir/subdir/" Illegal file name). Szybkim rozwiązaniem jest argd */ponowne uruchomienie drugiego polecenia, aby usunąć te z listy
lessthanideal

Byłoby naprawdę miło uzupełnić odpowiedź następującą sugestią: Jako dobrą praktykę i aby pokazać, jak zastosować ten sam zestaw poleceń do wszystkich plików, które zostały otwarte, możesz wykonać następujące polecenie, aby zastosować wszystkie polecenia zawarte w pliku my_commands_batch.vim:argdo source my_commands_batch.vim
aturegano

21

Dlaczego to nie działa, jeśli chcę otworzyć wszystkie pliki kończące się określonym rozszerzeniem? próbowałem

:n ./**.cs

i otwiera tylko pliki z bieżącego katalogu.

Znalazłem odpowiedź, prawidłowy kod to :n **/*.cs

Po więcej informacji :h find


9

Próbowałeś

:n /some/path/*

Otworzy wszystkie pliki w / some / path

Nie sądzę jednak, aby otworzył plik rekurencyjnie.

EDYTOWAĆ

Może użycie ** otworzy się rekurencyjnie, jak wspomniano w Daf


Co oznacza: n? Zaglądanie do pomocy vima tylko wskazuje mi na „powtórzenie ostatniego wzorca” .. co rozumiem, to naciśnięcie klawisza. Czy istnieje sposób, aby uzyskać pomoc dotyczącą tylko trybu poleceń?
U0001

1
Za łatwe: h: n .. uzyskaj pomoc dotyczącą „: n”. Nie lubię odpowiadać na własne pytania;)
U0001

4

Metodą, która nie wymaga bałaganu, argsjest umieszczenie listy plików w pliku tekstowym, a następnie użycie :sopolecenia do uruchomienia poleceń w tym pliku.

Na przykład, jeśli chcesz otworzyć wszystkie pliki, które kończą się w .phpdanym katalogu, najpierw utwórz files.txtlistę plików, poprzedzoną dowolnym poleceniem, którego chcesz użyć do ich otwarcia.

sp alpha.php
sp bravo.php
sp charlie.php

Następnie w ramach VIM:

:so files.txt

Jeśli lista plików jest duża, stosunkowo proste jest files.txtszybkie wygenerowanie pliku przez przekierowanie wyjścia programu lsdo pliku, a następnie użycie makra vim do wstawiania spprzed każdą nazwą pliku.

To oczywiście nie jest tak eleganckie, jak używanie poleceń argsi argdo, ale te polecenia są również znacznie bardziej skomplikowane.

Może istnieć sposób na zrobienie tego za pomocą jednego polecenia w wierszu poleceń, ale nawet po 16 latach nadal uważam programowanie Vima za dziwne i tajemnicze.


Ciekawy ! Brzmi jak dobry sposób na zachowanie kontroli nad tym, które pliki należy otworzyć, zamiast ślepego otwierania wszystkich plików w danym katalogu, jeśli nie wszystkie te pliki są wymagane.
cram2208

1

Inny sposób na rekurencyjne otwieranie plików

find . -type f -exec vi {} \;

4
Nie spełnia ograniczenia „od wewnątrz Vima”.
ZyX

a jednak robi to, co trzeba :)
rogue-one

3
To nie. Potrzebne są pliki z podanego katalogu rekurencyjnie z poziomu vima . Jeśli kate **/*(^/)odrzucasz warunki, możesz równie dobrze powiedzieć, że (używając składni zsh globbing) robi to, co jest potrzebne: rekurencyjnie otwiera pliki z podanego katalogu. Nie jest „od wewnątrz” iw ogóle nie używa vima, ale „robi to, co jest potrzebne”. Albo nawet kate ~/.vimrc ~/.bashrc. Pomijając „od początku”, „z danego katalogu” i „rekurencyjnie” w ogóle, ale „robi to, co trzeba”: otwiera pliki.
ZyX

Spowoduje to otwarcie plików pojedynczo
Paul,

1

Jeśli chcesz dodać do listy argumentów;

:arga what_you-d_like_to_add

widzieć

:he arga

z / w vimie, aby uzyskać więcej informacji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.