Вставить в режиме вставки? - PullRequest
355 голосов
/ 19 мая 2010

Возможно ли вставить в режиме вставки в Vim?

Ответы [ 10 ]

417 голосов
/ 19 мая 2010

В режиме вставки нажмите CTRL-R {register}

Примеры:

  • CTRL-R * вставит в содержимое буфера обмена
  • CTRL-R " (безымянный регистр) вставляет последнее удаление или янки.

Чтобы найти это в справке vim, наберите :h i_ctrl-r

219 голосов
/ 19 мая 2010

Если вы не хотите, чтобы Vim манипулировал форматированием во входящем вставленном тексте, вы также можете рассмотреть возможность использования: :set paste.Это предотвратит повторное добавление Vim вашего кода.Когда вставка завершится, :set nopaste вернется к нормальному поведению.

Также возможно переключить режим с помощью одной клавиши, добавив что-то вроде set pastetoggle=<F2> в ваш .vimrc.Подробнее о переключении авто-отступа здесь .

118 голосов
/ 19 мая 2010

Нет, не напрямую. Хотя вы можете быстро выйти из режима вставки для одной операции в обычном режиме с помощью Ctrl-O , а затем вставить ее, что закончится вводом вернуться в режим вставки.

Комбинация клавиш: Ctrl-O p

РЕДАКТИРОВАТЬ: Интересно. Похоже, что есть способ, как перечислили несколько других людей.

27 голосов
/ 16 марта 2014

В режиме вставки вы можете использовать Ctrl-R {register}, где регистр может быть:

  • + для буфера обмена,
  • * для буфера обмена X (последний выделенный текст в X),
  • " для безымянного регистра (последнее удаление или восстановление в Vim),
  • или ряд других (см. :h registers).

Ctrl-R {register} вставляет текст, как если бы он был напечатан.

Ctrl-R Ctrl-O {register} вставляет текст с оригинальным отступом.

Ctrl-R Ctrl-P {register} вставляет текст и автоматически добавляет отступ.

Ctrl-O можно использовать для запуска любой команды нормального режима перед возвратом в режим вставки, поэтому можно также использовать, например,
Ctrl-O "+p.

Для получения дополнительной информации см. Документацию с :h i_ctrl-r

26 голосов
/ 09 февраля 2013

Вы можете использовать это для вставки из буфера обмена с помощью Ctrl v :

set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>

И это для визуального выделения в буфер обмена с помощью Ctrl c :

vnoremap <C-c> "+y

Если вы также хотите использовать буфер обмена по умолчанию для классического vim yanking / pasteing ( y / p ) в обычном режиме, вот вариант конфигурации, который делает это:

set clipboard=unnamedplus

С помощью этих конфигов вы можете, например, сначала дерните в обычном режиме, а затем вставьте с помощью Ctrl v в режиме вставки. Также вы можете вставить текст из разных экземпляров vim и из разных приложений.

Другой вариант:

set clipboard=unnamed

Тогда вы сможете просто выбрать что-либо, перетаскивая мышью в вашей среде X, и затем вставить его в vim. Но (по какой-то причине) вы не сможете что-то дергать ( y ) в Vim и shift вставить потом куда-нибудь еще, что, вероятно, довольно ограничение.

Vim docs об этом: http://vim.wikia.com/wiki/Accessing_the_system_clipboard

Для вставки из пользовательских регистров вы можете следовать другим ответам :). Этот ответ в основном касается интеграции Vim с системным буфером обмена.


Обратите внимание, что для работы set clipboard=unnamedplus и set clipboard=unnamed необходимо использовать gvim или vimx (vim-X11): они скомпилированы с +xterm_clipboard. При желании вы можете поместить это в свой .bashrc псевдоним vim с помощью vimx:

if [ -e /usr/bin/vimx ]; then
    alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi

Вы можете узнать, есть ли у вашего vim +xterm_clipboard в информации, предоставленной vim --version.

19 голосов
/ 19 мая 2010

Если вы установите Vim для использования системного буфера обмена (:set clipboard=unnamed), то любой текст, который вы копируете в Vim, можно вставить с помощью Shift + Вставка . Shift + Вставка - просто комбинация клавиш для вставки во всей ОС ( Ctrl + Вставка - соответствующая «копия»).

18 голосов
/ 21 мая 2010

Вы также можете использовать среднюю кнопку мыши для вставки в режиме вставки (только для Linux).

5 голосов
/ 28 апреля 2015

Вы можете войти в режим -- INSERT (past) -- через:

  • Комбинация клавиш: y p

или

  • :set paste и вход в режим вставки (:set nopaste для отключения)

один раз в режиме -- INSERT (past) -- просто используйте функцию вставки вашей системы (например, Ctrl Shift v в Linux, Cmd v в Mac OS).

Эта стратегия очень полезна при использовании vim поверх ssh.

4 голосов
/ 19 мая 2010

Да. В Windows Ctrl + V и в Linux нажатие обеих кнопок мыши почти одновременно.

В Windows я думаю, что эта строка в моем _vimrc, вероятно, делает это:

source $VIMRUNTIME/mswin.vim

В Linux я не помню, как я это сделал. Похоже, я, вероятно, удалил какую-то строку из файла .vimrc по умолчанию.

0 голосов
/ 09 октября 2016

Вставить в режиме вставки

Пользовательская карта кажется подходящей в этом случае. Это то, что я использую для вставки выдернутых предметов в режиме вставки:

inoremap <Leader>p <ESC>pa

Мой Leader ключ здесь \; это означает, что нажатие \p в режиме вставки вставит ранее выдернутые элементы / строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...