locate ... | less
wyprowadza długą ścieżkę, która jest pokazana jako kilka linii w terminalu, chociaż w rzeczywistości jest to jedna linia.
Kopiuję ścieżkę z terminala, zaznaczając tekst myszką i naciskając Ctrl+ Shift+ C. Kiedy wklejam go do pliku tekstowego, pojawia się niechciana linia zmian w tekście, dokładnie w taki sam sposób, jak pokazano w terminalu.
Ale czasami pamiętam, że mogę skopiować wyjście długiej ścieżki locate ... | less
bez wprowadzania niepożądanych zmian linii, a czasem nie mogę. Nie wiem, czy zrobię coś inaczej.
Zastanawiam się więc, jak się upewnić, że problem się nie wydarzy? Dzięki!
Mój system operacyjny: Ubuntu 12.04.
Mój terminal: Gnome Terminal 3.4.1.1
Odpowiedzi:
Zamiast kopiować to, co jest wyświetlane na terminalu (tylko to, co mieści się na ekranie, z), skopiuj tekst. Użyj jednego z zewnętrznych narzędzi xsel lub xclip (mają one w większości te same funkcje, użyję xsel w tej odpowiedzi), aby skopiować dane ze lub do schowka X. Aby skopiować do schowka, przekaż żądaną treść na standardowym wejściu. Podczas wklejania ze schowka zawartość jest zapisywana na standardowe wyjście.
W mniejszym stopniu użyj
|
polecenia, aby poprowadzić wiązkę linii przez polecenie. Przewiń do pierwszego wiersza, na którym chcesz działać, wpisz,mm
aby ustawić znak, przewiń do ostatniego wiersza, a następnie wpisz|mxsel -b
i naciśnij Enter. Predefiniowane są dwa znaczniki:^
na początku pliku,$
na końcu pliku. Aby skopiować cały plik, użyj<|$xsel -b
. Aby skopiować pojedynczy wiersz, użyjmm|mxsel -b
i Enter.Usuń
-b
opcję kopiowania do podstawowego wyboru zamiast schowka.źródło
Rzeczywiste zachowanie tego jest następujące:
jeśli jesteś w
less
środku i masz plik z bardzo długą linią, to jeśli przewiniesz długą linię w dół i przewiniesz w górę, masz wiele linii podczas kopiowania całego tekstu. Następnie, gdy przewiniesz podzielone linie w dolnej części terminala i przewiniesz linie ponownie, podział linii zostanie ponownie usunięty.Do wizualizacji:
źródło
Możesz skopiować linie wyjściowe bez dodatkowych znaków nowej linii ( podziałów linii), jeśli tekst był wyprowadzany bezpośrednio do terminala.
Terminal może śledzić, gdzie znajdują się rzeczywiste końce linii.
Ale jeśli linie zostały wyprowadzone przez
less
lub podobnypager
program, terminal nie wie, gdzie są nowe linie. Pager używa terminala jako pełnego ekranu znaków i mówi terminalowi „umieść tam te znaki” oraz operacje takie jak przewijanie. Ale w terminalu nie ma sposobu, aby zobaczyć, gdzie są przeznaczone nowe linie.źródło
locate <something> | less
w dwóch różnych przypadkach.echo $LESS
, może są ciekawe opcje za mniej.)-S
trybami, więc może to też pogorszy sytuację.W
less
przypadku zaznaczenia owiniętego wielu wierszy tekstu, a następnie skopiowania go, zostanie on zapisany jako jeden wiersz.Jeśli naciśniesz, PgUpa następnie skopiujesz ten sam tekst, pojawi się on jako wiele wierszy.
PgDnjest w porządku, strzały są w porządku. Ale PgUppowoduje podział tekstu.
źródło
Jeśli celem jest kopiowanie i wklejanie, używam
cat
zamiastless
lub,more
a następnie terminal przechwytuje go tak, jak jest w rzeczywistości, a nie jak jest wyświetlany.źródło