Używanie tekstu z wyników poprzednich poleceń

16

EDYCJA Kwiecień 2015: Jeśli masz to samo pytanie, polecam również sprawdzenie http://xiki.org/


Wiem, że nie tak działają terminale, ale często żałuję, że nie ma łatwego sposobu na użycie tekstu (kopiowanie, modyfikowanie itp.), Który jest już w historii mojego okna terminala z poprzednich wyników komend.

Wyobraziłem sobie to tak:

Jestem przy mojej powłoce bashowej, aby wprowadzić polecenie i zdaję sobie sprawę, że muszę wpisać coś, co jest już na ekranie, kilka linii powyżej. Mogę sięgnąć po mysz i ją wybrać, ale nienawidzę tego. W tej chwili naprawdę chciałbym, aby cały mój terminal stał się gigantycznym buforem Vima, a wszystko to: podpowiedzi, polecenia, które wpisałem i wyniki tych poleceń. Wszystko. A potem mógłbym przeskoczyć kilka wierszy w górę, może trochę edytować i szarpać trochę tekstu. Następnie wróć do trybu powłoki bash i wklej wszystko, co szarpnąłem do bieżącego wiersza poleceń.

Wiem, że istnieją pewne opcje:

  • Oczywiście, przenieś tekst, którego potrzebuję, bezpośrednio z danych wyjściowych niektórych poleceń do pliku lub bezpośrednio do następnego polecenia. Ale w tym celu musisz wcześniej zaplanować lub ponownie wykonać polecenie z historii (zakładając, że dane wyjściowe nie zmienią się między wywołaniami).

  • Aby sięgnąć po mysz i wybierz tekst do skopiowania. Kulawy, irytujący, chciałbym tego nie robić (to nie jest strona wymiany stosów GUI, prawda? =)

  • Aby użyć opcji „Eksportuj tekst jako ...” w mojej aplikacji (Mac OS X) Terminal i zapisz tekst terminalu w pliku. Następnie otwórz plik i pracuj z nim. Prawie, ale po co przechodzić przez etap zapisywania do pliku na dysku?

Pytanie brzmi: co robisz w tej sytuacji? Czy jest jakaś sztuczka, narzędzie lub funkcja powłoki, które mogą być przydatne w tym scenariuszu? Czy po prostu rezygnujesz z używania myszy lub ponownie wpisujesz wszystko, co chcesz wpisać?

Być może problem polega na tym, że nie robię rzeczy „w sposób uniksowy”, ale no cóż, to jest rok 2010 i nie mogę łatwo skopiować tekstu z kilku linii od mojego kursora?

Sergio Acosta
źródło
1
Zobacz także Jak ponownie wykorzystać ostatnie wyjście z wiersza poleceń? .
Gilles: „Przestańcie być źli”
stackoverflow.com/questions/5955577/…
Ciro Santilli 15 改造 中心 法轮功 六四 事件

Odpowiedzi:

4

Możesz użyć skryptu (użyj -f, aby upewnić się, że za każdym razem opróżnia się) i możesz mieć wszystkie dane wyjściowe w pliku.

Użyj terminalowego multipleksera (screen, tmux itp.). Na przykład dla ekranu http://web.mit.edu/gnu/doc/html/screen_11.html#

Polecenie: kopiuj Wejdź w tryb kopiowania / przewijania. Pozwala to skopiować tekst z bieżącego okna i jego historii do bufora wklejania. W tym trybie aktywny jest edytor pełnoekranowy podobny do vi, z elementami sterującymi opisanymi poniżej.

Inne terminale z pewnością mają bardziej zaawansowane możliwości.

nc3b
źródło
Dobrze. Właśnie dowiedziałem się, że „Multiplekser terminali” jest prawdopodobnie tym, czego potrzebuję. Dzięki. Dziękujemy również za wskazówkę dotyczącą polecenia „skrypt”.
Sergio Acosta,
5

W tmux (terminal multiplekserze) możesz nacisnąć Ctrl + A- [, aby przejść do trybu bufora Vi, w którym możesz poruszać się po ekranie, przewijać bufor tam iz powrotem, kopiować tekst itp. Domyślnym skrótem jest Ctrl + B- [ale to oczywiście miało zostać zrekonfigurowane. Domyślnym trybem bufora jest Emacs, ale można go skonfigurować tak, aby był Vi.

Sprawdź tmux, to naprawdę świetny nowoczesny multiplekser terminali. Oprócz pracy z buforem możesz podzielić ekran na wiele okien, połączyć się z tą samą sesją z wielu terminali itp. Dla maksymalnej wygody możesz nawet ustawić ją jako powłokę logowania, jeśli powiesz jej, jaka jest twoja rzeczywista powłoka.

Na OpenBSD tmux został nawet włączony do systemu podstawowego.

Więcej informacji na stronie man dla tmux. Zobacz także zrzuty ekranu na http://tmux.sourceforge.net/

zvolkov
źródło
tmux jest najfajniejszy!
Gabe.
4

W emacsie powłoka Mx obsługuje edycję poprzednich wyników. Możesz łatwo skopiować wyniki poprzednich poleceń wklej lub dowolną część bufora, jak zwykły bufor. Jestem prawie pewien, że powinien istnieć odpowiednik vim.

Elmarco
źródło
1
To bardzo blisko tego, czego chcę, ale muszę już być w Emacsie lub Vimie. +1
Sergio Acosta
Tak, może to być domyślny termin + powłoka. :) Wtedy użyjesz tam co najmniej zwykłych klawiszy nawigacyjnych po tekście. Jeśli nauczyłeś się więcej klawiszy specjalnych, możesz uzyskać dostęp do następujących funkcji Emacsaeshell .
imz - Ivan Zakharyaschev
1

Jak wspomniano tutaj, Emacs eshellmoże być twoim domyślnym terminem + shell. :) Wtedy użyjesz tam co najmniej zwykłych klawiszy nawigacyjnych po tekście. Jeśli nauczyłeś się więcej klawiszy specjalnych, eshellmożesz uzyskać dostęp do następujących funkcji Emacsa :

imz - Ivan Zakharyaschev
źródło
1

Spróbuj użyć vima jako swojego CLI? Po prostu wybierz wyjście z kilku linii w górę i przeprowadź przez:!.

Stephen M. Webb
źródło
Przepraszam, nie podążam za tobą. Czy możesz opracować, proszę?
roaima