ทำไม Ctrl + V ไม่วางใน Bash (เปลือก Linux)


192

เมื่อฉันคัดลอกบางสิ่งไปยังคลิปบอร์ดและกดCtrl+ Vใน Bash ไม่มีอะไรเกิดขึ้น อย่างไรก็ตามการคลิกขวาและเลือกวางจะทำงาน

ทำไม? มีปัญหาที่สมเหตุสมผล (ฉันแน่ใจว่ามี) อยู่เบื้องหลังพฤติกรรมนี้ใน Linux หรือไม่?


25
Shift- Insertยังใช้งานได้
bonyiii

33
ฉันชอบCtrl-Shift-Vส่วนตัว
amalloy

3
คุณยังสามารถใช้Shift + Insertในสภาพแวดล้อมเชลล์ส่วนใหญ่
เฟเบียน

4
จะทำอย่างไรถ้าคุณไม่มีคีย์แทรก
Ben Racicot

3
มันไม่ได้ทำงานในพร้อมรับคำสั่งหน้าต่างเกินไป
phuclv

คำตอบ:


360

ในวันที่มีเครื่องเทอร์มินัลคลิปบอร์ดทั้งเซสชันไม่มีอยู่เพียงไม่กี่โปรแกรมเท่านั้นที่สนับสนุนการคัดลอก / วางภายในซึ่งมักจะอยู่ภายใต้ชื่อ "บัฟเฟอร์" หรือ "แหวนฆ่า" - และใช้การกดแป้นที่หลากหลาย ตัวอย่างเช่นเปลือกทุบตีใช้CtrlKหรือCtrlUเพื่อ "ฆ่า" (ตัด) CtrlYเพื่อ "งัด" (วาง); นี้มาจากemacsแก้ไข

CtrlCเกือบทุกที่ใน Unix คือกุญแจ "ขัดจังหวะ"ซึ่งใช้ในการยกเลิกโปรแกรมหรือการดำเนินการปัจจุบัน CtrlVที่สำคัญมักจะหมายถึง "แทรกคำต่อคำ" - นั่นคือใส่ตัวอักษรต่อไปนี้อย่างแท้จริงโดยไม่ต้องดำเนินการกระทำใด ๆ ที่เกี่ยวข้อง ยกตัวอย่างเช่นปกติEscสวิทช์ที่จะสั่งในโหมดviแก้ไข แต่CtrlV, EscจะแทรกESCตัวอักษรลงในเอกสาร

การใช้CtrlCการคัดลอกและCtrlVวางจากคลิปบอร์ดของเซสชันนั้นได้รับการแนะนำโดย Mac OS ในปี 1983 และ Microsoft Windows 3.x ในปี 1990 (รุ่นก่อนหน้าของ Windows (1.x และ 2.x) เช่นเดียวกับ IBM OS / 2 สนับสนุนคีย์IBM CUA เท่านั้นCtrlInsเพื่อคัดลอกและShiftInsวางทางลัดเหล่านี้ยังคงรองรับใน Windows ทุกรุ่น)

เมื่อ GUIs ที่รองรับคลิปบอร์ดรองรับ Unix ในที่สุดCtrlปุ่มกดนั้นถูกใช้งานโดยโปรแกรมเทอร์มินัลหลายเครื่อง นอกจากนี้อินเทอร์เฟซกราฟิก X มีกลไกที่แตกต่างกันบ้าง: "การเลือก" และ "การตัดบัฟเฟอร์" แม้ตอนนี้คุณสามารถเลือกข้อความในโปรแกรมเดียวและแทรกโดยใช้ปุ่มกลางของเมาส์โดยไม่ต้องมีการคัดลอกอย่างชัดเจน

