Чи можна вставити в режимі вставки у Vim?
Чи можна вставити в режимі вставки у Vim?
Відповіді:
Перебуваючи в режимі вставки, натисніть CTRL-R {register}
Приклади:
CTRL-R *
буде вставляти вміст буфера обміну CTRL-R "
(безіменний реєстр) вставляє останнє видалення або вибивання. Щоб знайти це у типі довідки vim :h i_ctrl-r
CTRL-R *
працює лише у GVIM або версіях, складених для взаємодії з x. Введіть vim --version
і шукайте +xterm_clipboard
. Якщо у вас цього немає, вам потрібна інша версія vim. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
+clipboard
, але якщо у вас є +xterm_clipboard
, то все одно маєте це мати. У деяких ОС xterm_clipboard
не застосовується.
*
реєстр можна вставити середнім клацанням миші, тоді як +
це традиційна копія / вставка. standard.freedesktop.org/clipboards-spec/clipboards-latest.txt
Якщо ви не хочете Vim калічити форматування надходить вставки тексту, ви можете також розглянути можливість використання: :set paste
. Це не дозволить Vim повторно вкладати ваш код. Після завершення вставки, :set nopaste
повернеться до нормальної поведінки.
Також можна переключити режим однією клавішею, додавши щось подібне set pastetoggle=<F2>
до вашого .vimrc. Більш детальну інформацію про перемикання автоматичного відступу тут .
:set nopaste
вимкне режим вставки
:set paste!
ймовірно, встановлена вставка дуже близька до вашої історії команд, тож ви можете просто натиснути ":", потім стрілку вгору та додати "!".
:set paste!
Спасибі :)
!
в кінці команди vim
вмикає та вимикає команду. Таким чином, вам не потрібно набирати текст, :set nopaste
ви можете прокрутити історію вгору і запустити ту ж команду ( :set paste!
) знову.
Ні безпосередньо. Все, що ви можете зробити, це швидко вийти з режиму вставки для однієї звичайної операції, Ctrl-Oа потім вставити звідти, що закінчиться, повернувши вас у режим вставки.
Комбінація клавіш: Ctrl-O p
EDIT: Цікаво. Здається, існує спосіб, як перелічено декілька інших людей.
esc + p
?
esc + p + i
і, безумовно, простіше набратиCTRL-R + "
CTRL-R "
. Наприклад, хоча налаштування vimrc може змінити це, вставлення чогось у новий рядок за допомогою CTRL-O p
змушує його відступити.
Перебуваючи в режимі вставки, ви можете використовувати 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
Ви можете використовувати це для вставки з буфера обміну за допомогою 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
.
:set paste
та візантійця <leader><leader> * y
навіть бажано віддалено? Щоб не звучати занадто віддано, мені щиро цікаво, яку філософію vim це відображає, чи якщо це просто історична біда.
inoremap <S-Insert> <F12><C-r>+<F12>
(я використовую F12 як пастозний режим). Дякую.
Якщо ви встановили Vim для використання системного буфера обміну ( :set clipboard=unnamed
), будь-який текст, який ви копіюєте у Vim, можна вставити за допомогою Shift+ Insert. Shift+ Insert- це просто комбінація клавіш із загальною ОС ( Ctrl+ Insert- відповідна "копія").
p
вставити текст у буфер обміну?
Shift + Insert
для вставки тексту, нам потрібно перейти в режим вставки.
Також можна використовувати середню кнопку миші для вставки в режимі вставки (лише для Linux).
Ви можете перейти в -- INSERT (past) --
режим через:
або
:set paste
та введення режиму вставки ( :set nopaste
для відключення)перебуваючи в -- INSERT (past) --
режимі, просто використовуйте функцію вставки вашої системи (наприклад, CtrlShiftvв Linux, Cmdvна Mac OS).
Ця стратегія є дуже корисною при використанні vim over ssh.
Так. У Windows Ctrl+ Vта Linux натискають обидві кнопки миші майже одночасно.
У Windows я думаю, що цей рядок у моєму _vimrc, ймовірно, робить це:
source $VIMRUNTIME/mswin.vim
У Linux я не пам'ятаю, як це робив. Схоже, я, ймовірно, видалив якийсь рядок із файлу .vimrc за замовчуванням.
В цьому випадку спеціальна карта видається доречною. Це те, що я використовую, щоб вставити витягнуті елементи в режимі вставки:
inoremap <Leader>p <ESC>pa
Мій Leader
ключ тут \
; це означає, що потрапляння \p
в режим вставки буде вставляти попередньо витягнуті елементи / рядки.