АКТУАЛИЗАЦИЯ: Vim 8 включва естествена поддръжка за режим на поставяне в скоби. Той е активиран по подразбиране. Вижте xterm-bracketed-paste
помощната тема на Vim. Потребителите вече не трябва да правят нищо, за да конфигурират 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). Когато получи екраниращата последователност, указваща началото на поставяне (ESC [ 200 ~), той активира режима на поставяне (задаване на поставяне) и превключва на режим на вмъкване, ако е необходимо ("i"). Когато получи съответстващия маркер за край на поставяне (ESC [ 201 ~), той деактивира режима на поставяне (pastetoggle) и остава в режим на вмъкване. Командите cmap
организират командния ред на Vim да игнорира екраниращите последователности и да приема поставения текст такъв, какъвто е.
Обърнете внимание, че това активира само режим на поставяне в скоби, когато стойността на $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