กล่าวโดยย่อเมื่อถึงเวลาที่เทอร์มินัล Xterm และ GNOME เขียน (ฉันเดาว่าคุณใช้อันหลัง) CtrlV มีความหมายแตกต่างไปจากเดิมอย่างสิ้นเชิงมาหลายปีแล้วและไม่สามารถเปลี่ยนแปลงได้ นอกจากนี้วิธีการอื่นในการคัดลอกข้อความ - "การเลือก" - มีอยู่แล้วใน X11 ดังนั้นการคัดลอก / วางที่ชัดเจนจึงอาจถือว่าไม่สำคัญเท่าที่ควรจะเป็นใน Windows ซึ่งหมายความว่าแป้นพิมพ์ลัดที่แตกต่างกันจะต้องมีการเลือก - ตัวอย่างเช่นโปรแกรมที่ทันสมัยที่สุดขั้วเช่น GNOME สถานีการใช้งานและCtrlShiftC CtrlShiftV(หากคุณใช้ Xterm คุณสามารถเพิ่มทางลัดเดียวกันได้ด้วยตนเองโดยใช้Xermobile XTerm * vt100 * Xresource Rxvt ไม่มีตัวเลือกดังกล่าว)

(ชุดเครื่องมือ X11 ส่วนใหญ่ยังรองรับคีย์ "คัดลอก" และ "วาง" ของ CUA ซึ่งไม่ขัดแย้งกับโปรแกรมเทอร์มินัลอย่างไรก็ตามการติดตั้งใช้งานค่อนข้างไม่สอดคล้องกัน - CtrlInsคัดลอกไปยัง "คลิปบอร์ด" ในโปรแกรมส่วนใหญ่ (GTK, Qt4 แต่ไม่สนใจ Xaw) อย่างไรก็ตามShiftInsวางจาก "การเลือกหลัก" ในโปรแกรม GTK และ Qt4 ส่วนใหญ่ แต่มาจาก "คลิปบอร์ด" ใน Firefox และจากการตัดบัฟเฟอร์ที่ล้าสมัยใน Xaw ที่ล้าสมัยแล้ว)


ทุกอย่างที่กล่าวว่าเทอร์มินัลหรือคอนโซลบางตัว (โดยเฉพาะคอนโซล Windows 10) จะสนับสนุนคีย์เหล่านี้ เนื่องจากคอนโซล Windows มีโหมด "mark / select" แยกต่างหากCtrlCตอนนี้จึงมีสองความหมายตามบริบท - ในโหมดปกติจะส่งการขัดจังหวะในโหมดเลือกจะคัดลอกไปยังคลิปบอร์ด (เหมือนที่Enterเคยใช้)

ในขณะเดียวกันเครื่องมือบรรทัดคำสั่งของ Windows ไม่เคยใช้ CtrlVกับสิ่งใดเลยดังนั้นจึงต้องผูกติดกับ "วาง" โดยไม่รบกวนอะไรมาก ทำเช่นเดียวกันกับเทอร์มินัลที่เหมือน Unix แต่จะมีปัญหามากกว่า


10
อืมมม ในเสียงเรียกเข้า“ yank” หมายถึงการทำสำเนามากกว่าการวาง ดูเหมือนว่าจะมีเหตุผลมากกว่านี้เช่นกัน คุณแน่ใจเกี่ยวกับความหมายของคำนี้ที่นี่หรือไม่
Konrad Rudolph

11
ใช่ฉันแน่ใจ ทุบตีสืบทอดทางลัดเริ่มต้นจากเทียบเท่า Emacs ของพวกเขา
grawity

4
@grawity: ความคิดเห็นสุดท้ายของคุณเป็นเรื่องเข้าใจผิดเล็กน้อย Bash มีโหมดการแก้ไขบรรทัดคำสั่งสองโหมดโหมด vim และโหมด emacs มันเกิดขึ้นที่โหมด emacs เป็นค่าเริ่มต้นสำหรับการติดตั้งส่วนใหญ่ นั่นทำให้เกิดความคลุมเครือในการใช้คำว่างัดแม้สำหรับทุบตี
rahmu

1
A-Ha! ฉันรู้ว่านักพัฒนา Vimperator ทำผิดพลาดเมื่อพวกเขาเปลี่ยน<C-v>ไปiในรุ่นที่ 3 แต่ผมไม่สามารถค่อนข้างวางนิ้วของฉันเกี่ยวกับว่าทำไม
Izkata

