Когда я вставляю вещи от буфера обмена, они обычно (всегда) мультивыравниваются, и в тех случаях (и только те случаи), я хотел бы :set paste
чтобы быть инициированным, с тех пор иначе, переключение вкладок увеличится с каждой строкой (Вы все видели его!).
Хотя проблема с :set paste
это, это не ведет себя хорошо с set smartindent
, то, чтобы заставлять курсор перейти к началу новой строки вместо в корректном отступе. Таким образом, я хотел бы включить его для этого экземпляра только.
Я использую Mac, sshing к машине Debian с Vim, и таким образом вставляю в Режиме вставки с помощью cmd + против.
Я не использую Mac, но думаю, что у меня есть префикс прямо здесь:
должно означать cmd-v . Для режима вставки:
:imap <D-v> ^O:set paste<Enter>^R+^O:set nopaste<Enter>
или просто сделайте следующее:
:imap <D-V> ^O"+p
^ O и ^ R являются буквальными control-O и control-R, которые вы можете ввести с помощью ^ V ^ O (control-v control-o) и ^ V ^ R (control-v control-r). Control-O в режиме вставки позволяет выполнить одну команду, а затем вернуться в режим вставки; здесь вы можете использовать его для ввода из реестра буфера обмена.
У меня это сработало, когда я тестировал их сопоставление с другим ключом, так что все должно быть готово.
Нет необходимости ничего отображать, когда не в режиме вставки; вы можете просто использовать "+ p
.
Вы правы в том, что включать «вставить»
следует только тогда, когда это необходимо. Это не только влияет на отступы. Вы можете прочитать обо всем, на что это влияет, в его документации . Связанная опция, которая очень полезна для упрощения использования 'paste'
, - это 'pastetoggle' .
Если вы использовали X-пересылку и терминал, который может правильно передавать действия мыши, вы также можете воспользоваться опцией 'mouse' . С помощью : set mouse = a
Vim получает информацию о том, что делает мышь, и поэтому не выполняет автоматического отступа при получении многострочной вставки посредством щелчка мышью средней кнопки.
Даже без возможности мыши X-forwarding может помочь, потому что Vim будет делать то же самое при вставке вручную из буфера обмена или регистров выбора ( "+
и " *
соответственно) .
В моем .vimrc есть следующее:
inoremap <S-Insert> <ESC>:setl paste<CR>gi<C-R>+<ESC>:setl nopaste<CR>gi
gi
- запуск режима вставки в той же позиции, где режим вставки был остановлен в последний раз. время в текущем буфере.
Обновление:
Джефроми опубликовал лучшее решение. Я немного переделал его
inoremap <S-Insert> <ESC>"+p`]a
Он вставляет текст из буфера обмена и помещает курсор сразу после него.