Вставити у режимі вставки?


Відповіді:


465

Перебуваючи в режимі вставки, натисніть CTRL-R {register}

Приклади:

  • CTRL-R * буде вставляти вміст буфера обміну
  • CTRL-R " (безіменний реєстр) вставляє останнє видалення або вибивання.

Щоб знайти це у типі довідки vim :h i_ctrl-r


13
Так, я нещодавно дізнався про CTRL-R, і це надзвичайно корисно.
Дан

16
CTRL-R *працює лише у GVIM або версіях, складених для взаємодії з x. Введіть vim --versionі шукайте +xterm_clipboard. Якщо у вас цього немає, вам потрібна інша версія vim. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
Conrad.Dean

10
Насправді вам потрібно лише +clipboard, але якщо у вас є +xterm_clipboard, то все одно маєте це мати. У деяких ОС xterm_clipboardне застосовується.
Ендрю Маршалл

1
Гм, я використовую C-r + для вставки з системного буфера обміну в Windows (використовуючи портативний GVim)? Ніколи не чув * реєструватись.
kitsu.eb

6
@ kitsu.eb У системі X *реєстр можна вставити середнім клацанням миші, тоді як +це традиційна копія / вставка. standard.freedesktop.org/clipboards-spec/clipboards-latest.txt
квітня 1313

235

Якщо ви не хочете Vim калічити форматування надходить вставки тексту, ви можете також розглянути можливість використання: :set paste. Це не дозволить Vim повторно вкладати ваш код. Після завершення вставки, :set nopasteповернеться до нормальної поведінки.

Також можна переключити режим однією клавішею, додавши щось подібне set pastetoggle=<F2>до вашого .vimrc. Більш детальну інформацію про перемикання автоматичного відступу тут .


47
:set nopasteвимкне режим вставки
Джеймс Снайдер

24
@JamesSnyder Кращий спосіб - це, :set paste!ймовірно, встановлена ​​вставка дуже близька до вашої історії команд, тож ви можете просто натиснути ":", потім стрілку вгору та додати "!".
Рафаель Барбоса

6
Просто цікаво - що краще чи відрізняється від :set paste! Спасибі :)
Майкл Дюрант

33
команда !в кінці команди vimвмикає та вимикає команду. Таким чином, вам не потрібно набирати текст, :set nopasteви можете прокрутити історію вгору і запустити ту ж команду ( :set paste!) знову.
에이 바

3
@blockloop Ви повинні ввімкнути це під час вставки та вимкнути його відразу після цього.
NieDzejkob

125

Ні безпосередньо. Все, що ви можете зробити, це швидко вийти з режиму вставки для однієї звичайної операції, Ctrl-Oа потім вставити звідти, що закінчиться, повернувши вас у режим вставки.

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

EDIT: Цікаво. Здається, існує спосіб, як перелічено декілька інших людей.


2
ctrl-r "не працює для мене (os x, vi в терміналі). ctrl-o p зробив.
Bob

4
Це найшвидший і найпростіший спосіб запам'ятати.
вітрянка

Про що esc + p?
sitilge

2
Однозначно швидше esc + p + iі, безумовно, простіше набратиCTRL-R + "
lucidbrot

Власне, це часом поводиться інакше, ніж CTRL-R ". Наприклад, хоча налаштування vimrc може змінити це, вставлення чогось у новий рядок за допомогою CTRL-O pзмушує його відступити.
noname

30

Перебуваючи в режимі вставки, ви можете використовувати 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


4
Ця відповідь видається найбільш вичерпною. Це дуже зрозуміло і, на мій погляд, найкорисніше. Він відповідає на питання ОП, а потім деякі, стисло.
Девин

26

Ви можете використовувати це для вставки з буфера обміну за допомогою Ctrlv:

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

І це для того, щоб виграти візуальний вибір у буфер обміну Ctrlc:

vnoremap <C-c> "+y

Якщо ви також хочете використовувати буфер обміну за замовчуванням для класичного vim yanking / pasting ( y/ p) у звичайному режимі, ось параметр config, який робить це:

set clipboard=unnamedplus

За допомогою цієї конфігурації ви можете, наприклад, спершу вимкнути в звичайному режимі, а потім вставити Ctrlvв режим вставки. Також ви можете вставити текст з різних примірників vim та різних програм.

Ще один варіант:

set clipboard=unnamed

Тоді ви зможете просто вибрати щось, перетягнувши мишкою у ваше середовище X, і потім вставити його в vim. Але (чомусь) ви не зможете витягнути щось ( y) у Vim, і shiftinsertце десь в іншому місці, що, ймовірно, досить обмежує.

Документи Vim про це: 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.


7
Це саме те, що я шукав. Тут також є єдиною розумною відповіддю. Ось як очікують, що справи спрацюють. Хтось знає, чому поведінка за замовчуванням :set pasteта візантійця <leader><leader> * yнавіть бажано віддалено? Щоб не звучати занадто віддано, мені щиро цікаво, яку філософію vim це відображає, чи якщо це просто історична біда.
Есхіл

Ваша відповідь дозволила мені також використовувати Shift + Insert в Gvim також inoremap <S-Insert> <F12><C-r>+<F12>(я використовую F12 як пастозний режим). Дякую.
sromero

20

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


1
Не знав про S-Insert :)
BandGap

Чи працює це в зворотному напрямку? Буде pвставити текст у буфер обміну?
Заз

Перш ніж використовувати Shift + Insertдля вставки тексту, нам потрібно перейти в режим вставки.
jdhao

18

Також можна використовувати середню кнопку миші для вставки в режимі вставки (лише для Linux).


106
Про що ця миша говориш?
Джим Мітченер

19
Про які ці нелінукс ОС ви говорите?
Бруно Броноський

-1: Ця відповідь сильно залежить від обладнання та терміналу. Зрештою, кнопки миші надсилають до терміналу попередньо встановлені рядки, а термінал розбирає цей рядок для виконання певної команди. Проблема в тому, що це може сильно відрізнятися, залежно від налаштувань терміналу. Щоб покращити цю відповідь, будь ласка, надайте нам принаймні версію терміналу, ОС та версію та модель миші, яку ви використовуєте.
мельвінким

Вставлення середньої кнопки миші досить поширене для всіх додатків Linux, не обмежуючись терміналом або версіями ОС.
lcltj

Не працює в Arch Linux + urxvt. Він додає лише новий рядок.
зигімантус

5

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

  • Комбінація клавіатури: y p

або

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

перебуваючи в -- INSERT (past) --режимі, просто використовуйте функцію вставки вашої системи (наприклад, CtrlShiftvв Linux, Cmdvна Mac OS).

Ця стратегія є дуже корисною при використанні vim over ssh.


4

Так. У Windows Ctrl+ Vта Linux натискають обидві кнопки миші майже одночасно.

У Windows я думаю, що цей рядок у моєму _vimrc, ймовірно, робить це:

source $VIMRUNTIME/mswin.vim

У Linux я не пам'ятаю, як це робив. Схоже, я, ймовірно, видалив якийсь рядок із файлу .vimrc за замовчуванням.


Чи можу я подати заявку більше одного разу ?? Я хочу вставити лише тоді, коли я зайшов з іншого вікна - тому я завжди на миші. Блискуче!
Дейв

У Linux ви вставляєте натисканням середньої кнопки миші. Якщо у вас є дві кнопки миші та натисніть і ліву, і праву кнопку, тоді для цього потрібно «Emulate3Buttons» або подібне.
Cougar

0

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

В цьому випадку спеціальна карта видається доречною. Це те, що я використовую, щоб вставити витягнуті елементи в режимі вставки:

inoremap <Leader>p <ESC>pa

Мій Leaderключ тут \; це означає, що потрапляння \pв режим вставки буде вставляти попередньо витягнуті елементи / рядки.


0

Просто додайте карту:

" ~/.vimrc
inoremap <c-p> <c-r>*

перезапустити vim, і при натисканні Crtl+pу режимі вставки скопійований текст буде вставлений

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.