Tại sao Terminal tự động nhập lệnh của tôi sau khi dán văn bản?


9

Điều này xảy ra cho dù tôi sử dụng ctrl + shift + v hoặc dán từ menu chuột phải.

Làm thế nào để tôi thực hiện hành vi này dừng lại?


Cần thêm lời giải thích để hiểu câu hỏi của bạn
SHW

Có thể ConEmu trên Windows thực hiện những gì bạn muốn - khi bạn cố gắng dán thứ gì đó có dòng mới, nó sẽ cảnh báo bạn trước khi tiếp tục. Đó là một liên lạc tốt đẹp. Có lẽ có một trình giả lập thiết bị đầu cuối Linux có tính năng này?
Brandin

4
Tôi cá là bạn sao chép dấu "\ n" (ký tự dòng mới, bạn sẽ không thấy trên văn bản của mình nhưng nó có mặt nếu bạn bị ngắt dòng) khi bạn sao chép văn bản của mình, điều đó sẽ mô phỏng nhấn phím ENTER, do đó sẽ thực thi chỉ huy.
herbert

Bản sao có thể có của điều này - unix.stackexchange.com/questions/202732/ nam Tôi không biết về "dán khung" được đề cập trong câu hỏi đó. Tôi thường sử dụng một trình soạn thảo văn bản kết hợp với thiết bị đầu cuối và sau đó sao chép / dán cẩn thận các phần mà tôi muốn vào thiết bị đầu cuối.
Brandin

Câu trả lời:


6

Đừng sao chép nhiều dòng văn bản, để dán. Tôi gần như có thể đảm bảo bạn chỉ cần sao chép phần cuối của dòng. Nếu bạn nhấp ba lần để sao chép dòng mã bạn đang dán, bạn sẽ nhận được dòng mới ở cuối dòng. Nếu bạn muốn chắc chắn, đó thực sự là vấn đề, sau đó sao chép toàn bộ dòng, ngoại trừ chữ cái / chữ số cuối cùng, và xem nếu dán cũng bao gồm một dòng mới.


Điều này chỉ xảy ra khi tôi sao chép nhiều dòng mã. Bây giờ tôi đã hiểu tại sao.
LostSoul

7

Văn bản bạn đang dán bao gồm một dòng mới. Khi bạn dán một dòng mới, trình bao chạy trong thiết bị đầu cuối sẽ thấy rằng khi nhấn Enter, vì vậy nó sẽ thực thi lệnh.

Hoạt động dán được thực hiện bởi trình giả lập thiết bị đầu cuối; nó chuyển văn bản đã dán vào ứng dụng đang chạy trong thiết bị đầu cuối, giống như cách nó chuyển văn bản được người dùng nhập vào. Xem Làm thế nào để đầu vào bàn phím và đầu ra văn bản hoạt động? để biết thêm thông tin về cách hoạt động của đầu vào. Ứng dụng (ở đây, trình bao) không có cách nào để phân biệt giữa tổ hợp phím và thao tác dán.

Nhiều trình giả lập thiết bị đầu cuối những ngày này hỗ trợ dán khung . Trong chế độ dán có dấu ngoặc, ứng dụng có thể phân biệt thao tác dán với tổ hợp phím. Dán khung chỉ hữu ích nếu ứng dụng thực hiện một cái gì đó khác với văn bản được dán, do đó, nó được kích hoạt bằng cách hỗ trợ các ứng dụng, nó không phải là thứ được cấu hình bởi người dùng trình giả lập thiết bị đầu cuối.

Zsh 5.1 (đã xuất hiện vài tuần trước, do đó chưa có sẵn trong hầu hết các bản phân phối) thêm hỗ trợ cho chế độ dán có dấu ngoặc. Khi bạn dán văn bản, nó chỉ được chèn vào dòng lệnh và bạn có thể chỉnh sửa nó trước khi nhấn Enterđể thực thi dòng lệnh.

Người dùng oh-my-zsh có thể sử dụng plugin dán an toàn ngay cả trong các phiên bản trước của zsh.

Một điều khác bạn có thể làm trong zsh là làm cho nó chèn vùng chọn dưới dạng một chuỗi, với trích dẫn (dưới dạng dấu gạch chéo ngược trước mỗi ký tự đặc biệt shell như khoảng trắng). Nhập `xsel`để có được lựa chọn chính (chọn chuột tự động) hoặc `xsel -b`để lấy nội dung trong bảng tạm (văn bản được sao chép bằng Ctrl+ C), sau đó nhấn Tab.

Nếu bạn có phiên bản zsh cũ hơn và bạn muốn chèn nội dung clipboard mà không trích dẫn, bạn có thể xác định chức năng chèn lựa chọn.

function zle_insert_x_selection {
  LBUFFER+=$(xsel ${NUMERIC+-b} -o </dev/null)
}
zle -N zle_insert_x_selection
bindkey '\e\C-v' zle_insert_x_selection

Với cái này trong bạn .zshrc, bạn có thể nhấn Ctrl+ Alt+ Vđể chèn lựa chọn chính hoặc Ctrl+ U Ctrl+ Alt+ Vđể chèn nội dung clipboard. Chúng được chèn trước con trỏ, không thay đổi trừ khi không có dòng mới. Xem Chia sẻ bảng tạm giữa bash và X11 để biết nội dung tương tự trong bash.


7

Nếu bạn đang sử dụng bash làm vỏ của mình, bạn có thể nhấn Ctrl-X Ctrl-Eđể hiển thị trình chỉnh sửa (được xác định bởi $ VISUAL hoặc $ EDITOR, ví dụ vihoặc có lẽ nano).

Sau đó, bạn có thể dán các lệnh của mình vào đó chính xác như bạn muốn nếu bạn đang chỉnh sửa một tệp. Chúng sẽ được thực thi nếu bạn lưu và thoát. Hoặc hủy bỏ nếu bạn bỏ mà không lưu.


Phương pháp này không hiệu quả với tôi.
LostSoul

3

Để thực hiện dán nhiều dòng vào dấu nhắc lệnh, hãy mở dấu ngoặc đơn hoặc dấu ngoặc kép trước khi dán.

$ echo 'paste
...
... '

Sau đó, bạn có thể nhấn return để lặp lại nó. Khi bạn mũi tên lên, tất cả các dòng bạn dán sẽ nằm trên một dòng có thể chỉnh sửa.

Điều này hoạt động miễn là không có một trích dẫn trong văn bản bạn dán.


1

Trong cửa sổ soạn thảo văn bản, sử dụng các phím tắt sau để sao chép văn bản mà không có \ n (nguồn cấp dữ liệu):

  • Shift+ Home, Ctrl+ Insert- sao chép một phần của dòng trước con trỏ.
  • Shift+ End, Ctrl+ Insert- sao chép một phần của dòng sau con trỏ.
  • Home, Shift+ End, Ctrl+ Insert- sao chép tất cả các dòng mà không có \ n.

Trong cửa sổ trình duyệt hoặc một thứ khác mà văn bản không thể chỉnh sửa được, sử dụng một trong hai kỹ thuật:

  • Trước tiên hãy sao chép vào trình soạn thảo văn bản (ưu tiên, vì sẽ cho bạn cơ hội chỉnh sửa các lệnh).
  • Chỉ chọn văn bản trên dòng (không mở rộng vùng chọn bên phải ngoài ký tự cuối cùng), sau đó Ctrl+ Insertvà dán vào cửa sổ đầu cuối.

Một lựa chọn đúng (không có \ n) trông như thế nào:

ls -al

Cách lựa chọn sai (với \ n) trông như thế nào:

ls -al
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.