Tại sao Ctrl + V không dán vào Bash (Linux shell)?


192

Khi tôi sao chép một cái gì đó vào bảng tạm và nhấn Ctrl+ Vtrong Bash, không có gì xảy ra; Tuy nhiên, nhấp chuột phải và chọn Paste thực hiện công việc.

Tại sao? Có bất kỳ vấn đề hợp lý nào (tôi chắc chắn là có) đằng sau hành vi này trong Linux không?


25
Shift- Insertcũng hoạt động
bonyiii

33
Tôi thích Ctrl-Shift-V, cá nhân.
amalloy

3
Bạn cũng có thể sử dụng Shift + Chèn trong hầu hết các môi trường shell.
Fabian

4
Nếu bạn không có phím Chèn thì sao?
Ben Racicot

3
nó cũng không hoạt động trong dấu nhắc lệnh của windows
phuclv

Câu trả lời:


360

Trong thời của các thiết bị đầu cuối vật lý , các clipboard toàn phiên không tồn tại, chỉ có một số chương trình hỗ trợ sao chép / dán nội bộ - thường dưới tên "bộ đệm" hoặc "giết nhẫn" - và sử dụng nhiều tổ hợp phím khác nhau. Ví dụ, bash shell sử dụng CtrlKhoặc CtrlU"giết" (cắt), CtrlYđể "yank" (dán); này xuất phát từ các emacs biên tập .

CtrlChầu như mọi nơi trong Unix là khóa "ngắt" , được sử dụng để hủy bỏ chương trình hoặc hoạt động hiện tại. Các CtrlVchính thường có nghĩa là "chèn nguyên văn" - đó là, chèn nhân vật sau đây theo nghĩa đen mà không thực hiện bất kỳ hành động liên quan. Ví dụ, một Escchuyển đổi bình thường sang chế độ lệnh trong trình soạn thảo vi , nhưng CtrlV, Escsẽ chèn ESCký tự vào tài liệu.

Việc sử dụng CtrlCđể sao chép và CtrlVdán từ bảng tạm trên toàn phiên được Mac OS giới thiệu vào năm 1983 và Microsoft Windows 3.x vào năm 1990. (Các phiên bản Windows trước đó (1.x và 2.x), cũng như IBM OS / 2 , chỉ hỗ trợ các khóa CUA của IBMCtrlIns để sao chép và ShiftInsdán; các phím tắt này vẫn được hỗ trợ bởi tất cả các phiên bản Windows.)

Khi GUI có hỗ trợ clipboard cuối cùng đã đến Unix, các Ctrlphím nhấn đã được sử dụng bởi nhiều chương trình đầu cuối. Ngoài ra, giao diện đồ họa X có một số cơ chế khác nhau : "lựa chọn" và "cắt bộ đệm". Ngay cả bây giờ bạn có thể chọn văn bản trong một chương trình và chèn nó bằng nút chuột giữa mà không có bất kỳ hành động sao chép rõ ràng nào.

Nói tóm lại, vào thời điểm Xterm và Gnome Terminal được viết (Tôi đoán bạn sử dụng cái sau), CtrlV đã có một ý nghĩa hoàn toàn khác trong nhiều năm và không thể thay đổi. Ngoài ra, một phương pháp sao chép văn bản khác - "lựa chọn" - đã có trong X11, vì vậy hành động sao chép / dán rõ ràng có thể được coi là không quan trọng như trong Windows. Điều này có nghĩa là các phím tắt khác nhau phải được chọn - ví dụ: hầu hết các chương trình thiết bị đầu cuối hiện đại, như Thiết bị đầu cuối Gnome, sử dụng CtrlShiftCCtrlShiftV. (Nếu bạn sử dụng Xterm, các phím tắt tương tự có thể được thêm bằng tay bằng cách sử dụng Xresource * vt100 * bản dịch Xresource. Rxvt không có tùy chọn như vậy.)

