ОБНОВЛЕНИЕ: Vim 8 включает встроенную поддержку режима вставки в скобки. По умолчанию он включен. См. Раздел справки Vim xterm-bracketed-paste
. Пользователям больше не нужно ничего делать, чтобы настроить Vim для поддержки этого.
Начиная с Mac OS X Lion 10.7, Терминал поддерживает «режим вставки в скобках», который позволяет эмулятору терминала сообщать программе, подключенной к tty, когда пользователь вставляет текст, чтобы программа не интерпретировала его как команды редактирования. Программы, которые его поддерживают, отправляют терминалу управляющую последовательность, чтобы включить этот режим, в котором терминал окружает вставленный текст парой управляющих последовательностей, которые идентифицируют начало и конец.
Чтобы включить это в 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 h, ESC [? 2004 l). Когда он получает escape-последовательность, указывающую на начало вставки (ESC [200 ~), он включает режим вставки (установка вставки) и при необходимости переключается в режим вставки («i»). Когда он получает соответствующий маркер конца вставки (ESC [201 ~), он отключает режим вставки (pastetoggle) и остается в режиме вставки. Команды cmap
позволяют командной строке Vim игнорировать escape-последовательности и принимать вставленный текст как есть.
Обратите внимание, что это включает режим вставки в скобках, только если значение $ TERM начинается с «xterm…»; если вы устанавливаете $ TERM на другое значение, вы можете пересмотреть этот тест, включив в него ваше значение $ TERM. Или вы можете вообще пропустить тест, так как он не является строго необходимым - он просто пытается быть осторожным, чтобы не сделать что-то, что может быть несовместимо с каким-либо другим типом терминала.
В Терминале это работает со всеми различными командами Вставки, а также с перетаскиванием.
† Терминал имеет главный экран и «альтернативный» экран. Каждый экран имеет собственное содержимое и состояние. Текст на альтернативном экране не прокручивается вверх в журнал прокрутки. Обычно он используется программами, которые берут на себя управление всем экраном и поэтому называются «полноэкранными» программами. Это включает, например, vim, emacs, less и top.
person
Chris Page
schedule
13.08.2011
:set paste
. Паста в скобках доступна по умолчанию в vim 8. Но она будет включена только в том случае, если vim считает, что вы используете терминал, совместимый с Xterm. Есть несколько способов включить его, см. этот ответ на vi.stackexchange. - person Paul Rougieux   schedule 14.05.2020