Я хочу иметь быстрый способ установки 'paste'
опции Vim , вставки некоторого текста и возврата к предыдущему значению 'paste'
.
Типичный вариант использования вставляет содержимое буфера обмена ОС буквально, независимо от любого перезаписи режима вставки, которая может быть активной, такой как автоматическое отступление, и без изменения состояния Vim. Другой вариант использования - позволить макросу ОС вводить нажатия клавиш в Vim и интерпретировать их как текст.
Это очевидно обобщает другие параметры - общая идея состоит в том, чтобы установить некоторые параметры, но только на время одной поездки в режиме вставки.
В основном я хочу связать последовательность клавиш (скажем _i
) с макросом, который делает это
:set paste
i…<Esc>
:set nopaste
где i…<Esc>
я имею в виду переключение в режим вставки (как с i
командой) и возобновление макроса при возврате в командный режим, за исключением того, что я хочу закончить все 'paste'
еще активным, если он был активен заранее. Как я могу это сделать?
Примечание. Содержимое буфера обмена ОС сопоставляется с "*
регистром . Когда это работает, 'paste'
опция не очень полезна. Сценарий мотивации для этого вопроса относится к тем случаям, когда условия "*
поддержки регистра не выполняются - Vim не скомпилирован с этой +xterm_clipboard
функцией или работает в терминале, таком как Screen, или поверх SSH, который изолирует его от окружающего X-сервера.
источник
+
или*
зарегистрировать?Ответы:
Дайте это попробовать:
Он сохраняет текущее состояние вставки в переменной inPaste и устанавливает вставку, если она еще не установлена. Затем он устанавливает autocmd для выхода из режима вставки, а затем переводит вас в режим вставки.
Когда вы выходите из режима вставки, он запускает autocmd, который сначала удаляет autocmd (поэтому он не запускается, когда вы выходите из режима вставки любым другим способом), и, наконец, устанавливает nopaste, если вы изначально не находились в режиме вставки.
Кроме того, если вы используете vim в терминале, вы можете взглянуть на vim-bracketed-paste , который использует функцию режима вставки в скобках, предоставляемую несколькими эмуляторами терминала, чтобы определить, вставляете ли вы и устанавливаете режим автоматически.
Редактировать: исправил скрипт
источник
_i
,paste
опция отключена, даже если она была включена раньше.'paste'
должен быть активным в течение максимально короткого времени. Он отключает множество функций (включая карты), потому что его единственная цель - избежать неверного толкования вставляемого текста. Поэтому я считаю, что приведенное требование не должно быть обязательным.Это, как говорится, на самом деле довольно легко вставить без необходимости установки
'paste'
. Если вы используете gvim или используете+xterm_clipboard
консоль vim, вы можете просто использовать ее"+p
для вставки из буфера обмена ОС.Проблема автоматического отступа при вставке действительно существует только в двух сценариях. Вставка содержимого регистра в режиме вставки (
<C-r>+
) или вставка с помощью среднего щелчка мышью.Вместо вставки содержимого регистра в режиме вставки вставка из регистра в обычном режиме позволит избежать проблемы переформатирования.
Если вы хотите вставить щелчок средней кнопкой мыши, затем используйте
'mouse'
опцию, чтобы Vim вместо терминала обрабатывал среднюю кнопку. Затем Vim вставит содержимое буквально вместо того, чтобы интерпретировать входящий текст как набранный.источник
'paste'
он действительно не активен заранее, но я не хочу думать об этом. Я часто работаю в Vim, который не имеет доступа к буферу обмена X или мыши, либо потому, что моя сборка Vim не имеет этойxterm_clipboard
функции, либо потому, что я работаю, например, в сеансе Screen, который в данный момент подключен к Х терминал.i
, я не спрашиваю, как его параметризовать), и восстановить значение параметра по возвращении из режима вставки."*p
или"+p
вставить из буфера обмена, но я не хочу использовать возможности вставки системы»), и тогда этот ответ не нужен. Или нет, и тогда я думаю, что этот ответ имеет место здесь.Лично я использую сочетание yoклавиш из превосходного Тима папы ВИМ-незатронутым плагин именно по этой причине. Из его документации:
Возможно, было бы излишне устанавливать плагин просто по вашему вопросу, но я считаю, что он также предоставляет множество других полезных сочетаний клавиш (более подробную информацию см. В README ).
источник
С Vim 8+ в Linux или Mac вы теперь можете просто использовать встроенную вставку терминала (например, среднюю кнопку мыши
ctrl+shift+V
в Gnomecmd+V
на Mac), если терминал поддерживает вставку в скобках. Не нажимайтеi
для режима вставки.Он вставит содержимое буфера обмена вашей ОС, сохраняя пробелы и вкладки без добавления автоматического отступа. Это эквивалентно старому
:set paste
,i
,ctrl+shift+V
,esc
,:set nopaste
метод.Вам даже не нужны функции
+clipboard
или+xterm_clipboard
vim, установленные больше. Эта функция называется «вставка в скобках». Для получения дополнительной информации см. Https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763источник