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


Відповіді:


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.