2011-11-30 15 views
5

I często znajduję się robi workflow tak:szybki sposób edytować n-ty wiersz wyjścia poprzedniego polecenia

$ find . |grep somefile 
./tmp/somefile.xml 
./test/another-somefile.txt 

(wyjściowa ocena)

$ vim ./tmp/somefile.xml 

Teraz, to byłoby miłe, jeśli istnieje był wygodny sposób użycia wyniku polecenia find i podania go do vima.

Najlepszym Mam wymyślić to:

$ nth() { sed -n $1p; } 
$ find . |grep somefile 
./tmp/somefile.xml 
./test/another-somefile.txt 

(wyjściowa ocena)

$ vim `!!|nth 2` 

Zastanawiałem się, czy istnieją inne, być może ładniejszy, sposoby realizacji tego samego?

Aby wyjaśnić, chcę wygodnie pobrać n-tą linię z poprzednio uruchomionego polecenia, aby szybko otworzyć ten plik do edycji w vimie, bez konieczności przycinania pliku za pomocą myszy lub tabulatora - dokończ moją drogę ścieżka pliku.

Odpowiedz

4

sposób 1: nie przekazuj dokładnego pliku do vima, ale do całego wyjścia. wybrać plik w vim

aktualnie pracujesz w dwóch etapach:

1 - uruchom find/grep ... cmd

2 - vim !! ....

jeśli jesteś pewien, że chcesz użyć vima, aby otworzyć jeden (lub więcej) plik (i) z wyniku znalezienia. można spróbować:

find. (with grep if you like) |vim - 

wtedy masz całe wyjście w vim, teraz można użyć vim magii, aby przenieść kursor do pliku, który chcesz edytować, a następnie naciśnij gf. (Robię to czasami)

sposób 2: sprecyzuj swoje wyrażenie regularne w znalezisku (lub grep), aby uzyskać pojedynczy plik, który chcesz edytować.

to wcale nie jest trudne. wtedy możesz po prostu vim !!.

Twoja nth() jest niezła. jednak wyobraź sobie, że jest 30 linii wyjściowych, a twój plik znajduje się w linii 16. jak to się liczy? na koniec możesz dodać |nl, wtedy nie możesz bezpośrednio użyć !! dłużej ..

tylko moje 2 centy

+0

Myślę, że wybranie polecenia' vim -', a następnie użycie 'gf' jest rozwiązaniem, z którym najbardziej bym się czuł. Jednak mój vim wymaga ode mnie zapisania bufora listy plików przed zezwoleniem na wykonanie 'gf'. Czy istnieje sposób na sprawienie, aby vim traktował bufory ze stdin jako tymczasowe/ukryte bufory? – Erik

+0

Dodanie 'set hidden' do ~/.vimrc wydaje się zdziałać. Dziękuję wszystkim! – Erik

+0

@Erik Edytowałem twoje pytanie, aby dodać nowy tag "vim". mam nadzieję, że nie masz nic przeciwko. – Kent

1

Zmodyfikowano po komentarzu. Nie wiem, czy jest to "wygodne", ale ..

command | tail -n3 | head -n1 | xargs vim 
+0

Nie, chcę dogodnym sposobem, aby pobrać n-ty wiersz z wyjściem poprzedniego polecenia i karmić go jako argument do vim. – Erik

+0

Oh w porządku. Dodałem xargs, aby dodać dane wyjściowe do vima, a następnie – Miquel

0

Może tego właśnie szukasz?

find . -name "*somefile*" -exec vim -p {} \; 
0

Jeśli chcesz interaktywną opinię może można użyć czegoś takiego:

TMP_LIST=""; for i in `find . | grep somefile`; do echo $i; read -p "(y/n)?"; [ $REPLY == "y" ] && TMP_LIST="$TMP_LIST $i"; done; vim $TMP_LIST 
+0

To całkiem miłe, ale nie tego, czego szukam. Chodzi o to, że mój przepływ pracy to 1) znajdź/ls/..., 2) zobacz plik, który chcę edytować, 3) szybko otwórz ten plik w vimie bez przycinania myszy i wklejania nazwy pliku lub wypełniania tabulatora ścieżką – Erik

0

Prawie to zrobił !!

pearl.251> cat file1 
a b c d e f pearl.252> find . -name "file*" 
./file1 
./file2 
./file3 
./file4 
./file5 
./file6 
./file7 
pearl.253> vi `!!|awk 'NR==1'` 

ostatnia linia overe tutaj otworzy plik1 w vi.

+0

Aby wyjaśnić, moje rozwiązanie działa, ale zastanawiałem się, czy można uzyskać nawet ładniejszą rzecz niż '!! nth 2'. "Kluczem jest suka do pisania na szwedzkiej klawiaturze;) – Erik

Powiązane problemy