Coś, co często robię, polega na uruchomieniu polecenia find, a następnie edycji ich wszystkich w vi, co wygląda mniej więcej tak:
> find . "*.txt"
./file1.txt
./file2.txt
./path/to/file3.txt
> vi ./file1.txt ./file2.txt ./path/to/file3.txt
Czy istnieje sprytny i prosty sposób na zrobienie tego wszystkiego w jednym wierszu poleceń?
xargs
zniszczyły mój terminal. Właściwym rozwiązaniem jest poniższe rozwiązanie @DevSolarOdpowiedzi:
To powinno załatwić sprawę:
Użyj Vima, lepiej dla twojego zdrowia. :-)
Często pomijana
+
opcja-exec
powoduje, że wszystkie nazwy plików (do limitów długości linii) pojawiają się w jednym wierszu, tzn. Nadal wszystkie pliki są otwierane w jednejvim
sesji (nawigacja:n
za pomocą następnego i:N
poprzedniego pliku).Otrzymasz
vim -p
zakładkę pliku dla każdego pliku. Sprawdź:help tab-page-commands
więcej szczegółów.Dzięki
vim -o
temu otrzymasz okna podzielone w poziomie dla każdego pliku,vim -O
okna podzielone w pionie. Sprawdź:help window-move-cursor
więcej szczegółów.Pamiętaj, że poprzednia wersja tej odpowiedzi
vim $(find . -name "*.txt")
nie działa ze spacjami w nazwach plików i ma wpływ na bezpieczeństwo.Pipingowanie
xargs vi
dajeWarning: Input is not from a terminal
potem plus terminal z całkowicie fałszywym zachowaniem. Użytkownik grawitacji wyjaśnił dlaczego w komentarzu poniżej i nieco więcej wyjaśnień w tym pytaniu .źródło
/dev/tty
i wywołać ioctl (); jest to po prostu zbyt leniwe, aby to zrobić.) Gdy jest wywoływany przez xargs, vim otrzymuje/dev/null
jako standardowe wejście, co po prostu ignoruje ioctls sterujące terminalem.vim -p
jeśli chcesz zakładki plików. (gt
igT
nawigować lub klikać myszą).vim
, po prostu podaj-
jako pierwszy argument, jak wecho foobar | vim -
.find . -name "*.txt" | vim -
daje ci sesję vima na nienazwanym pliku zawierającym nazwy znalezionych plików, co nie jest tym, o co poprosił OP ...Lub uruchom vima i stamtąd:
źródło
Dodatkowo, jeśli chcesz, aby były otwierane pojedynczo, możesz także użyć find -exec lub prostej pętli for. Edytowane według komentarza Cevinga.
lub
źródło
-name
brakuje. Po drugie: polecenie kończy się niepowodzeniem, gdy tylko nazwa pliku zawiera spację. -1 za niewłaściwą odpowiedź.Jeśli już wpisałeś
find
polecenie, uważam, żexargs
otwarcie wyników wyszukiwania może być znacznie łatwiejsze :Ta
-p
opcja każe vimowi otworzyć każdy plik w nowej karcie. Uważam, że jest to wygodniejsze niż używanie buforów, ale jeśli tego nie zrobisz, po prostu zrezygnuj z tej opcji.źródło
Aby edytować wszystko
*.txt
, wystarczy uruchomić:vim *.txt
. Aby edytować pliki zwrócone przezfind
, czytaj dalej.W systemach Unix / macOS można używać
find
z BSDxargs
(patrz :)man xargs
, npPowiązane: Terminal przestał działać po wywołaniu Vima za pomocą xargs na Vim.SE.
źródło