2
@Colin: คุณยังคงคิดถึงความแตกต่างระหว่างคลิปบอร์ดและการเลือก X มีหลายตัวเลือก (ประถม, วินาที, คลิปบอร์ด) แต่มักจะมีเพียงหนึ่งในนั้นเรียกว่า "คลิปบอร์ด" - การเลือก CLIPBOARD เพราะนั่นคือที่คัดลอก Ctrl-C ไปและที่ที่ Ctrl-V วางจาก การเลือกหลักไม่ใช่คลิปบอร์ด
grawity

47

ใช้CtrlShiftVสำหรับการวาง

Ctrl กับตัวอักษรอื่น ๆ มักจะใช้เปลือกสำหรับฟังก์ชั่นพิเศษ


4
ดังนั้นทำไม Linux ไม่ลงทะเบียน CTRL + SHIFT สำหรับฟังก์ชั่นพิเศษแทน ฉันคิดว่า copy-paste เป็นเรื่องปกติของผู้ใช้มากกว่าฟังก์ชั่นพิเศษใช่ไหม?
Yasser Zamani

22
เชลล์มีอยู่ก่อนที่จะมีเทอร์มินัลกราฟิกและ GUI ที่มีฟังก์ชันการทำงานแบบตัดและวางดังนั้นอาร์กิวเมนต์ของคุณจึงไม่ถูกต้อง @YasserZamani
slhck

9
Ctrl + Shift + V ดำเนินการโดยตัวจำลองเทอร์มินัล (สมมติว่าคุณใช้เทอร์มินัล GNOME) และไม่ใช่bashตัวของมันเอง หากคุณเคยอยู่นอกสภาพแวดล้อม GUI หรือหากคุณใช้โปรแกรมจำลองคำศัพท์อื่นสิ่งนี้อาจไม่ทำงาน อย่าคิดว่าคำสั่งนี้พกพาได้
rahmu

@rahmu โอ้ไม่มีความคิดเกี่ยวกับเรื่องนี้ ใช้เฉพาะการติดตั้ง Ubuntu กับสต็อคเท่านั้น มีคำสั่งสากลหรือไม่?
Akash

2
อาจไม่มีหนึ่งสำหรับการเข้าถึงคลิปบอร์ด (Shift + Ins เท่านั้นสำหรับการเลือกหลัก) แม้แต่คลิปบอร์ดก็เป็นสิ่ง X11 ซึ่งไม่สามารถเข้าถึงได้จาก tty อย่างไรก็ตาม Ctrl + Shift + V รองรับโดยเทอร์มินัล GNOME, เทอร์มินัล Xfce4, KDE Konsole; สิ่งนี้ครอบคลุมสภาพแวดล้อม GUI ที่เป็นที่นิยมที่สุด
grawity

20

นี่คือการตั้งค่าการคัดลอกวัตถุประสงค์ทั่วไปของคุณพร้อมเทอร์มินัลยอดนิยม

gnome-terminal (เป็นที่นิยมมากที่สุดบน Linux)
คัดลอก : CtrlShiftC
วาง : CtrlShiftV
หมายเหตุ : เลือกเพื่อคัดลอกและmiddle-clickวางยังใช้งานได้ แต่ใช้คลิปบอร์ดสำรอง

ฉาบ (ขั้วที่นิยมมากที่สุดใน Windows)
คัดลอก : (เลือกด้วยเมาส์ไม่มีปฏิสัมพันธ์แป้นพิมพ์)
วาง : Right-click (หรือน่าเชื่อถือมากขึ้น: shiftRight-click)
หมายเหตุ : ปพลิเคชันที่ใช้ใส่เมาส์ (ชอบvimและlinks) สามารถขโมยRight-click- shiftRight-clickมักจะทำงานในการตรวจสอบใด ๆ

