11

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

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

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

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

2 ответа2

3

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

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

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

0

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

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

"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.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .