Перейти к содержимому

Как копировать в vim

  • автор:

Как копировать, вырезать и вставлять в 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 позволяет выбирать текст и управлять им.

  1. Поместите курсор на линию, с которой вы хотите начать копирование или резку.
  2. Визуальный режим имеет три подтипа.
    • Нажмите v чтобы войти в визуальный режим.
    • Нажмите V чтобы войти в визуальный линейный режим, в котором текст выделяется построчно.
    • Нажмите Ctrl+v чтобы войти в режим визуального блока. В этом режиме текст выделяется прямоугольными блоками.

Переход в визуальный режим также отмечает начальную точку выбора.

  • Переместите курсор в конец текста, который вы хотите скопировать или вырезать. Вы можете использовать команду перемещения или клавиши со стрелками вверх, вниз, вправо и влево.
  • Нажмите y чтобы скопировать, или d чтобы вырезать выделение.
  • Переместите курсор в то место, куда вы хотите вставить содержимое.
  • Нажмите P чтобы вставить содержимое перед курсором, или p чтобы вставить его после курсора.
  • Выводы

    В этом руководстве мы показали вам, как копировать, вырезать и вставлять в Vim.

    Если вы новичок в Vim, посетите сайт Open Vim, где вы можете попрактиковаться в Vim с помощью интерактивного руководства.

    Не стесняйтесь оставлять комментарии, если у вас есть вопросы.

    Как скопировать в vim, чтобы вставить во внешний файл?

    Копированные данные в виме можно вставить только в данный редактор, ведь эти данные хранятся в буфере, если я правильно понимаю. Если я хочу вставить скопированное во внешний текстовый файл или в браузер, то ничего не получается. Объясните новичку как проделать этот трюк?

    • Вопрос задан более трёх лет назад
    • 4538 просмотров

    6 комментариев

    Оценить 6 комментариев

    sim3x

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

    serii81

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

    sim3x

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

    serii81

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

    sim3x

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

    serii81

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

    KolesnichenkoDS

    Даниил Колесниченко @KolesnichenkoDS

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

    Ответ написан более трёх лет назад
    Нравится 3 11 комментариев

    serii81

    Сергей Бурдужа @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 работает рандомно в зависимости от окружения и того, как собирали вим. Вставка средней кнопкой тоже не везде работает.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *