Как копировать, вырезать и вставлять в Vim / Vi
При работе с текстовыми файлами копирование, вырезание и вставка текста — одна из наиболее часто выполняемых задач.
Vim или его предшественник Vi предустановлен на macOS и почти во всех дистрибутивах Linux. Знание основ Vim полезно в ситуации, когда ваш любимый редактор недоступен.
В этой статье показано, как копировать, вырезать и вставлять в редакторе Vim / Vi.
Копирование, вырезание и вставка в нормальном режиме
Когда вы запускаете редактор Vim, вы находитесь в обычном режиме. В этом режиме вы можете запускать команды Vim и перемещаться по файлу.
Чтобы вернуться в нормальный режим из любого другого режима, просто нажмите Esc .
В Vim есть собственная терминология для копирования, вырезания и вставки. Копирование называется yank ( y ), вырезание называется delete ( d ), а вставка называется put ( p ).
Копирование (Янкинг)
Чтобы скопировать текст, поместите курсор в желаемое место и нажмите клавишу y а затем команду перемещения. Ниже приведены некоторые полезные команды восстановления:
- yy — Янкнуть (скопировать) текущую строку, включая символ новой строки.
- 3yy — 3yy (копирование) трех строк, начиная с строки, в которой находится курсор.
- y$ — копировать (копировать) все от курсора до конца строки.
- y^ — Янкинг (копирование) всего от курсора до начала строки.
- yw — Янкнуть (копировать) до начала следующего слова.
- yiw — yiw (скопировать) текущее слово.
- y% — Янкнуть (копировать) на соответствующий символ. По умолчанию поддерживаются пары () , <> и [] . Полезно для копирования текста между совпадающими скобками.
Резка (Удаление)
В обычном режиме d — клавиша для вырезания (удаления) текста. Переместите курсор в желаемое положение и нажмите клавишу d , а затем команду перемещения. Вот несколько полезных команд для удаления:
- dd — Удалить (вырезать) текущую строку, включая символ новой строки.
- 3dd — Удалить (вырезать) три строки, начиная с линии, в которой находится курсор,
- d$ — Удалить (вырезать) все от курсора до конца строки.
Команды движения, применяемые для восстановления, также действительны для удаления. Например, dw удаляет до начала следующего слова, а d^ удаляет все от курсора до начала строки.
Склеивание (Вставка)
Чтобы поместить извлеченный или удаленный текст, переместите курсор в желаемое место и нажмите p чтобы вставить (вставить) текст после курсора, или P чтобы поместить (вставить) перед курсором.
Копирование, вырезание и вставка в визуальном режиме
Визуальный режим Vim позволяет выбирать текст и управлять им.
- Поместите курсор на линию, с которой вы хотите начать копирование или резку.
- Визуальный режим имеет три подтипа.
- Нажмите v чтобы войти в визуальный режим.
- Нажмите V чтобы войти в визуальный линейный режим, в котором текст выделяется построчно.
- Нажмите Ctrl+v чтобы войти в режим визуального блока. В этом режиме текст выделяется прямоугольными блоками.
Переход в визуальный режим также отмечает начальную точку выбора.
Выводы
В этом руководстве мы показали вам, как копировать, вырезать и вставлять в Vim.
Если вы новичок в Vim, посетите сайт Open Vim, где вы можете попрактиковаться в Vim с помощью интерактивного руководства.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Как скопировать в vim, чтобы вставить во внешний файл?
Копированные данные в виме можно вставить только в данный редактор, ведь эти данные хранятся в буфере, если я правильно понимаю. Если я хочу вставить скопированное во внешний текстовый файл или в браузер, то ничего не получается. Объясните новичку как проделать этот трюк?
- Вопрос задан более трёх лет назад
- 4538 просмотров
6 комментариев
Оценить 6 комментариев

Много текста?

Сергей Бурдужа @serii81 Автор вопроса
sim3x: Пару абзацев, а в чем разница?

Сергей Бурдужа: проще скопировать через меню (по правой клавише мыши) прямо из консоли

Сергей Бурдужа @serii81 Автор вопроса
sim3x: А без использования мышки, никак?

Сергей Бурдужа: Сходу приходит на ум sed из bash

Сергей Бурдужа @serii81 Автор вопроса
Все равно спасибо.
Решения вопроса 1

Даниил Колесниченко @KolesnichenkoDS
Если перед командой копирования нажать двойную кавычку, то следующей клавишей выбирается регистр, в который текст копируется. Регистр + — это как раз системный буфер обмена, в который нужно копировать, чтобы вставить в другой программе. Так что копирование текущей строки в системный буфер обмена производится следующей командой: «+yy , копирование параграфа — «+yip , ну и так далее.
Ответ написан более трёх лет назад
Нравится 3 11 комментариев

Сергей Бурдужа @serii81 Автор вопроса
Круто, а я об этом не знал, хотя подразумевал, что должна быть какая-нибудь возможность это сделать. Спасибо))
Как копировать текст в системный буфер обмена в vim?
У меня в vim не работает копирование и вставка из системного буфера, как это исправить?
$ vim --version VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Oct 01 2021 01:51:08) Included patches: 1-2434 Extra patches: 8.2.3402, 8.2.3403, 8.2.3409, 8.2.3428 Modified by [email protected] Compiled by [email protected] Huge version without GUI. Features included (+) or not (-): +acl -farsi +mouse_sgr +tag_binary +arabic +file_in_path -mouse_sysmouse -tag_old_static +autocmd +find_in_path +mouse_urxvt -tag_any_white +autochdir +float +mouse_xterm -tcl -autoservername +folding +multi_byte +termguicolors -balloon_eval -footer +multi_lang +terminal +balloon_eval_term +fork() -mzscheme +terminfo -browse +gettext +netbeans_intg +termresponse ++builtin_terms -hangul_input +num64 +textobjects +byte_offset +iconv +packages +textprop +channel +insert_expand +path_extra +timers +cindent +ipv6 -perl +title -clientserver +job +persistent_undo -toolbar -clipboard +jumplist +popupwin +user_commands +cmdline_compl +keymap +postscript +vartabs +cmdline_hist +lambda +printer +vertsplit +cmdline_info +langmap +profile +virtualedit +comments +libcall -python +visual +conceal +linebreak -python3 +visualextra +cryptv +lispindent +quickfix +viminfo +cscope +listcmds +reltime +vreplace +cursorbind +localmap +rightleft +wildignore +cursorshape -lua -ruby +wildmenu +dialog_con +menu +scrollbind +windows +diff +mksession +signs +writebackup +digraphs +modify_fname +smartindent -X11 -dnd +mouse -sound -xfontset -ebcdic -mouseshape +spell -xim +emacs_tags +mouse_dec +startuptime -xpm +eval +mouse_gpm +statusline -xsmp +ex_extra -mouse_jsbterm -sun_workshop -xterm_clipboard +extra_search +mouse_netterm +syntax -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" defaults file: "$VIMRUNTIME/defaults.vim" fall-back for $VIM: "/usr/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -Wdate-time -g -O2 -ffile-prefix-map=/build/vim-DtwDbo/vim-8.2.2434=. -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: gcc -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lm -ltinfo -lselinux -lacl -lattr -lgpm -ldl $ cat .vimrc call plug#begin() Plug 'tpope/vim-sensible' call plug#end()
EDIT: Как писал Stanislav Volodarskiy, у меня vim собран без опции clipboard . В интернете нашлась информация:
поставь gvim (на арче) или vim-gtk (на дебиане)
Использую LMDE5 (x64), после установки vim-gtk заработало, но системный буфер не «, а «+ . Буфер « работает странно, в интернете написано, что они разные Так же есть способ копирования в буфер с помощью выделения фрагмента текста в Visual Mode, после чего вводится команда:
:w !xclip -selected clipboard
Вставлять текст из буфера можно с помощью ctrl + shift + V
Как сопировать текст из vim в буфер обмена
Как скопировать в Vim текст и вставить во внешнюю программу? Предлагаемое в сети решение «*y у меня не работает.

KOMMUNIST90
18.02.22 12:06:46 MSK

Предлагаемое в сети решение «*y у меня не работает.
vim --version | grep 'clipboard`
mord0d ★★★★★
( 18.02.22 12:13:14 MSK )
Ответ на: комментарий от mord0d 18.02.22 12:13:14 MSK
vim —version | grep ‘clipboard’
anonymous
( 18.02.22 12:17:23 MSK )
Ответ на: комментарий от mord0d 18.02.22 12:13:14 MSK

Спасибо. Где именно это напечатать и что это даст?
KOMMUNIST90
( 18.02.22 12:25:29 MSK ) автор топика
Ответ на: комментарий от KOMMUNIST90 18.02.22 12:25:29 MSK
На плакате из цветной бумаги 3х4 метра, разумеется, где же ещё
Twissel ★★★★★
( 18.02.22 12:28:59 MSK )
Ответ на: комментарий от mord0d 18.02.22 12:13:14 MSK
Тут более-менее очевидно, что там -clipboard .
habamax ★★★
( 18.02.22 12:30:50 MSK )
Ответ на: комментарий от Twissel 18.02.22 12:28:59 MSK

А вы в темы с вопросами точно заходите чтобы помочь людям в них разобраться и решить их, или для чего-то другого?
KOMMUNIST90
( 18.02.22 12:31:31 MSK ) автор топика
Ответ на: комментарий от mord0d 18.02.22 12:13:14 MSK

При вводе команды в терминале выводит:
»’ -clipboard +keymap +printer +vertsplit +emacs_tags +mouse_gpm -sun_workshop -xterm_clipboard »’
KOMMUNIST90
( 18.02.22 12:35:58 MSK ) автор топика
Ответ на: комментарий от habamax 18.02.22 12:30:50 MSK

Да, понял. Что по этому поводу нужно сделать?
KOMMUNIST90
( 18.02.22 12:38:48 MSK ) автор топика

мышом выдели текст (если оно вдруг в визуальный режим уйдет, то надо выделять зажимая shift), а во внешней программе жмякни по средней кнопке мыши (если таковой нет, то на правую и левую кнопки одновременно). Это работает не только для vim, а вообще везде
gnunixon ★★★
( 18.02.22 12:39:27 MSK )
Ответ на: комментарий от gnunixon 18.02.22 12:39:27 MSK

Спасибо огромное! Помогло.
KOMMUNIST90
( 18.02.22 12:53:41 MSK ) автор топика
Ответ на: комментарий от gnunixon 18.02.22 12:39:27 MSK

Это работает не только для vim, а вообще везде
В вяленый завезли иксовый буфер обмена?
ya-betmen ★★★★★
( 18.02.22 13:02:28 MSK )
Ответ на: комментарий от KOMMUNIST90 18.02.22 12:38:48 MSK
Использовать средства терминала для копирования/вставки (со всеми вытекающими) или поставить(скомпилировать) вим с поддержкой clipboard и использовать регистры + или * с соответствующими командами ( «+y , «+p и т.д.)
Обычно в дистрибутивах есть вим с поддержкой GTK, где есть +clipboard (vim-gtk, vim-gui или еще как пакеты называются).
habamax ★★★
( 18.02.22 13:05:03 MSK )
Ответ на: комментарий от KOMMUNIST90 18.02.22 12:35:58 MSK

