Копирование и вставка с экрана терминала никогда не будет полностью надежным, потому что оно имеет дело с выводом на экран, а не с исходным исходным материалом. Если некоторые приложения выводят текст на терминал необычным образом, и это приводит к тому, что терминал не может угадать исходный текст, вероятно, вы или терминал мало что можете с этим поделать.
Много информации об исходном тексте потенциально теряется, когда он отображается на терминале: например, была ли область белого пространства создана табуляцией или серией пробелов, или были ли две строки текста изначально одна длинная строка, которая была перенесена, или две отдельные строки.
Терминал пытается сделать все возможное, чтобы позволить вам скопировать и вставить исходный текст, который был передан терминалу, но он не всегда может знать.
В качестве эксперимента попробуйте следующее:
less
, чтобы просмотреть файл, содержащий очень длинные строки, которые переносятся на несколько терминальных строк. less
выбрал всю логическую строку, которая охватывает несколько физических строк, и если вы вставите ее в другое место, она будет сохранена как одна длинная строка. less
перекрашивает физическую линию экрана физической линией, и терминал больше не имеет никакого способа узнать, что физические линии были соединены вместе. YMMV в этом эксперименте, потому что ваш терминал (или версия less
) может быть более или менее умен, чем мой.
Как правило, чем тупее программа, создавшая результат, тем выше ваши шансы скопировать и вставить в точности исходный материал. cat
, например, настолько тупой, насколько это возможно. (Вы, конечно, понимаете, что «тупой» - это комплимент!)
Если вы получаете дополнительный пробел в конце строки под tmux
, вероятно, это потому, что tmux
фактически повторяет этот персонаж. Помните, что tmux
выполняет собственную эмуляцию терминала, а затем повторно генерирует новые терминальные последовательности для рендеринга на нижележащий терминал. Возможно, он повторяет этот пробел, потому что считает, что в некоторых случаях может возникнуть необходимость перезаписать какой-либо другой символ, который, по его мнению, может там присутствовать. Какой бы ни была причина, терминал, вероятно, не имеет возможности узнать, что символ пробела на самом деле не является частью исходного содержимого.