Як скопіювати вміст вставити в редактор vi


165

Я намагався використовувати Ctrl+ Vдля вставки вмісту в документ редактора vi, але Ctrl+ Vне інтерпретується як вставка.


16
Лише зауважте, головна причина використання Vi - це те, що Vim не встановлений. Якщо у вас встановлений Vim, напевно, варто скористатися цим. Немає переваги для Vi до того ж, що він уже присутній на кожній установці Unix. Найкращий спосіб дізнатися Vim, на мою думку, - це відкрити свій емулятор терміналу (не зсередини Vim) і набрати vimtutorЦе допоможе вам швидко пройти до місця, де це можливо для вас приблизно за 45 хвилин.
Бен Мордехай

1
+1 @BenMordecai - Я вже був знайомий з vi (з давніх часів), включаючи його зручну можливість підрозділу, але мені потрібно було оновити. Чудовий маленький репетиторство. Пройшов крізь нього, як вітерець. Дякую.
Cbhihe

Відповіді:


192

Спочатку переконайтесь, що ви перебуваєте в режимі редагування (натисніть i). Потім ви можете вставити Ctrl+ Shift+ V, якщо ви перебуваєте в емуляторі термінала, як gnome-terminal(або виберіть "Вставити" в меню правою кнопкою миші).

Ви також можете ввести :set pastevim перед вставкою, щоб вимкнути автоматичне відступ тощо. Потім :set nopasteви вставите вміст.

Також перевірте це запитання на сайті stackoverflow.com для отримання додаткової інформації.

Якщо ви хочете скопіювати / вставити рядки в vim(на відміну від вставки вмісту буфера обміну), вам потрібно перевірити команду yank . Ось шпаргалка, яка може допомогти.


1
Я думаю, якщо у вас включений курсор миші, ви не можете вставити за допомогою Ctrl + Shift + V.
Елвін Вонг

14
Просто зауважте, що Iв регістрі є регістр. Нижній регістр i- це звичайний спосіб входу в режим вставки. Капітал Iприводить курсор до початку рядка, а потім переходить у режим вставки.
Бен Мордехай

64

Vi (і Vim) працює дуже інакше порівняно зі звичайним текстовим редактором, таким як Gedit. Він також має досить круту криву навчання. Якщо ви хочете вивчити деякі основні команди, почніть з цього інтерактивного підручника .

Однак, щоб відповісти на ваше запитання. До вмісту системного буфера обміну можна отримати доступ через регістр плюс. Отже, щоб вставити щось із системного буфера обміну, ви можете у звичайному режимі натиснути: "+p(Не одночасно, а по черзі).


3
Це те, чого я досі не знав. Також +1 для посилання на ще один дивовижний підручник з vim.
Аттіла О.

19
Якщо говорити про криві навчання для редакторів, то існує "класичні криві навчання для деяких поширених редакторів", blog.thilelli.net/public/store/attached/curves.jpg .
hlovdal

У терміналі GNOME скорочення для копіювання та вставки є Ctrl-Shift-C та Ctrl-Shift-V відповідно.
Flimm

1
Я намагався натиснути по черзі <kbd> "</kbd>, <kbd> + </kbd> і <kbd> p </kbd>, також <kbd>" </kbd> і <kbd> p < / kbd> і нічого не сталося. Що я зробив неправильно? Я viне використовуюvim
user907860

1
Це правильна відповідь. Використовуючи напр. Ctrl-Shift-v буде працювати лише з найпростішим вмістом (розриви рядків і відступи можуть дійсно помилитися, якщо ви знаходитесь в терміналі, і ви забули використовувати set :paste).
rsenna

29
  1. Якщо ви хочете скопіювати вміст вставити в один файл , використовуйте yankта paste.

  2. Якщо ви хочете скопіювати вміст вставити через термінали , відкрийте перший файл, перетягуючи потрібний текст, а потім відкрийте другий файл у vim (наприклад :tabnew /path/to/second/file) та натисніть, pщоб вставити його.

  3. Якщо ви хочете скопіювати вміст вставити з vim у зовнішню програму , вам потрібно отримати доступ до буфера обміну системи. Я припускаю, що ви використовуєте Ubuntu. У версії GUI vim завжди є підтримка буфера обміну, однак, якщо ви хочете використовувати Vim з терміналу, вам доведеться перевірити підтримку X11-буфера обміну.

    На консолі введіть:

    $ vim --version | grep xterm
    

    Якщо ви знайдете -xterm_clipboard , у вас є два варіанти:

    1) Скомпілюйте vim самостійно, увімкнувши прапор xterm_clipboard

    2) Видаліть vim, встановіть натомість gvim (vim-gtk або vim-gnome). Ви можете дотримуватися не-gui vim, зателефонувавши vim з терміналу, як і раніше. Цього разу під час перевірки слід знайти + xterm_clipborad .

    Тепер, коли ви забираєте текст у реєстрі + у своєму редакторі vim (наприклад, "+ yy), він також копіюється в системний буфер обміну, який ви можете отримати зі своєї зовнішньої програми, наприклад, gedit editor, використовуючи Ctrl+ V.

  4. Якщо ви хочете скопіювати вміст пасти із зовнішньої програми у vim , спочатку скопіюйте текст у системний буфер обміну через Ctrl+ C, а потім у режимі вставки редактора vim , натисніть середню кнопку миші (зазвичай колесо) або натисніть Ctrl+ Shift+, Vщоб вставити.

    Це 4 основні умови копіювання та вставки, пов'язані з vim. Я сподіваюся, що це допомагає.


У чому сенс: tabnew / шлях / до / секунди / файл? Ви можете домогтися того самого, що перебирає / копіює / вирізає в першому файлі, відкриваючи другий файл, використовуючи: vi / шлях / до / другий / файл та вставляючи в нього (p / P). Принаймні в моєму випадку ... Або це тому, що в мене включена функція vim + xterm_clipboard? Або є більше на tabnew, ніж просто це?
Cbhihe

1
У Ubuntu vim-gtkє xterm_clipboardпідтримка, а на Fedora xvim- її.
icc97

18

Я завжди використовую Shift+, Insertколи хочу вставити текст у термінал, працює у всіх термінальних програмах.

(Це також причина, чому я ніколи не отримую ноутбук, де не можна натискати, Insertне натискаючи вторинну клавішу)


2
Vi/ Vim! = термінал;)
0xC0000022L

1
гаразд добре, але це все одно працює :)
Магнус Джонсон

+1 за це .. Що ви використовуєте для виконання , скажімо Ctrl+A, Ctrl+Cтеж?
Arup Rakshit

Якщо я використовую термінал всередині DE, я зазвичай просто вибираю текст мишкою і копіюю за допомогою Ctrl + Shift + C.
Магнус Джонсон

Shift + Insert також працює в gvim. (Я запускаю Ubuntu 13.10, якщо це має значення.)
exortso

10

Використовуйте центральну кнопку миші, щоб вставити текст, який ви виділили в іншому місці.

Це корисно, коли у вас немає доступу до буфера обміну системи (наприклад, у віддаленому сеансі SSH).

Повинно бути в режимі редагування / вставки для Vim.


6

Після введення vi натисніть, iщоб перейти в режим вставки, клацніть правою кнопкою миші на терміналі, натисніть кнопку вставити.


Я думав, що це малі регістри i. Що робить великі регістри I?
Flimm

@Flimm, що вже було пояснено в коментарі Бен Мордехай на іншу відповідь.
sierrasdetandil

Я відредагував відповідь на малі регістри i. Верхній регістр Iпереміщує курсор на початок рядка перед входом у режим вставки, який тут не потрібен.
Flimm

5

Детальні вказівки щодо копіювання / вставки рядків тексту in vi з використанням yankтаput

