У цій публікації є моя улюблена відповідь, https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode
В основному, якщо ви запускаєтесь в режимі "Вставка" і використовуєте клавішу Ctrl + Shift + V або клацніть правою кнопкою миші мишкою, Vim виявляє, що це прийшов з терміналу, і автоматично встановлює режим вставки, а потім знімає його після завершення, щоб не втратити перезаписані ключі (яка не може працювати в режимі вставки, тому що вона записує необроблені дані), і ви повернетесь до "нормального" стану, коли це буде зроблено.
Для просто vim (помістити у свій .vimrc)
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
Якщо ви використовуєте vim під Tmux (все ще надходить у .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()