(Hầu hết các bộ công cụ X11 cũng hỗ trợ các khóa "sao chép" và "dán" CUA, không xung đột với các chương trình đầu cuối. Thật không may, việc triển khai khá không nhất quán - CtrlInssao chép vào "bảng tạm" trong hầu hết các chương trình (GTK, Qt4, nhưng bị bỏ qua bởi Xaw), tuy nhiên, ShiftInsdán từ "lựa chọn chính" trong hầu hết các chương trình GTK và Qt4, nhưng từ "clipboard" trong Firefox và từ bộ đệm cắt đã lỗi thời trong Xaw đã lỗi thời.)


Tất cả những gì đã nói, một số thiết bị đầu cuối hoặc bảng điều khiển (đặc biệt là bảng điều khiển Windows 10) không hỗ trợ các phím này. Vì bảng điều khiển Windows luôn có chế độ "đánh dấu / chọn" riêng biệt, CtrlCgiờ đây cũng có hai ý nghĩa dựa trên ngữ cảnh - ở chế độ thông thường, nó sẽ gửi một ngắt, trong chế độ chọn, nó sao chép vào bảng tạm (giống như Enterđược sử dụng).

Trong khi đó, các công cụ dòng lệnh của Windows không bao giờ thực sự được sử dụng CtrlV cho bất cứ điều gì, vì vậy nó bị ràng buộc để "dán" mà không làm phiền nhiều thứ. Tuy nhiên, làm tương tự trên các thiết bị đầu cuối giống Unix sẽ gặp nhiều vấn đề hơn.


10
Hừm. Trong Vim, từ yank trực tiếp có nghĩa là sao chép chứ không phải dán. Điều này dường như cũng có ý nghĩa hơn. Bạn có chắc chắn về ý nghĩa của thuật ngữ này ở đây?
Konrad Rudolph

11
Vâng tôi chắc chắn. Bash kế thừa các phím tắt mặc định từ tương đương Emacs của chúng .
grawity

4
@grawity: bình luận cuối cùng của bạn là một teenie hơi sai lầm. Bash cung cấp hai chế độ chỉnh sửa dòng lệnh, chế độ vim và chế độ emacs. Nó chỉ xảy ra rằng chế độ emacs là mặc định trên hầu hết các cài đặt. Điều đó làm tăng sự mơ hồ trong việc sử dụng thuật ngữ yank , ngay cả đối với bash.
rahmu

1
A-ha! Tôi biết các nhà phát triển Vimperator đã phạm sai lầm khi họ chuyển <C-v>đến itrong phiên bản 3, nhưng tôi có thể không hoàn toàn đặt ngón tay của tôi trên lý do tại sao .
Izkata

2
@Colin: Bạn vẫn bỏ lỡ sự phân biệt giữa clipboard và lựa chọn X. Có một số lựa chọn (CHÍNH, THỨ HAI, CLIPBOARD), nhưng chỉ một trong số chúng thường được gọi là "bảng tạm" - lựa chọn CLIPBOARD, bởi vì đó là nơi Ctrl-C sao chép và đó là nơi Ctrl-V dán vào. Lựa chọn chính không phải là clipboard.
grawity

47

Sử dụng CtrlShiftVđể dán.

Ctrl với các ký tự khác thường được sử dụng bởi vỏ cho các chức năng đặc biệt.


4
Vậy tại sao Linux không đăng ký CTRL + SHIFT cho các chức năng đặc biệt thay thế; Tôi nghĩ rằng sao chép-dán là điển hình hơn bởi một số người dùng hơn chức năng đặc biệt, phải không?
Yasser Zamani

22
Shell đã tồn tại theo cách trước khi có Thiết bị đầu cuối đồ họa và GUI có chức năng cắt và dán, do đó, đối số của bạn không thực sự hợp lệ. @YasserZamani
slhck

9
Ctrl + Shift + V được thực hiện bởi trình giả lập thiết bị đầu cuối (giả sử bạn đang sử dụng Terminal Gnome) chứ không phải bashchính nó. Nếu bạn đã từng ở ngoài môi trường GUI hoặc nếu bạn đang sử dụng trình giả lập thuật ngữ khác, điều này có thể sẽ không hoạt động. Đừng nghĩ lệnh này là xách tay.
rahmu

@rahmu ơi, không có ý kiến ​​gì về điều đó. Chỉ sử dụng cài đặt Ubuntu stock. Có một lệnh phổ quát?
Akash

