Câu hỏi Tại sao Ctrl + V không dán trong Bash (Linux shell)?


Khi tôi sao chép nội dung nào đó vào khay nhớ tạm và nhấn Ctrl + V trong Bash, không có gì xảy ra; Tuy nhiên, nhấp chuột phải và chọn Dán Làm công việc.

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


169
2018-05-07 07:44


gốc


Shift- -Insert cũng hoạt động - bonyiii
tôi thích Ctrl-Shift-V, cá nhân. - amalloy
Bạn cũng có thể dùng Shift + Insert trong hầu hết các môi trường vỏ. - Fabian
Nếu bạn không có phím Insert thì sao? - Ben Racicot
nó cũng không hoạt động trong cửa sổ lệnh - phuclv


Các câu trả lời:


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

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

Việc sử dụng CtrlC để sao chép và CtrlV để dán từ clipboard toàn phiên được giới thiệu bởi Mac OS 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ợ IBM CUA phím CtrlIns để sao chép và ShiftIns dá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 với hỗ trợ clipboard cuối cùng đã đạt được Unix, Ctrl các phím bấm đã được nhiều chương trình đầu cuối sử dụng. Ngoài ra, giao diện đồ họa X có phần nào 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 cách sử dụ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.

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 được. Ngoài ra, một phương pháp sao chép văn bản thay thế - "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 đã đượ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 CtrlShiftC và CtrlShiftV. (Nếu bạn sử dụng Xterm, các phím tắt tương tự có thể được thêm theo cách thủ công bằng cách sử dụng Bản dịch XTerm * vt100 * 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 - CtrlIns bản sao vào "clipboard" trong hầu hết các chương trình (GTK, Qt4, nhưng bị bỏ qua bởi Xaw); Tuy nhiên, ShiftInsbột nhão 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ừ các bộ đệm cắt lỗi hiện tại đã 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àn giao tiếp (đặc biệt là bàn điều khiển Windows 10) làm 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, CtrlC bây giờ 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 clipboard (giống như Đi vào đã từng).

Trong khi đó, các công cụ dòng lệnh của Windows không bao giờ thực sự đã 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 bất cứ điều gì. Làm tương tự trên các thiết bị đầu cuối giống Unix tuy nhiên sẽ có vấn đề hơn.


332
2018-05-07 08:03



Hmm. Trong Vim, “yank” có nghĩa là sao chép thay vì 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 không? - Konrad Rudolph
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 họ. - grawity
@grawity: bình luận cuối cùng của bạn là một chút thiếu niên 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
A-ha! tôi biết các nhà phát triển Vimperator đã phạm sai lầm khi họ chuyển sang <C-v> đến i trong phiên bản 3, nhưng tôi không thể đặt ngón tay lên tại sao. - Izkata
@Colin: Bạn vẫn bỏ lỡ sự khác biệt giữa clipboard và lựa chọn X. Có một số lựa chọn (PRIMARY, SECONDARY, CLIPBOARD), nhưng chỉ một trong số chúng thường được gọi là "clipboard" - lựa chọn CLIPBOARD, bởi vì đó là nơi các bản sao Ctrl-C, và đó là nơi mà Ctrl-V dán. Lựa chọn chính không phải là khay nhớ tạm. - grawity


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

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


41
2018-05-07 07:45



Vì 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 là các chức năng đặc biệt, phải không? - Yasser Zamani
Vỏ đã tồn tại trước khi có các thiết bị đầu cuối đồ họa và GUI với chức năng cắt và dán, vì vậy đối số của bạn không thực sự hợp lệ. @YasserZamani - slhck
Ctrl + Shift + V được thực hiện bởi trình mô phỏng thiết bị đầu cuối (giả sử bạn đang sử dụng Thiết bị đầu cuối GNOME) chứ không phải bởi bashchinh no. Nếu bạn đã từng ở bên ngoài môi trường GUI hoặc nếu bạn đang sử dụng trình mô phỏng thuật ngữ khác, điều này có thể sẽ không hoạt động. Đừng nghĩ rằng lệnh này là di động. - rahmu
@rahmu Oh, không có ý tưởng về điều đó. Chỉ sử dụng cài đặt cổ phiếu của Ubuntu. Có một lệnh phổ quát? - Akash
Có lẽ không phải là một để truy cập vào clipboard (chỉ Shift + Ins cho lựa chọn chính). Ngay cả clipboard chính nó là một điều X11, không thể truy cập từ tty. Tuy nhiên, Ctrl + Shift + V được hỗ trợ bởi Thiết bị đầu cuối GNOME, Thiết bị đầu cuối Xfce4, KDE Konsole; điều này bao gồm các môi trường GUI phổ biến nhất. - grawity


