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?
źródło
Odpowiedzi:
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#
Inne terminale z pewnością mają bardziej zaawansowane możliwości.
źródło
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/
źródło
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.
źródło
eshell
.Jak wspomniano tutaj, Emacs
eshell
moż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,eshell
możesz uzyskać dostęp do następujących funkcji Emacsa :źródło
Używam urxvt (rxvt-unicode) i istnieje pakiet o nazwie urxvt-keyboard-select, który może być dokładnie tym, czego chcesz, jeśli możesz zainstalować urxvt. Informacje o pakiecie Archlinux (zawierające wskaźniki) znajdują się tutaj:
https://aur.archlinux.org/packages.php?ID=39950
Oryginalne źródło: http://www.github.com/muennich/urxvt-perls
źródło
Spróbuj użyć vima jako swojego CLI? Po prostu wybierz wyjście z kilku linii w górę i przeprowadź przez:!.
źródło