2
Có lẽ không có cái nào để truy cập vào bảng tạm (chỉ Shift + Ins cho lựa chọn chính). Ngay cả bảng tạm cũng là một thứ X11, không thể truy cập được từ tty. Tuy nhiên, Ctrl + Shift + V được hỗ trợ bởi Terminal Gnome, Xfce4 Terminal, KDE Konsole; điều này bao gồm các môi trường GUI phổ biến nhất.
grawity

20

Đây là cài đặt sao chép mục đích chung của bạn với các thiết bị đầu cuối phổ biến:

gnome-terminal (phổ biến nhất trên Linux)
Sao chép : CtrlShiftC
Dán : CtrlShiftV
Lưu ý : Chọn để sao chép và middle-clickđể dán cũng hoạt động, nhưng nó sử dụng một bảng tạm thay thế.

PuTTY (thiết bị đầu cuối phổ biến nhất trong Windows)
Sao chép : (chọn bằng chuột, không có tương tác bàn phím)
Dán : Right-click (hoặc đáng tin cậy hơn shiftRight-click:)
Lưu ý : Các ứng dụng lấy đầu vào chuột (thích vimlinks) có thể đánh cắp Right-click- shiftRight-clicksẽ luôn hoạt động trong mọi ứng dụng.


Sao chép thiết bị đầu cuối OSX : AppleC
Dán : AppleV
Lưu ý: Các ứng dụng kiểm soát chuột (như vimlinks) có thể ghi đè lên ý nghĩa của việc chọn văn bản, trong trường hợp đó, bản sao sẽ không hoạt động theo cách bạn mong đợi. Trong những trường hợp đó, nhấn và giữ Controltrong khi bạn kéo chuột để chọn. Tương tác chuột với các ứng dụng bị tắt theo mặc định trong cài đặt thiết bị đầu cuối của bạn, vì vậy hầu hết mọi người thậm chí sẽ không biết về điều này.


Không cmd.exephổ biến hơn PuTTY trên Windows? :-)
Ben

@Ben Không phải là thiết bị đầu cuối SSH.
tylerl

1
Không, cmd.exekhông phải là thiết bị đầu cuối SSH. Điều đó rất đúng.
Bến

3
@Ben: Nó hoàn toàn không phải là một thiết bị đầu cuối - chỉ là một cái vỏ. Thiết bị đầu cuối mặc định trong Windows là thành phần "Bảng điều khiển Windows" của csrss.
grawity

@Ben nhưng nhấp chuột phải để dán cũng hoạt động cmd.exe(và là cách duy nhất ở đó, nếu bạn không muốn mở menu> chỉnh sửa> dán) trong chế độ chỉnh sửa nhanh . Không có phím tắt trong dấu nhắc lệnh trước win10
phuclv

17

Đó là một truyền thống sâu xa rằng Ctrlkhóa cùng với một chữ cái tạo ra các ký tự điều khiển ASCII được tìm thấy bằng cách trừ 64 từ giá trị ASCII của chữ in hoa. Bản đồ tính toán này Ctrl- Ađến 1, v.v. Ví dụ Ctrl- ITabCtrl- Jlà nguồn cấp dữ liệu.

Không có truyền thống tương tự cho Ctrl- Shift. Ctrl- Shift- Vdự kiến ​​sẽ không tạo ra bất kỳ nhân vật cụ thể nào.

Trình giả lập thiết bị đầu cuối phải hỗ trợ truyền thống bằng cách chuyển qua Ctrlquy ước một cách trong suốt , cho phép nó xuất hiện dưới dạng đầu vào ký tự cho các chương trình được vận hành thông qua cửa sổ đầu cuối đó. Các chương trình dựa trên thiết bị đầu cuối ánh xạ các phím điều khiển cho các lệnh. Ví dụ, Bash sử dụng Ctrl- Vnhư một lệnh có nghĩa là "lấy ký tự tiếp theo theo nghĩa đen". Điều này cho phép bạn nhúng một ký tự điều khiển trong dòng lệnh. Nếu thiết bị đầu cuối đánh cắp các phím điều khiển để sử dụng riêng, các lệnh đó sẽ không khả dụng. Vì vậy, việc chặn Ctrl- Vđối với chức năng meta là không cần thiết (ít nhất là trong cấu hình mặc định).

