두 터미널 창 사이에서 X11 마우스 선택을 사용하여 텍스트를 복사하여 붙여 넣을 때 탭은 종종 공백으로 변환되지만 항상 그런 것은 아닙니다. 이것은 관련된 터미널 응용 프로그램과 그 내부에서 실행되는 프로그램에 의존하는 것으로 보입니다.
이것이 실험을 통해 얻은 것입니다.
- 소스 (복사) 쪽에서 실행중인 내용에만 의존합니다. 대상 (붙여 넣기) 쪽에서는 소스가 탭을 유지 한 경우 실행중인 항목에 상관없이 탭을 붙여 넣습니다.
gnome-terminal
소스 측 에서만 탭을 유지합니다.xterm
그리고konsole
하지 마십시오.- 탭은 파일을 사용하여 출력 된 경우에만 유지됩니다
cat
. 같은 다른 응용 프로그램less
,vim
,emacs
, 또는nano
탭을 보존하지 않습니다.
이에 대한 설명은 무엇입니까? 이 버그가 konsole
및에 있습니까 xterm
, 아니면 다르게 구성 할 수 있습니까? less
출력에서 탭을 유지하도록 구성 할 수 있습니까 ?
답변
네, 당신의 관찰은 정확합니다. 복사-붙여 넣기시 대상은 소스에서 데이터를 가져옵니다. 탭을 표시 할 때 xterm
(및 konsole
)은 분명히 터미널 자체로 변환합니다 (터미널 내부에서 실행중인 응용 프로그램이 이미 수행하지 않은 경우). 따라서 선택한 텍스트에 대한 요청이있을 때 제공하는 것은 공백입니다.
몇 년 전 xterm-maintainer의 답변을 모호하게 기억하며 수정 하기 가 매우 어려울 것이라고 주장했습니다 .
확실 하지 않습니다. 올바른 방법 gnome-terminal
은 어떻 습니까? 그러나 다른 방법은 터미널 응용 프로그램 내에서 실행하는 대신 gvim
(그래픽 버전 vim
) 을 사용하는 것입니다 .gvim 에서vim
안전하게 복사하여 붙여 넣을 수 있습니다 탭을 잃지 않고.
답변
특히 Makefiles
탭이 필요한 경우 문제가 될 수 있습니다 . 불행하게도, 다른 프로그램의 문제는 관련이 없습니다. 각각은 아마도 매우 다른 해결책을 가질 것입니다.
vim 의 경우 파일의 a :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
쉘 스크립트와 Makefile에 대해 예외를 만듭니다.
와 같은 다른 프로그램 less
에 대해서는 맨 페이지를보십시오. 구성 파일, 환경 변수 또는 필요한 명령 줄 옵션이있을 수 있습니다. 적은 매뉴얼 페이지를 보면 :
-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.
당신이 주목하는 것은 버그가 아닙니다. “기능입니다.” 유일한 문제는 전원을 끄는 방법을 알아야한다는 것입니다.