ОБНОВЛЕНИЕ: Vim 8 включает встроенную поддержку режима вставки в скобках .Это включено по умолчанию.См. Раздел справки Vim xterm-bracketed-paste
.Пользователям больше не нужно ничего делать, чтобы настроить Vim для поддержки этого.
Начиная с Mac OS X Lion 10.7, Terminal поддерживает «режим вставки в скобках», который позволяет эмулятору терминала сообщать программе, подключенной к tty, когдапользователь вставляет текст, чтобы программа не интерпретировала его как команды редактирования.Программы, поддерживающие его, отправляют терминалу escape-последовательность для включения этого режима, в котором терминал окружает вставленный текст парой escape-последовательностей, которые идентифицируют начало и конец.
Чтобы включить это в Vim, добавьте следующеекод в вашем файле ~ / .vimrc:
if &term =~ "xterm.*"
let &t_ti = &t_ti . "\e[?2004h"
let &t_te = "\e[?2004l" . &t_te
function! XTermPasteBegin(ret)
set pastetoggle=<Esc>[201~
set paste
return a:ret
endfunction
map <expr> <Esc>[200~ XTermPasteBegin("i")
imap <expr> <Esc>[200~ XTermPasteBegin("")
vmap <expr> <Esc>[200~ XTermPasteBegin("c")
cmap <Esc>[200~ <nop>
cmap <Esc>[201~ <nop>
endif
Это делает так, что когда Vim переключает терминал на / с альтернативного экрана † (t_ti, t_te), он включает / отключает режим вставки в скобках (ESC [? 2004 ч, ESC [? 2004 л).Когда он получает escape-последовательность, указывающую начало вставки (ESC [200 ~), он включает режим вставки (set paste) и переключается в режим вставки, если необходимо («i»).Когда он получает соответствующий маркер конца вставки (ESC [201 ~), он отключает режим вставки (pastetoggle) и остается в режиме вставки.Команды cmap
позволяют командной строке Vim игнорировать escape-последовательности и принимать вставленный текст «как есть».
Обратите внимание, что этот режим включает режим вставки в скобках только в том случае, если значение $ TERM начинается с «xterm…»;если вы устанавливаете $ TERM на что-то другое, вы можете пересмотреть этот тест, чтобы включить в него значение $ TERM.Или вы можете вообще пропустить тест, поскольку он не является строго необходимым - просто старайтесь не делать что-то, что может быть несовместимо с каким-либо другим типом терминала.
В терминале это работает со всемиразличные команды вставки, а также перетаскивание.
† Терминал имеет основной экран и «альтернативный» экран.Каждый экран имеет свое собственное содержимое и состояние.Текст на альтернативном экране не прокручивается вверх в журнал прокрутки.Обычно он используется программами, которые контролируют весь экран и поэтому называются «полноэкранными» программами.Сюда входят, например, vim, emacs, less и top.