มีสองวิธี บางวิธีที่ได้รับการกล่าวถึงรวมถึง (ฉันคิดว่า) tmux, หน้าจอ, เป็นกลุ่ม, emacs และเปลือก ฉันไม่รู้ emacs หรือหน้าจอดังนั้นฉันจะไปอีกสามคน
Tmux
แม้ว่าจะไม่ใช่การเลือก X แต่ tmux มีโหมดการคัดลอกที่สามารถเข้าถึงได้ผ่านทางprefix-[
( prefix
คือCtrl+ Bตามค่าเริ่มต้น) บัฟเฟอร์ที่ใช้สำหรับโหมดนี้แยกต่างหากและเป็นเอกสิทธิ์ของ tmux ซึ่งเปิดโอกาสได้ค่อนข้างน้อยและทำให้มีความหลากหลายมากกว่าการเลือก X ในสถานการณ์ที่เหมาะสม
หากต้องการออกจากโหมดนี้ให้กดq; เพื่อนำทางใช้ของคุณvim
หรือemacs
ผูกพัน (default = vim) ดังนั้นhjkl
สำหรับการเคลื่อนไหวv/V/C-v
สำหรับการเลือกตัวละคร / สาย / บล็อก ฯลฯ เมื่อคุณมีการเลือกของคุณกดEnterเพื่อคัดลอกและออกจากโหมด
prefix-]
ในการวางจากบัฟเฟอร์นี้การใช้งาน
เปลือก
การติดตั้งใด ๆX11
ดูเหมือนว่าจะมาพร้อมกับสองโปรแกรมโดยค่าเริ่มต้น: xclip
และxsel
(เหมือนว่ามันยังมาพร้อมกับทั้งสองstartx
และxinit
) ส่วนใหญ่คำตอบอื่น ๆ พูดถึงxclip
และผมชอบสำหรับความกะทัดรัดของตนเพื่อที่ฉันจะปกxsel
xsel
จากxsel (1x) :
ตัวเลือกการป้อนข้อมูล
-, - ผนวก
ผนวกอินพุตมาตรฐานเข้ากับส่วนที่เลือก หมายถึง-i
-f, - ติดตาม
ผนวกเข้ากับส่วนที่เลือกเมื่ออินพุตมาตรฐานเติบโตขึ้น นัย- ฉัน -i
-i, - อินพุต
อ่านอินพุตมาตรฐานลงในส่วนที่เลือก
ตัวเลือกการส่งออก
-o, - เอาต์พุต
เขียนการเลือกไปยังเอาต์พุตมาตรฐาน
ตัวเลือกการดำเนินการ
-c, - ชัดเจน
ล้างการเลือก แทนที่ตัวเลือกการป้อนข้อมูลทั้งหมด
-d, - ลบ
ขอให้ลบการเลือกปัจจุบัน สิ่งนี้ไม่เพียง แต่ล้างสิ่งที่เลือก แต่ยังขอให้โปรแกรมที่มีการเลือกอยู่ว่าเนื้อหาที่เลือกถูกลบ แทนที่ตัวเลือกการป้อนข้อมูลทั้งหมด
ตัวเลือกการเลือก
-p, - นายกรัฐมนตรี
ดำเนินการกับการเลือกหลัก (ค่าเริ่มต้น)
-s, - วินาที
ดำเนินการเกี่ยวกับการเลือก SECONDARY
-b, - คลิปบอร์ด
ดำเนินการกับการเลือก CLIPBOARD
และนั่นคือทั้งหมดที่คุณต้องรู้ p
(หรือไม่มี) สำหรับPRIMARY
, s
สำหรับSECONDARY
, b
สำหรับCLIPBOARD
, o
สำหรับเอาต์พุต
ตัวอย่าง: พูดว่าฉันต้องการคัดลอกผลลัพธ์foo
จาก TTY และวางลงในหน้าเว็บเพื่อรายงานข้อผิดพลาด ในการทำเช่นนี้การคัดลอกไปยัง / จากเซสชัน TTY / X เหมาะอย่างยิ่ง ดังนั้นคำถามกลายเป็นฉันจะเข้าถึงคลิปบอร์ดจาก TTY ได้อย่างไร
สำหรับตัวอย่างนี้เราจะถือว่าเซสชั่น X :1
อยู่บนจอแสดงผล
$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1
จากนั้นฉันก็สามารถCtrl-V
ลงในแบบฟอร์มตามปกติ
ตอนนี้บอกว่ามีใครบางคนในไซต์สนับสนุนให้คำสั่งให้ฉันทำงานเพื่อแก้ไขปัญหา มันซับซ้อนและยาวนาน
$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99
การสั่งพิซซ่านั้นดูเหมือนจะเป็นการใช้ประโยชน์จากบรรทัดคำสั่ง
...กำลังเดินทางไป.
เป็นกลุ่ม
หากคอมไพล์ด้วย+clipboard
(สิ่งนี้สำคัญ! ตรวจสอบของคุณvim --version
), Vim ควรเข้าถึง X PRIMARY
และการCLIPBOARD
เลือก ตัวเลือกสองรายการสามารถเข้าถึงได้จาก*
และ+
ลงทะเบียนตามลำดับและอาจถูกเขียนและอ่านจากเวลาว่างเช่นเดียวกับทะเบียนอื่น ๆ ตัวอย่างเช่น:
:%y+ ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example
หากสำเนาของเสียงเรียกเข้าของคุณไม่สนับสนุนการเข้าถึงการเลือก X โดยตรงนั่นไม่ใช่จุดสิ้นสุดของโลก คุณสามารถใช้xsel
เทคนิคตามที่อธิบายไว้ในส่วนสุดท้าย
:r ! xsel -bo ; read (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b ; write (w) to the stdin of (!) `xsel -b`
ผูกคอมโบคีย์คู่และคุณควรจะดี
:%y+
ในกลุ่มซึ่งเป็นกลุ่มสำหรับ "งัด (คัดลอก) ทุกบรรทัดในการลงทะเบียน '+' (PRIMARY
คลิปบอร์ดX )" คุณสามารถแทนที่%
ด้วยช่วงถ้าคุณต้องการที่จะเฉพาะเจาะจง แต่มีสามประการ: 1. ตอนนี้คุณต้องบันทึกข้อความใด ๆ ลงในไฟล์ก่อนจึงจะสามารถคัดลอกได้ ตรงข้ามกับxclip
คำสั่งที่กล่าวถึงในคำตอบ 2. หากคุณยังไม่รู้วิธีในการเป็นกลุ่มนี้อาจเป็นเรื่องน่าเบื่อ 3. คุณสามารถทำสิ่งนี้ได้หากเปิดใช้งานคุณสมบัติบางอย่างเมื่อรวบรวม vim หากคุณติดตั้ง GVim ควรเปิดใช้งานตามค่าเริ่มต้นในทั้งอินสแตนซ์ GUI และ terminal ของ vim