Tuy nhiên, trình giả lập thiết bị đầu cuối có thể tự do chặn Ctrl- Shift- Vđiều không được mong đợi sẽ tạo ra một ký tự. Ctrl- Shift- Vkhông phải là một tiêu chuẩn; đó là một thiết bị đầu cuối Gnome (có thể ở một số thiết bị đầu cuối khác).

Trên máy tính để bàn Unix dựa trên X, quy ước là không cần lệnh để sao chép. Bạn chỉ cần chọn văn bản. Và nút giữa dán văn bản đó ở nơi khác. Bạn sẽ thấy rằng nó hoạt động trong Xterm, Gnome Terminal và Firefox như nhau.

Ctrl- Vlà một quy ước của Microsoft Windows, được mô phỏng theo Apple- Vtừ Macintosh.


3
Đây không phải phép trừ chính xác - theo truyền thống, Ctrl đã xóa các bit thứ 6 và thứ 7 của ký tự; do đó, Ctrl + Shift + letter hoạt động giống hệt với Ctrl + Letter trong hầu hết các thiết bị đầu cuối (trừ khi nó bị ghi đè rõ ràng bởi thiết bị đầu cuối, như trong trường hợp sao chép / dán phím tắt).
grawity

1
Do các khóa về cơ bản được sắp xếp ngẫu nhiên theo tiêu chuẩn ASCII, ROM chương trình bao gồm một số bảng tra cứu hỗ trợ trong việc tạo mã ASCII. ... Giữ phím KIỂM SOÁT khi nhấn phím khác sẽ khiến bảng khác tra cứu. [Hướng dẫn kỹ thuật dòng VT100, 4.4.9.3, Kỹ thuật số].
Kaz

1
@Linger cảm ơn vì đã chỉnh sửa. Nó hiển thị độc đáo, nhưng không có cách nào tôi gõ tất cả các <kbd>thẻ này trong các bài viết trong tương lai.
Kaz

Ctrl-A1. Làm thế nào tôi có thể thử điều này? Thiết bị đầu cuối Gnome của tôi không làm gì khi tôi nhấn Ctrl-A.
robert

3

Đối với tôi, cách đơn giản nhất để sao chép dán vào vỏ là:

Chọn mã bạn muốn và sau đó vượt qua nó bằng cách nhấp vào mouse-middle-key


1
Miễn là bạn có một phím chuột giữa.
jpierson

1
@jpierson không phải là tôi khuyến nghị điều này, nhưng bạn có thể viết một tập lệnh nhỏ chỉ đơn giản là sử dụng xdotool click 2để mô phỏng nhấp chuột vào nút thứ ba cho bạn. Sau đó, trong bất kỳ môi trường trình quản lý cửa sổ / máy tính để bàn nào bạn đang ở, bạn có thể liên kết tập lệnh này với một khóa - nói mod i(để chèn) hoặc bất kỳ khóa phím nào bạn có thể có (hoặc bất kỳ mod nào có thể có nghĩa - điều này thực sự phụ thuộc vào nơi bạn liên kết này)
dylnmc

2

Chúng ta có thể sử dụng nút chèn bàn phím để sao chép và dán (Trong bàn phím cũ có thể bị thiếu)

Sao chép : CtrlInsert
Dán :CtrlShiftInsert


1

bạn cũng có thể sử dụng nút giữa một con chuột nếu bạn cảm thấy lười biếng và chọn một lệnh từ tài liệu văn bản, tập lệnh hoặc web hoặc diễn đàn. một khi bạn đã chọn lệnh dự định chỉ cần di chuyển đến thiết bị đầu cuối của bạn và nhấp vào nút giữa trên chuột. Tôi sử dụng phương pháp này khi tôi sử dụng linux linux dường như không hỗ trợ hành vi bình thường của nhấp chuột phải và dán. nó làm trong một cửa sổ xử lý tập tin, không phải trong một cửa sổ đầu cuối. không biết tại sao nhưng tôi rất hài lòng Tôi đã tìm hiểu về phương pháp nút giữa, rất tiện dụng! ;-)

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.