Tại sao shift insert chỉ hoạt động hoàn toàn trong chế độ chèn?


13

Chỉ cần thử dán một số nội dung (trong Git Bash trên máy chủ CentOS) vào một tệp bằng vim.
Tôi vừa mở tệp và thử sử dụng shift+ insertvà tôi nhận thấy rằng nửa đầu (đại khái) bị cắt, nhưng nếu tôi đặt vim thành chế độ chèn và nhấn shift+ insertmọi thứ sẽ được dán hoàn hảo.
Chỉ tự hỏi tại sao điều này là?

Cảm ơn


Này, tôi cũng có hai ngón tay cái !!! : D
RonJohn

Câu trả lời:


24

Cả Shift+ Insertvà " dán " vào một thiết bị đầu cuối hoạt động theo cách tương tự - chúng mô phỏng các phím bấm.

Đây là một sự khác biệt quan trọng mà các thiết bị đầu cuối thường không thể thực hiện - bạn đang gõ hoặc dán? Lưu ý : một số thiết bị đầu cuối hỗ trợ chế độ " dán khung ", sau nhận xét của @ Josh Tôi thậm chí đã bắt gặp một plugin vim được dán trong ngoặc đơn trong xterm mà bạn có thể quan tâm.

Dữ liệu đã dán của bạn sẽ bị mất đến ký tự đầu tiên vào chế độ chèn. Bạn cũng có thể thấy rằng con trỏ của bạn đã di chuyển và các phần khác của tệp đã thay đổi (ví dụ: trường hợp thay đổi / đã bị xóa / vv) ...

Tóm lại, nếu bạn đang dán văn bản mà bạn muốn chèn vào tệp, trước tiên hãy nhập chế độ chèn.


Hãy thử sao chép văn bản sau và dán nó vào thiết bị đầu cuối đang chạy Vim (không ở chế độ chèn):

hello how are you

Kết quả giống như gõ cùng một chữ cái trên bàn phím của bạn:

kết quả của việc dán vào Vim

Trong trường hợp này, nó để bạn ở chế độ chèn ...

Bây giờ hãy thử thoát khỏi chế độ chèn Esc- và dán các mục sau

/are
n

Điều này thực hiện tìm kiếm cho "là":

kết quả của việc dán vào Vim

Bây giờ dán này:

:0
dG

Ồ không ... mọi thứ đã biến mất!

tất cả đi


Bạn cũng sẽ thấy rằng nếu bạn đã kích hoạt thụt lề, thì việc dán một khối mã vào vim (ở chế độ chèn) sẽ thụt lề quá nhiều - nó sẽ tự động thụt lề, và sau đó mã được dán của bạn sẽ bao gồm thụt lề.

def my_print(message):
    print(message)
    print('done...')

mã dán

Để khắc phục điều này, hãy sử dụng các lệnh :set paste:set nopaste

mã dán (chế độ dán)


4
"Đây là một sự khác biệt quan trọng mà các thiết bị đầu cuối không thể thực hiện - bạn đang gõ hoặc dán?" - điều này không hoàn toàn đúng, một số thiết bị đầu cuối và ứng dụng hỗ trợ "dán khung" trong đó một chuỗi đặc biệt được gửi trước và sau khi văn bản được dán.
Tro

@Josh: thật thú vị, cảm ơn ... bình luận của bạn thậm chí còn dẫn tôi đến một plugin vim
Attie

Tôi có phải là người duy nhất bị làm phiền bởi set nopaste? Tôi mong đợi unset paste.
Eric Duminil

@ ThisGuyHasTwoThumbs là một giải pháp thay thế, ít nhất là khi sử dụng Vim, bạn có thể muốn sử dụng thanh "+ghi để tương tác với bảng tạm hệ thống, vì nó sẽ có xu hướng hoạt động ổn định hơn. Nhược điểm là một số hệ thống hoặc bản dựng của Vim có thể sử dụng "*thay thế hoặc đơn giản là không có hỗ trợ bảng tạm hệ thống, nhưng theo kinh nghiệm của tôi, "+nó khá đáng tin cậy.
8bittree
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.