Wcięcia w Vimie ze wszystkimi plikami w folderze

Mam folder zawierający setki plików TTL (TeraTermLanguage). Teraz chciałem wciąć wszystkie te pliki.

Stworzyłem teraterm.vim do wcięcia i otwieram plik używając Vima i robię "gg=G" i cały plik zostanie poprawnie wcięty.

Ale czy jest jakiś sposób, gdzie mogę wciąć wszystkie pliki w folderze.

Chciałem zrobić z Pomocą Shell. Ale w Vimie nie mogłem przekazać polecenia File indent jako argumentu Vimowi.

Proszę zasugerować, który jest najlepszy sposób I może wykonywać wcięcia do wszystkich plików w Vimie.

Author: hari, 2010-07-10

4 answers

Znacznie prostszym od skryptowania Vima z linii poleceń bash jest użycie vimscript z wnętrza Vima (lub być może znacznie prostszego linera do skryptowania Vima z linii poleceń). Osobiście wolę używać listy arg do wszystkich manipulacji wieloma plikami. Na przykład:

:args ~/src/myproject/**/*.ttl | argdo execute "normal gg=G" | update
  • args ustawia arglist, używając symboli wieloznacznych (** będzie pasował do bieżącego katalogu oraz podkatalogów)
  • | pozwala nam uruchamiać wiele poleceń w jednej linii
  • argdo uruchamia wykonywanie poleceń na każdym arg (pochłonie drugi |)
  • execute zapobiega połykaniu następnej rury.
  • normal uruchamia następujące komendy trybu normalnego (z czym pracowałeś w pierwszej kolejności)
  • {[9] } jest podobny do :w, ale zapisuje tylko wtedy, gdy bufor zostanie zmodyfikowany.

Ten wzorzec :args ... | argdo ... | update jest bardzo przydatny dla każdego rodzaju manipulacji plikami w całym projekcie (np. wyszukiwanie i zastępowanie przez %s/foo/bar/ge lub ustawianie uniform fileformat lub fileencoding).

(inni wolą podobny wzorzec używając listy buforów i :bufdo, ale z listą arg nie muszę się martwić o zamykanie bieżących buforów lub otwieranie nowej sesji Vima.)

 58
Author: nicholas a. evans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-15 19:15:09

Otworzyć terminal. "Type": "content"]}

$ vim -w indentme.scr foo.c

Następnie wpisz to dokładnie (w trybie komend):

gg=G:wq

Spowoduje zamknięcie Vima, zapisując proces wcięcia wszystkich linii w pliku do skryptu Vima o nazwie indentme.scr.

Uwaga: indentme.scr będzie zawierać zapis wszystkich wpisanych poleceń kluczowych, więc po zakończeniu wcięcia pliku, nie spędzaj dużo czasu za pomocą klawiszy strzałek, aby rozejrzeć się po Pliku, ponieważ doprowadzi to do znacznie większego skryptu i poważnie spowolni operacje wsadowe.

Teraz, Aby wciąć wszystkie linie w pliku, po prostu wpisz następujące polecenie:

$ vim -s indentme.scr unindented-file.c

Vim będzie migać open-shut (jeśli jesteś na szybkim komputerze i nie edytujesz dużego pliku), wciąć wszystkie linie, a następnie zapisać plik na miejscu.

Niestety, będzie to działać tylko na jednym pliku na raz, ale możesz łatwo skalować funkcjonalność za pomocą sh'S for loop:

for filename in *.ttl ; do
    vim -s indentme.scr "$filename"
done

Notatka: spowoduje zapisanie dowolnego pliku. Chyba że {[8] } jest w Twój ~/.vimrc, nie oczekuj, że kopia zapasowa zostanie zapisana.

 11
Author: amphetamachine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-11 18:46:14

Odstawiłem roztwór amfetamachiny. Jednak musiałem rekurencyjnie przeszukiwać wiele katalogów. Oto rozwiązanie, którego użyłem:

$ find . -type f -name '*.ttl' -exec vim -s indentme.scr "{}" \;
 2
Author: DoryuX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-27 15:43:38

Biorąc pod uwagę powyższe odpowiedzi, chciałbym to zakończyć. Zacznę od zera, aby początkujący mogli zrozumieć.

Krok-1 Zainstaluj astyle (narzędzie używane do formatowania) za pomocą następującego polecenia Otworzyć terminal. "Type": "content"]}

sudo apt-get install astyle

Krok 2 upewnij się, że masz zainstalowanego Vima w systemie.Uruchom poniższe polecenia z katalogu, w którym znajdują się Twoje pliki kodu.Poniższe polecenie utworzy skrypt, który zamierzamy uruchomić rekurencyjnie, aby upiększyć każdy plik w naszym katalogu.(jak wspomniano w powyższej odpowiedzi)

vim -w indentme.scr foo.c

Krok-3 następnie wpisz to dokładnie (w trybie komend) i naciśnij enter

:%!astyle 

Krok-4 następnie wpisz to dokładnie (w trybie komend) i naciśnij enter

:wq

Krok-5 Ostatni uruchom to rekurencyjnie za pomocą następującego polecenia:

find . -type f -name '*.cpp' -exec vim -s indentme.scr "{}" \;

Wszystkie Twoje pliki cpp zostaną poprawnie sformatowane.

 0
Author: Devvrat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 13:09:06