Trong một vim đầu cuối, việc dán dữ liệu clipboard thường làm rối mã thụt lề. Tôi chỉ biết nếu tôi sử dụng :set paste
thụt lề không bị hỏng. Mặc dù, sau khi dán dữ liệu, tôi có nên làm :set nopaste
lại không? Nếu tôi không, vấn đề gì xảy ra?
Trong một vim đầu cuối, việc dán dữ liệu clipboard thường làm rối mã thụt lề. Tôi chỉ biết nếu tôi sử dụng :set paste
thụt lề không bị hỏng. Mặc dù, sau khi dán dữ liệu, tôi có nên làm :set nopaste
lại không? Nếu tôi không, vấn đề gì xảy ra?
Câu trả lời:
Như những người khác đã viết, bạn không muốn để lại 'dán'. Tôi chỉ muốn chỉ ra rằng với một trình giả lập thiết bị đầu cuối tốt và được biên dịch và cấu hình đúng vim
, bạn không cần phải thay đổi 'dán'. Bạn cần một trình giả lập thiết bị đầu cuối tốt như xterm hoặc Gnome Terminal, vim có tính năng X11 đi kèm và tùy chọn 'chuột' được đặt thành 'a'. Sau đó vim
sẽ "biết" khi bạn dán chuột và sẽ thiết lập và bỏ cài đặt tùy chọn 'dán' một cách hiệu quả cho bạn.
Một cách để có được vim
tính năng X11 là chạy gvim
với -v
tùy chọn hoặc tạo bí danh,
alias vim='gvim -v'
Sau đó đặt
set mouse=a
trong ~ / .vimrc của bạn.
Copy
sẽ có màu xám hoặc hoàn toàn không hiển thị trừ khi một số văn bản đã được chọn. Làm thế nào bạn chọn văn bản sẽ được sao chép?
Bài đăng này có câu trả lời yêu thích của tôi, https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode
Về cơ bản nếu bạn bắt đầu ở chế độ Chèn và sử dụng Ctrl + Shift + V hoặc nhấp chuột phải bằng chuột, Vim phát hiện ra rằng điều này đến từ một thiết bị đầu cuối và tự động thiết lập chế độ dán, sau đó bỏ cài đặt nó một lần, vì vậy bạn không bị mất phím (không thể hoạt động ở chế độ dán vì nó ghi dữ liệu thô) và bạn trở lại trạng thái "lành mạnh" khi hoàn thành.
Đối với chỉ vim (đặt .vimrc của bạn)
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
function! XTermPasteBegin()
set pastetoggle=<Esc>[201~
set paste
return ""
endfunction
Nếu bạn sử dụng vim trong Tmux (vẫn đi vào .vimrc)
function! WrapForTmux(s)
if !exists('$TMUX')
return a:s
endif
let tmux_start = "\<Esc>Ptmux;"
let tmux_end = "\<Esc>\\"
return tmux_start . substitute(a:s, "\<Esc>", "\<Esc>\<Esc>", 'g') . tmux_end
endfunction
let &t_SI .= WrapForTmux("\<Esc>[?2004h")
let &t_EI .= WrapForTmux("\<Esc>[?2004l")
function! XTermPasteBegin()
set pastetoggle=<Esc>[201~
set paste
return ""
endfunction
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
let &t_SI .= "\<Esc>[?xxxxx"
dòng đang phát hiện phím tắt dán bàn phím? Điều này có làm việc cho mac cũng được cung cấp các phím tắt khác nhau?
Nếu một cái gì đó tồn tại, nó phải có ý nghĩa của nó. Bạn nên xem kỹ tài liệu vim rất hữu ích.
:help 'paste'
:help 'pastetoggle'
Khi bạn đọc, bạn có thể muốn điều này:
" Toggle paste mode
" (prefer this over 'pastetoggle' to echo current state)
nmap <leader>p :setlocal paste! paste?<cr>
Tôi hy vọng bạn thấy bài viết này hữu ích :)
IIRC khi bạn dán vào vim, về cơ bản nó nghĩ rằng bạn đã tự gõ tất cả các ký tự đó. Vì vậy, nếu tự động thụt lề được bật, nó sẽ thụt lề cho bạn, nhưng văn bản được dán thường chứa thụt lề để thực sự thụt lề bị "làm rối". Chuyển sang chế độ dán sẽ tắt các thứ như tự động thụt lề.
Nếu bạn thích tự động thụt lề như bạn, bạn nên chuyển nó trở lại thành nopaste sau khi bạn dán xong. Hãy thử nó và lưu ý cách bạn phải thực hiện tất cả các vết lõm bằng tay trong chế độ dán.