копировать и вставлять вкладки между окнами терминала в X11

11

Когда я копирую и вставляю текст, используя выбор мыши X11 между двумя окнами терминала, вкладки часто, но не всегда, преобразуются в пробелы. По-видимому, это зависит от задействованных терминальных приложений и программ, работающих внутри них.

Вот что я узнал экспериментально:

  • Это зависит исключительно от того, что работает на стороне источника (копии). Сторона назначения (вставка) будет вставлять вкладки независимо от того, что запущено, если источник сохранил их.
  • Только gnome-terminalна стороне источника сохраняет вкладки. xtermи konsoleне надо.
  • Вкладки сохраняются, только если файл был выведен с использованием cat. Другие приложения , такие как less, vim, emacsили nanoне сохраняющие вкладок.

Чем это объясняется? Являются ли эти ошибки в konsoleи xterm, или они могут быть настроены по- разному? Можно lessи так настроить сохранение вкладок в выводе?

Питер Айзентраут
источник

Ответы:

3

Да, ваши наблюдения верны. Когда вы копируете-вставляете, происходит то, что цель получает данные из источника. При отображении ваших вкладок xtermkonsole), по-видимому, сами переводят их в пробелы (если приложение, запущенное внутри терминала, этого еще не сделало). Таким образом, когда приходит запрос на выделенный текст, все, что они могут предложить, это пробелы.

Я даже смутно помню ответ от xterm-сопровождающего, который утверждал, что это будет очень трудно исправить ...

Я не уверен, как gnome-terminal это правильно, но я рад, что они делают :) Другой альтернативой является использование gvim(графическая версия vim) - вместо запуска vimв терминальном приложении - вы можете безопасно скопировать и вставить из gvim , не теряя вкладок.

Михаил Т.
источник
0

Иногда это может быть проблемой, особенно с Makefilesкоторой требуют вкладки. К сожалению, проблемы с разными программами не связаны. У каждого, вероятно, будет очень свое решение.

Для vim вы должны преформовать :set noexpandtabили поместить set noexpandtabв ваш ~/.vimrcфайл. Если вы хотите, чтобы были noexpandtabустановлены только определенные типы файлов, то вы можете выполнить автокоманду в вашем ~/.vimrcI, у меня есть следующее:

"indenting defaults: 4 spaces for an indent
set shiftwidth=4
set softtabstop=4
set expandtab

"exceptions to indenting for specific languages and files--------
"for shell scripts: 2 spaces for an indent
autocmd filetype sh setlocal shiftwidth=2
autocmd filetype sh setlocal softtabstop=2

"for Makefiles: use tabs for indents
autocmd filetype make setlocal tabstop=8
autocmd filetype make setlocal noexpandtab

Это установит по умолчанию 4 пробела для вкладки vimи сделает исключения для сценариев оболочки и Makefiles.

Для других программ, таких как less, попробуйте посмотреть там man-страницы. Они могут иметь файлы конфигурации, переменные среды или параметры командной строки для того, что вам нужно. Глядя на менее справочную страницу:

-xn,... or --tabs=n,...
       Sets tab stops.  If only one n is specified, tab stops  are  set
       at  multiples  of n.  If multiple values separated by commas are
       specified, tab stops are set at those positions, and  then  con-
       tinue  with  the  same  spacing  as  the last two.  For example,
       -x9,17 will set tabs at positions  9,  17,  25,  33,  etc.   The
       default for n is 8.

То, что вы замечаете, не является ошибкой. «Это особенность». Единственная проблема заключается в том, что вам нужно знать, как его отключить.

Судо Баш
источник
2
less -xnнастраивает его для использования n пробелов, а не символа табуляции. -Uделает отображение вкладки как ^I. Я не нашел способа заставить его испускать буквальный символ табуляции, чтобы при копировании текста вставлялся символ табуляции, но я бы хотел узнать, как это сделать.
Мэтт МакКлюр
Стоит отметить, что в Roff ( troff& nroff) вкладки могут быть установлены независимо друг от друга, так же, как панели инструментов «линейка» в современных текстовых процессорах (OpenOffice, Microsoft Word и др.). Однако на практике страницы управления редко используют пользовательские табуляции.
mandoc(1)также позволяет пользователям переопределять ширину отступа по умолчанию из командной строки, используя -O indent=N(по умолчанию 5 столбцов).