การ
คัดลอกเทอร์มินัล OSX : AppleC
วาง : AppleV
หมายเหตุ:แอปที่ใช้การควบคุมเมาส์ (เช่นvimและlinks) อาจแทนที่สิ่งที่มีความหมายในการเลือกข้อความซึ่งในกรณีนี้การคัดลอกจะไม่ทำงานตามที่คุณคาดหวัง ในกรณีเหล่านั้นให้กดค้างไว้Controlในขณะที่คุณลากเมาส์เพื่อเลือก การมีส่วนร่วมของเมาส์กับแอปถูกปิดการใช้งานตามค่าเริ่มต้นในการตั้งค่าเทอร์มินัลของคุณดังนั้นคนส่วนใหญ่จะไม่รู้แม้แต่เรื่องนี้


ไม่cmd.exeเป็นที่นิยมมากกว่า PuTTY บน Windows ใช่ไหม :-)
เบน

@Ben ไม่ใช่เป็นเทอร์มินัล SSH
tylerl

1
ไม่cmd.exeไม่ใช่เทอร์มินัล SSH นั่นเป็นเรื่องจริงมาก
เบ็น

3
@Ben: ไม่ใช่เทอร์มินัลเลย - แค่เชลล์ เทอร์มินัลเริ่มต้นใน Windows คือองค์ประกอบ "Windows Console" ของ csrss
grawity

@ Ben แต่คลิกขวาเพื่อวางยังทำงานบนcmd.exe(และเป็นวิธีเดียวที่มีถ้าคุณไม่ต้องการที่จะเปิดเมนู> แก้ไข> วาง) ในโหมดแก้ไขอย่างรวดเร็ว ไม่มีช็อตคัตในพรอมต์คำสั่ง pre-win10
phuclv

17

เป็นประเพณีที่ฝังรากลึกที่Ctrlสำคัญพร้อมกับตัวอักษรสร้างตัวควบคุม ASCII ที่พบโดยการลบ 64 จากค่า ASCII ของตัวอักษรตัวพิมพ์ใหญ่ การคำนวณแผนที่นี้Ctrl- Aถึง 1 และอื่น ๆ ตัวอย่างเช่นCtrl- IคือTabและCtrl- Jเป็น linefeed

ไม่มีประเพณีที่คล้ายกันคือ- Ctrl - - ไม่คาดว่าจะสร้างตัวละครเฉพาะใด ๆShiftCtrlShiftV

เทอร์มินัลอีมูเลเตอร์ต้องสนับสนุนประเพณีโดยผ่านการCtrlประชุมอย่างโปร่งใสโดยให้ปรากฏเป็นอินพุตอักขระสำหรับโปรแกรมที่ดำเนินการผ่านหน้าต่างเทอร์มินัลนั้น โปรแกรมที่ใช้เทอร์มินัลแมปปุ่มควบคุมเข้ากับคำสั่ง ตัวอย่างเช่น Bash ใช้Ctrl- Vเป็นคำสั่งซึ่งหมายถึง "ใช้อักขระตัวถัดไป" สิ่งนี้ช่วยให้คุณสามารถฝังอักขระควบคุมในบรรทัดคำสั่ง หากเทอร์มินัลขโมยปุ่มควบคุมเพื่อการใช้งานเองคำสั่งดังกล่าวจะไม่สามารถใช้งานได้ ดังนั้นการสกัดกั้นCtrl- Vสำหรับเมตาฟังก์ชั่นหมดคำถาม (อย่างน้อยในการกำหนดค่าเริ่มต้น)

อย่างไรก็ตามการเลียนแบบขั้วมีอิสระในการสกัดกั้นCtrl- Shift- Vซึ่งไม่ได้คาดว่าจะสร้างตัวละคร Ctrl- Shift- Vไม่ใช่มาตรฐาน มันเป็นสิ่งที่ Gnome Terminal (ซึ่งอาจอยู่ในอาคารอื่น ๆ )

