2016-07-31 16 views
0

Я пытаюсь настроить ярлык пасты в моем .vimrc.Вставить ярлык для Vim

До сих пор я пытался переназначения Shift+Insert:

noremap <S-Insert> <ESC>:paste<CR><S-Insert><ESC>:nopaste<CR> 

... который не работал. Я также попытался сопоставить системный клипборд:

noremap ´v <ESC>:set paste<CR>"*p<ESC>:set nopaste<CR> 

... но он тоже не работает. Обратный ход ` - это мой личный ключ для нескольких пользовательских сопоставлений. У меня есть немецкая клавиатура, где эта вещь легко доступна.

Что я делаю неправильно? Я думал, что "*p предназначен для вставки в буфер обмена системы ... и я ожидал, что <S-Insert> будет работать как команда.

Любая помощь была бы действительно оценена.

+0

Вы пробовали 'noremap \' v "* p'? – melpomene

+0

Выполняет ли' '* p' само по себе, вне какого-либо сопоставления? – melpomene

+0

Да, это действительно работает ... но сопоставления нет:/ Есть ли другой способ, которым я могу сопоставить поведение пасты с vim? Включая ': set paste' и': set nopaste' до и после вставки? (в противном случае декларация перепутана) – daniel451

ответ

3

Если Vim не построен с буфером обмена поддержки (:echo has('clipboard') возвращает 0), получить более Vim.

Если Vim является построен с буфером обмена поддержки (:echo has('clipboard') возвращает 1), используйте "+p или "*p, для которого не нужно set paste.

Если "+{command} и "*{command} слишком много для вас, вы можете синхронизировать безымянный регистр с * регистра с:

set clipboard^=unnamed 

или с * совмещении с:

set clipboard^=unnamedplus 

или с обоими регистры с:

set clipboard^=unnamed,unnamedplus 

и просто используйте p.

Если вы все еще хотите пользовательское отображение:

nnoremap <key> "*p 
nnoremap <key> "*P 
xnoremap <key> "*p 
xnoremap <key> "*P 
+0

Почему 'xnoremap', а не' vnoremap'? – melpomene

+0

Поскольку 'vmap' предназначен для визуальных * и * режимов выбора, в то время как' xmap' предназначен только для визуального режима. – romainl

+0

Это действительно странно. 'has ('clipboard')' возвращает '0', однако, если я набираю' '* p', то он работает. Только версия с картами не вставляет (просто переключается на: установка пасты, а затем остановки). – daniel451

0

По какой-то причине <S-Insert> и "*p, а также "+p всегда работать вручную, но никогда не работать в любом картографирования для меня - несмотря на то, что мой «оригинальный» У vim не было поддержки буфера обмена: :echo has('clipboard') возвращает 0.

Я только что проверил gVim и имел ту же проблему, хотя у этого gVim была поддержка буфера обмена: :echo has('clipboard') возвращает 1.

Однако, я нашел обходной путь, чтобы получить желаемое поведение:

nnoremap `v <ESC>:set paste<CR><ESC>:r!xclip -o<CR>:set nopaste<CR><ESC> 

Вовсе есть только установить xclip, утилита буфера обмена, который присутствует в Manjaro, Arch, Debian & Ubuntu вселенной.Я предполагаю, что он также доступен для многих других дистрибутивов, но я только что проверил это с названными.

Эта команда устанавливает vim в режим вставки (деактивирует автоматическое отступы и прочее, так что некорректный формат кода не используется при вставке), считывает буфер буфера обмена с помощью соответствующей команды xclip и сбрасывается до нормального поведения отступов с :set nopaste.