Установи вместо vim какой-нибудь vim-gtk, или хотя бы vim-athena, они собраны с поддержкой Xorg (безальтернативно), и clipboard там 100% работает.
mord0d ★★★★★
( 18.02.22 13:50:01 MSK )
Ответ на: комментарий от KOMMUNIST90 18.02.22 12:31:31 MSK
А вы точно сумели самостоятельно поставить Linux, но не умеете выполнять команды в терминале?
Судя по вопросу, на который я отвечал, то нет.
Twissel ★★★★★
( 18.02.22 15:31:17 MSK )
Ответ на: комментарий от Twissel 18.02.22 15:31:17 MSK
зачем ты живешь вобще?
anonymous
( 18.02.22 15:33:21 MSK )
Ответ на: комментарий от anonymous 18.02.22 15:33:21 MSK
Спроси это у Владимира.
А вообще, чтобы троллить анонимусов вроде тебя, пока ЛОР еще жив)
Twissel ★★★★★
( 18.02.22 15:34:45 MSK )
Ответ на: комментарий от anonymous 18.02.22 15:33:21 MSK
Твиссель живет ради меня, а я ради него … Мы ДРУЗЬЯ …
anonymous
( 18.02.22 20:17:54 MSK )
Ответ на: комментарий от Twissel 18.02.22 15:34:45 MSK
Мы с тобой красивого Шульмана насилуем мы с тобой вдвоем друзья куда ты, туда и я
anonymous
( 18.02.22 20:19:24 MSK )

LINUX-ORG-RU ★★★★★
( 18.02.22 20:19:44 MSK )
Ответ на: комментарий от LINUX-ORG-RU 18.02.22 20:19:44 MSK
Здравствуйте, друг … Кавычки лишние в вашем ПРИМЕРЕ …
anonymous
( 18.02.22 20:21:15 MSK )
Ответ на: комментарий от KOMMUNIST90 18.02.22 12:31:31 MSK
Не вступайте в перепалку с глупым регистрантом. Просто добавьте в игнор-лист.
anonymous
( 19.02.22 08:24:48 MSK )
Ответ на: комментарий от ya-betmen 18.02.22 13:02:28 MSK
полгода как переехал на вейланд. даже не подозревал, что с этим у кого-то проблемы ибо все работает из коробки.
ТС, выделение мышкой с шифтом — это не про вим, а про терминал. эта фича практически во всех терминалах представлена. чтобы копировать силами вима, нужно чтобы он был собран c его поддержкой (обычно оно включено в большинстве дистрибутивов).
у меня в конфиге есть вот такие строчки:
" Next commands make vim use X11 clipboard set clipboard=unnamed " x clipboard vnoremap y "*y noremap p "*p " system clipboard vnoremap Y "+y noremap P "+p
y — копирует в буфер вима, Y — в иксовый. кстати ровно этим сейчас и воспользовался, когда копипастил эту часть конфига в браузер из вима в терминале. p — вставить из буфера вима, P — вставить из иксового буфера.
ergo ★★
( 19.02.22 16:28:49 MSK )
Последнее исправление: ergo 19.02.22 16:30:02 MSK (всего исправлений: 1)
Ответ на: комментарий от ergo 19.02.22 16:28:49 MSK

полгода как переехал на вейланд. даже не подозревал, что с этим у кого-то проблемы ибо все работает из коробки.
В смысле они как в иксах сделали отдельный вяленый буфер или там какой-то хак для системного буфера?
ya-betmen ★★★★★
( 19.02.22 16:35:56 MSK )
Ответ на: комментарий от gnunixon 18.02.22 12:39:27 MSK

Круто, не знал. Все мучался как в вим, открытый по ssh копипастить. Спасибо. 🙂
frunobulax ★★
( 19.02.22 19:30:31 MSK )
Ответ на: комментарий от ya-betmen 19.02.22 16:35:56 MSK
В wayland это тоже разные «буферы». Primary selection protocol где-то года 3-4 назад стабильно реализовали.
i586 ★★★★★
( 20.02.22 17:17:30 MSK )
Ctrl+Insert/Shift+Insert. Иногда только это и работает. Опция clipboard работает рандомно в зависимости от окружения и того, как собирали вим. Вставка средней кнопкой тоже не везде работает.