Вставка от буфера обмена и автоматически переключения “: вставка набора”

Когда я вставляю вещи от буфера обмена, они обычно (всегда) мультивыравниваются, и в тех случаях (и только те случаи), я хотел бы :set paste чтобы быть инициированным, с тех пор иначе, переключение вкладок увеличится с каждой строкой (Вы все видели его!).

Хотя проблема с :set paste это, это не ведет себя хорошо с set smartindent, то, чтобы заставлять курсор перейти к началу новой строки вместо в корректном отступе. Таким образом, я хотел бы включить его для этого экземпляра только.

Я использую Mac, sshing к машине Debian с Vim, и таким образом вставляю в Режиме вставки с помощью cmd + против.

16
задан Peter Mortensen 24 May 2018 в 18:21
поделиться

3 ответа

Я не использую 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 .

7
ответ дан 30 November 2019 в 23:09
поделиться

Вы правы в том, что включать «вставить» следует только тогда, когда это необходимо. Это не только влияет на отступы. Вы можете прочитать обо всем, на что это влияет, в его документации . Связанная опция, которая очень полезна для упрощения использования 'paste' , - это 'pastetoggle' .

Если вы использовали X-пересылку и терминал, который может правильно передавать действия мыши, вы также можете воспользоваться опцией 'mouse' . С помощью : set mouse = a Vim получает информацию о том, что делает мышь, и поэтому не выполняет автоматического отступа при получении многострочной вставки посредством щелчка мышью средней кнопки.

Даже без возможности мыши X-forwarding может помочь, потому что Vim будет делать то же самое при вставке вручную из буфера обмена или регистров выбора ( "+ и " * соответственно) .

1
ответ дан 30 November 2019 в 23:09
поделиться

В моем .vimrc есть следующее:

inoremap <S-Insert> <ESC>:setl paste<CR>gi<C-R>+<ESC>:setl nopaste<CR>gi

gi - запуск режима вставки в той же позиции, где режим вставки был остановлен в последний раз. время в текущем буфере.

Обновление:

Джефроми опубликовал лучшее решение. Я немного переделал его

inoremap <S-Insert> <ESC>"+p`]a

Он вставляет текст из буфера обмена и помещает курсор сразу после него.

3
ответ дан 30 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: