Prawie codziennie robię następujące rzeczy
- Uruchom wyszukiwanie (
find -name somefile.txt
) - Otwórz wynik w
vim
Problem polega na tym, że muszę skopiować i wkleić wynik polecenia find
do vim
polecenia. Czy jest jakiś sposób na uniknięcie tego? Trochę eksperymentowałem ( find -name somefile.txt | vim
), ale nie znalazłem niczego, co działa.
Z góry dziękuję
vim `find -name somefile.txt`
. @StuartPowers Ewentualnie możesz użyć,vim `!-1`
jeśli już używałeś tego znaleziska, gdybyś był poprzednim poleceniemSpróbuj tego:
:r!find /<path> -name 'expression'
Wyniki powinny pojawić się w vimie po zakończeniu wyszukiwania.
Lub
Próbować:
źródło
Jeśli nie masz nic przeciwko ponownemu uruchomieniu polecenia: naciśnij Upi dodaj
xargs
polecenie. Lub użyj podstawienia historii i uruchomIstnieje lekki sposób zapisywania danych wyjściowych polecenia, które działa w ksh i zsh, ale nie w bash (wymaga strony wyjściowej potoku do wykonania w powłoce nadrzędnej). Rura komenda do funkcji
K
(zsh definicja poniżej), które k eeps swoje wyjście w zmiennej$K
.Automatyczne zapisywanie danych wyjściowych każdego polecenia nie jest tak naprawdę możliwe w przypadku samej powłoki, należy uruchomić polecenie w emulowanym terminalu. Możesz to zrobić, uruchamiając się w środku
script
(narzędzie BSD, ale dostępne na większości unikatów, w tym Linux i Solaris), który zapisuje wszystkie dane wyjściowe sesji za pomocą pliku (wciąż jest trochę wysiłku, aby niezawodnie wykryć ostatni monit w maszynie ).źródło
Lubię używać tylnych tyknięć `(Jest na tym samym klawiszu co ~)
Tylne tiki wykonują polecenie wewnątrz tików, a następnie wyjście może zostać użyte przez komendę. Powyższe znajdzie wszystkie pliki somefile.txt, umożliwiając w ten sposób
:next
przechodzenie między wszystkimi plikami.Jest to bardzo przydatne, jeśli spędzisz kilka prób dopracowania polecenia, ponieważ możesz następnie użyć podstawienia historii, aby powtórzyć polecenie edytora.
źródło
Musiałem pominąć tę kwestię, ponieważ użyłbym:
(gdybym wiedział, że jest tylko jeden
:echo &path
) lub, gdybym chciał je wszystkie:Edycja: Whoa! Ok, więc nie trafiłem w sedno - chcesz listę wyszukiwania, a nie otwarte pliki? Spróbuj (ponownie, z poziomu Vima):
-- mój błąd :)
źródło
Jak wskazał @davidmh w komentarzach, możesz użyć
xargs
flagi,-o
jeśli chcesz użyć interaktywnej aplikacji.Jeśli nie użyjesz
-o
, prawdopodobnie zepsujesz stan terminala po opuszczeniu vima. Jeśli to zrobiłeś, powinieneś być w stanie zresetować terminal za pomocą następującego polecenia:źródło
Napisałem funkcję,
pvim
która robi to, co chcesz. Jeśli dopvim
niego podłączonych jest wiele linii , ignoruje wszystkie oprócz pierwszej, można go jednak rozszerzyć, aby otworzyć wiele plików w vimie.Użyj tego jak:
który załaduje pierwszy „foo.txt” do vima tak, jakbyś wpisał:
vim $(find . -name "foo.txt | head -n1")
źródło
Oto prostsze
xargs
rozwiązanie niż już wspomniane:Ta
-p
opcja mówivim
o otwarciu każdego pliku na osobnej karcie. Uważam to za wygodniejsze niż używanie buforów.źródło
Przekonałem się, że otwarcie pliku za pomocą programu
locate
in vim jest niezwykle wygodne i znacznie szybsze niżfind
.Następujące polecenie wyszukuje plik wywołany
app.py
w ścieżce zawierającej katalogMyPythonProject
.źródło