locate ... | less
выводит длинный путь, который отображается как несколько строк в терминале, хотя на самом деле это одна строка.
Я копирую путь из терминала, выделяя текст мышью и нажимая Ctrl+ Shift+ C. Когда я вставляю его в текстовый файл, я получаю нежелательную строку изменения в тексте, точно так же, как это отображается в терминале.
Но я помню, что иногда я могу скопировать длинный путь locate ... | less
, не вводя нежелательного изменения строки, а иногда я не могу. Я не понимаю, делаю ли я что-то по-другому.
Поэтому мне интересно, как убедиться, что проблема не произойдет? Благодарность!
Моя ОС: Ubuntu 12.04.
Мой терминал: Терминал Gnome 3.4.1.1
Ответы:
Вместо того, чтобы копировать то, что отображается на терминале (только то, что умещается на экране), скопируйте фактический текст. Используйте одну из внешних утилит xsel или xclip (они имеют в основном те же функции, я буду использовать xsel в этом ответе) для копирования данных в буфер обмена X или в него. Чтобы скопировать в буфер обмена, передайте желаемый контент на стандартный ввод. При вставке из буфера обмена содержимое записывается на стандартный вывод.
Меньше используйте
|
команду для передачи группы строк через команду. Выделите первую строку, по которой вы хотите действовать, введите,mm
чтобы установить метку, выделите последнюю строку, введите|mxsel -b
и нажмите Enter. Предопределены две метки:^
для начала файла,$
для конца файла. Таким образом, чтобы скопировать весь файл, используйте<|$xsel -b
. Чтобы скопировать одну строку, используйтеmm|mxsel -b
и Enter.Удалите
-b
опцию, чтобы скопировать в основной выбор вместо буфера обмена.источник
Реальное поведение этого заключается в следующем:
Если вы находитесь в
less
этом файле и у вас есть файл с очень длинной строкой, то, если вы прокрутите длинную строку вниз и вернетесь назад вверх, у вас будет несколько строк при копировании всего текста. После этого, когда вы прокрутите разделенные линии вниз по нижней части терминала и снова прокрутите строки вверх, разрывы строк будут снова удалены.Для визуализации:
источник
Вы можете скопировать строки вывода без дополнительных новых строк (разрывы строк), если текст выводился непосредственно на терминал.
Терминал может отслеживать, где заканчиваются реальные линии.
Но если строки были выведены
less
или подобнойpager
программой, терминал не знает, где находятся новые строки. Пейджер использует терминал как полный экран символов и говорит терминалу «поместить эти символы туда» и выполнять такие операции, как прокрутка. Но для терминала нет возможности увидеть, где предназначены новые строки.источник
locate <something> | less
в двух разных случаях.echo $LESS
, может быть, есть интересные варианты за меньшие деньги.)-S
режимами, так что, может быть, это тоже ухудшает ситуацию.В
less
, если вы выберите завернуты несколько строк текста , а затем скопировать его, он будет спуститься в одну линию.Если вы нажмете и PgUpскопируете один и тот же текст, он будет записан в несколько строк.
PgDnв порядке, стрелки в порядке. Но PgUpвызывает разделение текста.
источник
Если цель состоит в том, чтобы скопировать и вставить, я использую
cat
вместоless
или,more
а затем терминал захватывает его так, как оно есть на самом деле, а не так, как оно отображается.источник