sao chép và dán các tab giữa các cửa sổ đầu cuối trong X11


11

Khi tôi sao chép và dán văn bản bằng cách chọn chuột X11 giữa hai cửa sổ đầu cuối, các tab thường, nhưng không phải lúc nào cũng được chuyển đổi thành khoảng trắng. Điều này dường như phụ thuộc vào các ứng dụng đầu cuối có liên quan và các chương trình chạy bên trong chúng.

Đây là những gì tôi đã tìm ra bằng thử nghiệm:

  • Nó chỉ phụ thuộc vào những gì đang chạy ở phía nguồn (bản sao). Phía đích (dán) sẽ dán các tab bất kể đang chạy gì, nếu nguồn bảo quản chúng.
  • Chỉ gnome-terminalở phía nguồn bảo tồn các tab. xtermkonsolekhông.
  • Các tab chỉ được bảo toàn nếu tệp đã được xuất bằng cat. Các ứng dụng khác như less, vim, emacs, hoặc nanokhông duy trì các tab.

Giải thích cho điều này là gì? Là những lỗi trong konsolexterm, hoặc chúng có thể được cấu hình khác nhau? Có thể lessvà như vậy được cấu hình để bảo vệ các tab trong đầu ra?

Câu trả lời:


3

Vâng, quan sát của bạn là chính xác. Điều gì xảy ra khi bạn sao chép-dán là mục tiêu lấy dữ liệu từ nguồn. Khi hiển thị các tab của bạn, xterm(và konsole), rõ ràng, tự dịch chúng vào khoảng trắng (nếu ứng dụng đang chạy bên trong thiết bị đầu cuối chưa thực hiện điều đó). Do đó, khi một yêu cầu đến với văn bản đã chọn, tất cả những gì họ phải cung cấp là khoảng trắng.

Tôi thậm chí còn mơ hồ nhớ lại một phản hồi từ người bảo trì xterm nhiều năm trước, tuyên bố rằng sẽ rất khó để sửa chữa ...

Tôi không chắc chắn, làm thế nào gnome-terminal là đúng, nhưng tôi rất vui vì họ làm vậy :) Một cách khác là sử dụng gvim(phiên bản đồ họa vim) - thay vì chạy vimbên trong một ứng dụng đầu cuối - bạn có thể sao chép-dán an toàn từ gvim , mà không mất các tab.


0

Điều này đôi khi có thể là một vấn đề, đặc biệt là Makefilestrong đó yêu cầu các tab. Thật không may, các vấn đề với các chương trình khác nhau không liên quan. Mỗi người có lẽ sẽ có một giải pháp rất khác nhau.

Đối với vim, bạn phải tạo thành một :set noexpandtabhoặc một vị trí set noexpandtabtrong ~/.vimrctệp của bạn . Nếu bạn chỉ muốn một số kiểu tệp nhất định noexpandtabđược đặt thì bạn có thể thực hiện tự động tự động trong phần ~/.vimrcTôi có các mục sau:

"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

Điều này sẽ đặt mặc định 4 khoảng trắng cho một tab vimvà tạo ngoại lệ cho shell script và Makefiles.

Đối với các chương trình khác như less, hãy thử nhìn vào trang man. Chúng có thể có tệp cấu hình, biến môi trường hoặc tùy chọn dòng lệnh cho những gì bạn cần. Nhìn vào trang ít người hơn:

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

Những gì bạn đang nhận thấy không phải là một lỗi. "Đó là một tính năng." Vấn đề duy nhất là bạn cần biết cách tắt nó đi.


2
less -xncấu hình nó để sử dụng n khoảng trắng thay vì ký tự tab. -Ulàm cho nó hiển thị tab như ^I. Tôi chưa tìm được cách làm cho nó phát ra một ký tự tab theo nghĩa đen để sao chép văn bản sẽ dán một ký tự tab, nhưng tôi rất muốn biết làm thế nào.
Matt McClure

Điều đáng chú ý là trong Roff ( troff& nroff), các tabstop có thể được đặt độc lập với nhau, giống như các thanh công cụ "thước kẻ" trong các trình xử lý văn bản hiện đại (OpenOffice, Microsoft Word, et al). Tuy nhiên, các trang web hiếm khi sử dụng các điểm dừng tab tùy chỉnh trong thực tế.

mandoc(1)cũng cho phép người dùng ghi đè chiều rộng thụt đầu dòng mặc định từ dòng lệnh, bằng cách sử dụng -O indent=N(mặc định là 5 cột).
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.