คัดลอกและวางแท็บระหว่างหน้าต่างเทอร์มินัลใน X11


11

เมื่อฉันคัดลอกและวางข้อความโดยใช้การเลือกเมาส์ X11 ระหว่างหน้าต่างเทอร์มินัลสองหน้าต่างแท็บมักจะถูกแปลงเป็นช่องว่าง แต่ไม่เสมอไป สิ่งนี้ดูเหมือนจะขึ้นอยู่กับแอพพลิเคชั่นเทอร์มินัลที่เกี่ยวข้องและโปรแกรมที่ทำงานอยู่ภายใน

นี่คือสิ่งที่ฉันค้นพบโดยการทดลอง:

  • ขึ้นอยู่กับสิ่งที่ทำงานบนฝั่งต้นทาง (สำเนา) เท่านั้น ด้านเป้าหมาย (วาง) จะวางแท็บไม่ว่าสิ่งที่กำลังทำงานอยู่หากแหล่งที่มารักษาไว้
  • เฉพาะgnome-terminalบนแท็บรักษาแหล่งที่มาด้านข้าง xtermและkonsoleทำไม่ได้
  • catแท็บจะถูกเก็บไว้เฉพาะในกรณีที่ไฟล์ที่ได้รับการส่งออกโดยใช้ โปรแกรมอื่น ๆ เช่นless, vim, emacsหรือnanoไม่รักษาแท็บ

คำอธิบายสำหรับสิ่งนี้คืออะไร? มีข้อบกพร่องเหล่านี้ในkonsoleและxtermหรือพวกเขาสามารถกำหนดค่าที่แตกต่างกัน? สามารถlessและกำหนดค่าดังกล่าวเพื่อรักษาแท็บในการส่งออก?

คำตอบ:


3

ใช่การสังเกตของคุณถูกต้อง เกิดอะไรขึ้นเมื่อคุณคัดลอกวางคือเป้าหมายได้รับข้อมูลจากแหล่งที่มา เมื่อแสดงแท็บของคุณxterm(และkonsole) ดูเหมือนจะแปลเป็นช่องว่างด้วยตนเอง (หากแอปพลิเคชันที่ทำงานภายในเครื่องยังไม่ได้ทำ) ดังนั้นเมื่อคำขอมาถึงข้อความที่เลือกสิ่งที่พวกเขาต้องนำเสนอก็คือช่องว่าง

ฉันยังจำคำตอบจากผู้ดูแล xterm หลายปีก่อนโดยอ้างว่ามันยากมากที่จะแก้ไข ...

ฉันไม่แน่ใจว่า gnome-terminalสิ่งที่ถูกต้องเป็นอย่างไร แต่ฉันดีใจที่พวกเขาทำ :) อีกทางเลือกหนึ่งคือการใช้gvim(รุ่นกราฟิกvim) - แทนที่จะทำงานvimในแอปพลิเคชันเทอร์มินัล - คุณสามารถคัดลอกวางจาก gvim ได้อย่างปลอดภัยโดยไม่สูญเสียแท็บ


0

บางครั้งสิ่งนี้อาจเป็นปัญหาโดยเฉพาะอย่างยิ่งMakefilesสิ่งที่ต้องใช้แท็บ น่าเสียดายที่ปัญหาเกี่ยวกับโปรแกรมต่าง ๆ ไม่เกี่ยวข้องกัน แต่ละคนอาจจะมีทางออกที่แตกต่างกันมาก

สำหรับเสียงเรียกเข้าคุณต้อง preform 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และสร้างข้อยกเว้นสำหรับเชลล์สคริปต์และ Makefiles

สำหรับโปรแกรมอื่นเช่นlessลองดู man pages ที่นั่น อาจมีไฟล์กำหนดค่าตัวแปรสภาพแวดล้อมหรือตัวเลือกบรรทัดคำสั่งสำหรับสิ่งที่คุณต้องการ มองไปที่หน้าคนน้อย:

-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กำหนดค่าให้ใช้ช่องว่างมากกว่าอักขระแท็บ ทำให้แสดงแท็บ-U ^Iฉันไม่พบวิธีที่จะทำให้มันเป็นตัวอักษรแท็บตัวอักษรเพื่อให้การคัดลอกข้อความจะวางอักขระแท็บ แต่ฉันชอบที่จะรู้ว่า
Matt McClure

เป็นที่น่าสังเกตว่าใน Roff ( troff& nroff) แท็บสามารถตั้งค่าได้อย่างอิสระจากกันเหมือนกับแถบเครื่องมือ "ไม้บรรทัด" ในโปรแกรมประมวลผลคำที่ทันสมัย ​​(OpenOffice, Microsoft Word, et al) อย่างไรก็ตามในทางปฏิบัติแทบไม่ใช้แท็บหยุดที่กำหนดเองในทางปฏิบัติ

mandoc(1)ยังช่วยให้ผู้ใช้สามารถแทนที่ความกว้างของการเยื้องเริ่มต้นจากบรรทัดคำสั่งโดยใช้-O indent=N(ค่าเริ่มต้นถึง 5 คอลัมน์)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.