(використовуйте наступне в командному режимі vi)

Копіювати (YANK)

Щоб скопіювати один рядок у vi:

  • У командному режимі перемістіть курсор на рядок, який потрібно скопіювати та введіть yyабо наберітьY

Щоб скопіювати 2 рядки в vi:

  • У командному режимі перемістіть курсор до першого рядка, який потрібно скопіювати та введіть 2yyчи наберіть2Y

(також можна скопіювати будь-яку кількість рядків)

Щоб скопіювати всі рядки з поточного місця до кінця файлу:

  • У командному режимі перемістіть курсор до першого рядка, який потрібно скопіювати та набрати yG

Щоб скопіювати весь текст з поточного місця до кінця поточного слова:

  • У командному режимі перемістіть курсор на місце, де текст потрібно скопіювати та набрати yw

Щоб скопіювати весь текст із поточного місця до кінця рядка:

  • У командному режимі перемістіть курсор на місце, де текст потрібно скопіювати та набрати y$

Вставити (PUT)

Щоб вставити текст у буфер обміну - після розташування курсору:

  • У командному режимі введіть p

Щоб вставити текст у буфер обміну - перед розташуванням курсору:

  • У командному режимі введіть P

1

У мене виникла проблема, оскільки моя установка Vim не підтримувала буфер обміну :

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Я встановив vim-gnome (який підтримує буфер обміну) і знову перевірив:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Тепер я можу скопіювати та вставити відповідно "+ y та" + p.


Це вирішило мою проблему!
astrojuanlu

1

З Vim 8+ на Linux або Mac тепер ви можете просто використовувати вбудовану пасту ОС ( ctrl+shift+Vна Linux, cmd+Vна Mac). Не натискайте iдля режиму вставки.

Він буде вставляти вміст буфера обміну вашої ОС, зберігаючи пробіли та вкладки, не додаючи автозавад. Це еквівалентно тому , що старий :set paste, i, ctrl+shift+V, esc, :set nopasteметод.

Вам більше навіть не потрібні встановлені функції +clipboardабо +xterm_clipboardvim. Ця функція називається "скобованою пастою". Докладніше див. Https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763


Це відповідь, яку я шукаю. Оскільки Vim не є типовим для gnu / linux дистрибутивів, його потрібно встановити навіть в ubuntu. Крім того, кнопки Vi вниз не працюють на ubuntu і не виділяють.
нереальне ім'я


0

Я просто хотів зазначити, що, використовуючи Vim через Git Bash у Windows, ви можете просто використовувати pабо клацнути мишею по центру, не перебуваючи у режимі вставки. Використовуючи Vim через PuTTY , ви можете просто клацнути правою кнопкою миші. І підсвічування робить копіювання.

Я зазначив це, бо потрапив сюди, не бачачи, що це SE для Ubuntu.

Інші корисні команди:

  • yy(# рядків) - yank (копія)
  • dd(# рядків) - видалити
  • p - вставити рядок нижче поточного рядка
  • Shift+ p- вставити рядок над поточним рядком
  • u - скасувати
  • r - переробити
  • i - режим вставки
  • v - візуальний режим

Це не спрацювало для мене на Windows Git Bash. Яку консоль ви використовуєте, м'ятний або вікно cmd?
wisbucky

Я вважаю, це було м'ятним.
Тайлер Крістіан

0

Ви можете використовувати Ctrl+ Shift+, Vщоб вставити термінальну версію vim, але для версії GUI на зразок vim Neovim-Qt, вставлення тексту з системного буфера обміну Ctrl+ Shift+ Vпросто не працюватиме. Ви маєте доступ до буфера обміну "+або "*до редактора vim.

Якщо додати нове .vimrcвведення ключів , просто скопіюйте та скопіюйте команди:

" paste from system clipboard, align indentation with surroundings
noremap <Leader>p "*]p:set nopaste<CR>
" copy a sentence into system clipboard
noremap <Leader>y "+y)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.