Đây là cài đặt dán bản sao có 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
chú thích: Chọn để sao chép và Nhấp chuột giữa để dán cũng hoạt động, nhưng nó sử dụng một clipboard 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 tương tác bàn phím)
Dán: Click chuột phải  (hoặc đáng tin cậy hơn: sự dịch chuyểnClick chuột phải)
chú thích: Ứng dụng nhận đầu vào chuột (như vim và links) có thể ăn cắp Click chuột phải - - sự dịch chuyểnClick chuột phải sẽ luôn hoạt động trong bất kỳ ứng dụng nào.

Thiết bị đầu cuối OSX
Sao chép: táoC
Dán: táoV
Chú thích: Ứng dụng kiểm soát chuột (như vim và links) có thể ghi đè ý 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 đó, hãy giữ Điều khiển trong khi bạn kéo chuột để chọn. Tương tác chuột với ứng dụng bị tắt theo mặc định trong cài đặt đầ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.


17
2018-05-07 21:22



Không phải cmd.exe phổ biến hơn PuTTY trên Windows? :-) - Ben
@Ben Không phải là thiết bị đầu cuối SSH. - tylerl
Không, cmd.exe không phải là thiết bị đầu cuối SSH. Điều đó rất đúng. - Ben
@Ben: Nó không phải là một thiết bị đầu cuối ở tất cả - chỉ có một vỏ. Thiết bị đầu cuối mặc định trong Windows là thành phần "Windows Console" của csrss. - grawity
@Ben nhưng nhấp chuột phải để dán cũng hoạt động trên 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 khi giành chiến thắng10 - phuclv


Đó là một truyền thống bắt nguồn từ sâu sắc mà Ctrl 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ừ đi 64 từ giá trị ASCII của chữ hoa. Bản đồ tính toán này Ctrl- -A đến 1, v.v. Ví dụ Ctrl- -tôi Là Chuyển hướng và Ctrl- -J là linefeed.

Không có truyền thống tương tự cho Ctrl- -Shift. Ctrl- -Shift- -V 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 minh bạch đi qua Ctrl quy ước, cho phép nó xuất hiện dưới dạng đầu vào ký tự cho các chương trình đang được vận hành thông qua cửa sổ đầu cuối đó. Các chương trình dựa trên đầu cuối ánh xạ các phím điều khiển đến các lệnh. Ví dụ, Bash sử dụng Ctrl- -V như một lệnh có nghĩa là "lấy nhân vậ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, đánh chặn Ctrl- -V cho một meta-chức năng là ra khỏi câu hỏi (ít nhất là trong một cấu hình mặc định).

Tuy nhiên, giả lập thiết bị đầu cuối được tự do chặn Ctrl- -Shift- -Vmà không được mong đợi để tạo ra một nhân vật. Ctrl- -Shift- -V khô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 nào để 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- -V là một quy ước của Microsoft Windows, là sự bắt chước táo- -V từ Macintosh.


16
2018-05-07 14:34



Không phải vậy chính xác trừ - theo truyền thống, Ctrl có xóa các bit thứ 6 và thứ 7 của nhân vật; bởi vì điều này, Ctrl + Shift + letter hoạt động giống với Ctrl + Letter trong hầu hết các thiết bị đầu cuối (trừ khi nó được overriden rõ ràng bởi các thiết bị đầu cuối, như trong trường hợp của các phím tắt sao chép / dán). - grawity
Do các khóa 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ợ việc tạo mã ASCII. ... Giữ phím CONTROL khi nhấn một phím khác sẽ làm cho bảng khác tra cứu. [Sách hướng dẫn kỹ thuật số VT100, 4.4.9.3, Kỹ thuật số]. - Kaz
@ Cảm ơn bạn đã 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ả những <kbd> trong các bài đăng trong tương lai. - Kaz
Ctrl-A Là 1. 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 hoạt động khi tôi nhấn Ctrl-A. - robert


Chúng tôi 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: CtrlChèn
Dán: CtrlShiftChèn 


2
2018-05-08 13:42





Với tôi, cách đơn giản nhất để sao chép dán trong trình bao là:

Chọn mã bạn muốn và sau đó dán mã đó bằng cách nhấp vào phím chuột giữa


2
2017-08-03 12:57



Miễn là bạn có một phím chuột giữa. - jpierson
@jpierson không phải là tôi mạnh mẽ đề xuất này, nhưng bạn có thể viết một kịch bản nhỏ mà 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àn hình 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 (cho chèn) hoặc bất kỳ keybindings bạn có thể có sẵn (hoặc bất kỳ mod có thể có nghĩa là - mà thực sự phụ thuộc vào nơi bạn ràng buộc này) - dylnmc


bạn cũng có thể sử dụng nút giữa chuột nếu bạn cảm thấy lười biếng và chọn lệnh từ tài liệu văn bản, tập lệnh hoặc trang 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 như tôi sử dụng Linux puppy mà doesnt dường như để hỗ trợ các 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, chỉ cần không có trong một cửa sổ thiết bị đầu cuối. không biết tại sao nhưng tôi im lặng hài lòng tôi phát hiện ra về phương pháp nút giữa, rất tiện dụng! ;-)


1
2018-05-19 16:08