บนเดสก์ท็อป Unix ที่ใช้ X การประชุมคือไม่จำเป็นต้องใช้คำสั่งเพื่อคัดลอก คุณเพียงแค่เลือกข้อความ และปุ่มกลางวางข้อความนั้นไว้ที่อื่น คุณจะพบว่ามันใช้งานได้ใน Xterm, Gnome Terminal และ Firefox

Ctrl- Vเป็นการประชุม Microsoft Windows ซึ่งเป็นการเลียนแบบApple- Vจาก Macintosh


3
มันไม่ได้เป็นการลบอย่างแน่นอน - ตามธรรมเนียม Ctrl ได้ล้างบิตที่ 6 และ 7ของตัวละครแล้ว ด้วยเหตุนี้ Ctrl + Shift + จดหมายจึงทำงานเหมือนกับ Ctrl + Letter ในเทอร์มินัลส่วนใหญ่ (เว้นแต่ว่าเทอร์มินัลจะถูกแทนที่อย่างชัดเจนเช่นในกรณีของทางลัดการคัดลอก / วาง)
grawity

1
เนื่องจากคีย์นั้นมีการเรียงลำดับแบบสุ่มโดยพื้นฐานเกี่ยวกับมาตรฐาน ASCII ROM โปรแกรมจึงมีตารางการค้นหาจำนวนมากที่ช่วยในการสร้างรหัส ASCII ... การกดปุ่มควบคุมค้างไว้เมื่อกดแป้นอื่นทำให้เกิดการค้นหาตารางอื่น [VT100 ซีรี่ส์คู่มือทางเทคนิค, 4.4.9.3, ดิจิตอล]
Kaz

1
@Linger ขอบคุณสำหรับการแก้ไข มันแสดงผลได้ดี แต่ไม่มีทางที่ฉันจะพิมพ์<kbd>แท็กเหล่านี้ในโพสต์ในอนาคต
Kaz

Ctrl-A1เป็น ฉันจะลองสิ่งนี้ได้อย่างไร สถานี Gnome Ctrl-Aฉันไม่ทำอะไรเลยเมื่อกด
เบิร์ต

3

สำหรับฉันวิธีที่ง่ายที่สุดในการคัดลอกแปะในเชลล์คือ:

เลือกรหัสที่คุณต้องการจากนั้นคลิกผ่าน mouse-middle-key


1
ตราบใดที่คุณมีปุ่มกลางของเมาส์
jpierson

1
@ jpierson ไม่ใช่ว่าฉันขอแนะนำอย่างนี้ แต่คุณสามารถเขียนสคริปต์ขนาดเล็กที่ใช้xdotool click 2เพื่อจำลองการคลิกปุ่มที่สามสำหรับคุณ จากนั้นในสิ่งที่สภาพแวดล้อมของคุณอยู่ในจัดการหน้าต่าง / เดสก์ทอปคุณสามารถผูกสคริปต์นี้คีย์ - พูดmod i(แทรก) หรือสิ่งที่ keybindings คุณอาจมีอยู่ (หรือสิ่งที่ mod อาจหมายถึง - ซึ่งจริงๆขึ้นอยู่ที่คุณผูกนี้)
dylnmc


1

คุณสามารถใช้เมาส์ปุ่มกลางหากคุณรู้สึกขี้เกียจและเลือกคำสั่งจากเอกสารข้อความสคริปต์หรือเว็บหรือฟอรัม เมื่อคุณเลือกคำสั่งที่ต้องการแล้วเพียงเลื่อนไปที่เทอร์มินัลแล้วคลิกปุ่มกลางบนเมาส์ ฉันใช้วิธีนี้เนื่องจากฉันใช้ลูกสุนัข linux ซึ่งดูเหมือนจะไม่สนับสนุนพฤติกรรมปกติของการคลิกขวาและวาง มันทำในหน้าต่างตัวจัดการไฟล์ไม่ได้อยู่ในหน้าต่างเทอร์มินัล ไม่รู้ว่าทำไม แต่ฉันดีใจที่เงียบฉันพบเกี่ยวกับวิธีปุ่มกลางมีประโยชน์มาก! ;-)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.