Скопируйте и вставьте содержимое из одного файла в другой файл в vi

Я работаю с двумя файлами, мне нужно скопировать несколько строк из одного файла и вставить в другой файл. Я знаю, как копировать (yy) и вставлять (p) в один и тот же файл. Но это не работает для разных файлов, как это делается?

Кроме того, есть ли способ вырезать-вставить? Я пробовал поиск по Google, но большинство ресурсов говорят только о копировании.

Ответ 1

Поскольку вы уже знаете, как вырезать/выкладывать текст, вот несколько идей для вставки его обратно в другой файл:

  • Отредактируйте первый файл, извлекая нужный текст. Затем откройте второй файл из vi (:e /path/to/other/file) и вставьте его
  • Откройте оба файла вместе в разделенном окне и перемещайтесь между ними с помощью Ctrl + w, Up/Down либо:

    • vi -o /path/to/file1 /path/to/file2
    • Внутри первого файла Ctrl + w, s

Ответ 2

Если вы используете VIM в Windows, вы можете получить доступ к буферу (MS copy/paste), используя:

" * d d - отрежьте строку (или 3dd, чтобы разрезать 3 строки)

" * y y - скопируйте строку (или 3yy, чтобы скопировать 3 строки)

" * p - вставить строки в строке после курсора

" * p - вставить строки (строки) в строке перед курсором

Позволяет вставлять между отдельными окнами VIM или между приложениями VIM и ПК (блокнот, слово и т.д.).

Ответ 3

Используйте варианты d как dd для вырезания.

Чтобы написать ряд строк в другой файл, вы можете использовать:

:<n>,<m> w filename

Где <n> и <m> - это числа (или символы), которые обозначают диапазон строк.

Для использования буфера обмена рабочего стола ознакомьтесь с командами +g.

Ответ 4

Вы можете открыть другой файл и набрать :r file_to_be_copied_from. Или вы можете буферизировать. Или перейдите к первому файлу, перейдите к строке, которую вы хотите скопировать, введите "qY, перейдите в файл, который хотите вставить, и введите "qP.

" имя_буфера, копирует в буфер. Y yank и P. Надеюсь, что это поможет!

Ответ 5

Здесь один из способов сделать это;

  • Запустите vim и откройте файл1, который является файлом, над которым вы работаете.
  • : e file2, который вызовет файл2, файл, с которого вы хотите скопировать строки.
  • найдите строки, которые вы хотите скопировать, если это 3 строки, вы нажмете 3 y y
  • : b 1 это переключится на буфер 1, где file1 -
  • укажите, где вы хотите вставить строки, которые вы дернули, и нажмите p

Вы могли бы также просматривать оба файла, разделить экран, например. CTRL + w s

Что касается разрезания, d разрезает и помещает разрезанный материал в бункер yank. d d будет "вырезать" строку.

Ответ 6

Это все замечательные предложения, но если вы знаете расположение текста в другом файле, используйте sed с легкостью. :r! sed -n '1,10 p' < input_file.txt Это добавит 10 строк в уже открытый файл в текущую позицию курсора.

Ответ 7

При редактировании файла создайте метки, в которых вы хотите, чтобы начало и конец использовались

ma - устанавливает метку a

mb - устанавливает знак b

Затем, чтобы скопировать это в другой файл, просто используйте команду w:

:'a,'bw /name/of/output/file.txt

Ответ 8

Копирование текста между двумя буферами (== файлы), которые открываются в одном экземпляре VIM, не представляет проблемы: просто задержите в одном буфере с помощью y (предположим, что раньше вы отмечали область копирования в визуальном режиме), затем вставьте в другой буфер с помощью p. Также работает с разными вкладками, если они находятся в одном экземпляре VIM.

Как открыть два файла в одном экземпляре VIM, зависит от вашей системы:

  • В Win32 есть опция в контекстном меню, в которой "Редактировать" с помощью одного vim, если вы выберете два или более файла
  • Когда вы на консоли, вы можете достичь этого с помощью vim file1 file2
  • Если вы используете VIM в качестве редактора для другого инструмента, обязательно укажите параметр --remote-silent, чтобы все файлы открывались в одном экземпляре

Если вы открыли два файла в двух разных экземплярах VIM, вам нужно пойти с системным буфером обмена: в первом VIM вытащите текст в системный буфер обмена, используя "+y (еще раз отметьте область, которая будет в начале визуального режима), затем перейдите ко второму VIM и вставьте туда буфер обмена: "+p.

Ответ 9

В моем сценарии мне нужно было скопировать n число строк в середине, n неизвестно, из файла 1 в файл 2.

:'a,'bw /name/of/output/file.txt

Ответ 10

Эти переделки работают как прелесть для меня:

vmap <C-c> "*y     " Yank current selection into system clipboard
nmap <C-c> "*Y     " Yank current line into system clipboard (if nothing is selected)
nmap <C-v> "*p     " Paste from system clipboard

Итак, когда я нахожусь в визуальном режиме, я выбираю нужные строки и нажимаю Ctrl + c, а затем Ctrl + v, чтобы вставить текст в файл получателя. Вы также можете использовать "* y", но я думаю, что это трудно запомнить иногда.

Это также полезно для копирования текста из vim в буфер обмена.

Источник: http://vim.wikia.com/wiki/Copy_and_paste_between_sessions_using_a_temporary_file

Ответ 11

201705 обновление:

Я просто обнаружил, что если вы добавите следующую строку в свой файл vimrc,

установить буфер = неназванный

тогда VIM использует системный буфер обмена


Я только что нашел, что yank-путь не будет работать на том, как я копирую содержимое между различными окнами экземпляра VIM. (По крайней мере, это не работает на основе моих знаний VIM. Я не знаю, есть ли другой способ заставить его работать).

Явный способ работает только в том случае, когда в одном окне открывается несколько файлов в соответствии с моим тестом.

Если вы хотите сделать это, лучше использовать OS cut-copy-past, например ctrl + x, ctrl + c (под Windows).

Ответ 12

Не нашли здесь простого ответа, поэтому я отправляю свои сообщения.

Цель: сохранить часть одного файла в другой файл.

Решение

  • Выберите текст, который вы хотите сохранить:
    • Поместите курсор, где вы хотите начать выбор
    • Нажмите v, чтобы выбрать символы ИЛИ в верхнем регистре v, чтобы выбрать целые строки.
    • Переместите курсор в конец того, что вы хотите выбрать
  • Сохранить выделенный текст в новом файле. Введите : w Space и имя нового файла. На самом деле вы увидите

    :'<,'>w new.txt

    Затем нажмите Enter

Ответ 13

Пример: fileA и fileB - начать в файлеA в строке 25, скопировать 50 строк и вставить в файлB

fileA

Goto 25th line

25G

copy 50 lines into buffer v

"v50yy

Goto fileB

:e fileB

Goto line 10

10G    

paste contents of buffer v
"vp

Ответ 14

Этот параметр работает больше всего времени, а также для вставки позже.

 "xnyy
x - buffer name
n - number of line to Yank - optional

Линии, затянутые, будут сохранены в буфере 'x'. Его можно использовать в любом месте редактирования.

Чтобы вставить строки в другой файл,

:e filename&location

Пример: Введите следующую команду в текущем правлении

:e /u/test/Test2.sh
and paste using "xP
P - before cursor
p - after cursor

Полная операция

открыть файл 1:

vi Test1.sh

a10yy

-Yanked 10 lines

- теперь откройте второй файл из текущего редактирования

*:e /u/test/Test2.sh*

- переместите курсор на строку, в которую вы должны вставить

*"ap*

- Строки из буфера '*a*' будут скопированы после текущего курсора pos

Ответ 15

Другим способом может быть открытие двух файлов в двух разделенных буферах и использование следующего "фрагмента" после визуального выбора интересующих строк.

:vnoremap <F4> :y<CR><C-W>Wr<Esc>p

Ответ 16

  • Убедитесь, что версия Vim скомпилирована с поддержкой буфера обмена
    • :echo has('clipboard') должен возвращать 1
    • если он возвращает 0 (например, OSX, по крайней мере, El Capitan, Mavericks и Mountain Lion - поставляется с версией Vim, без поддержки буфера обмена), вам нужно установить версию Vim с поддержкой буфера обмена, скажем, через brew install vim ( не забудьте перезагрузить терминал после установки).
  • Введите визуальный режим (V - многострочный, V - обычный или Ctrl V - блок-визуальный)
  • Выберите строки, которые вы хотите скопировать.
  • " * y - для копирования выбранных
  • " * p - вставить скопированные

P.S:

  • вы можете заменить шаги 2-5 инструкциями ответа JayG, если вам нужно скопировать и вставить одну строку
  • Чтобы облегчить выбор строк, вы можете добавить set mouse+=a к вашему .vimrc - это позволит вам выбирать строки в vim с помощью мыши, не выбирая посторонние элементы (например, номера строк и т.д.) УВЕДОМЛЕНИЕ: это будет блокировать возможность копирования выбранного пользователем текста в системный буфер обмена из Vim

Ответ 17

Если вы хотите скопировать часть файла и вставить этот контент в середине другого файла, вы можете сделать это.

:linenumber,linenumber write newfile

Пример:

:2,34 write temp1

или

:'mark, 'mark write newfile

Пример:

:'a,'b write temp1

Теперь строки копируются в другой файл. Если вы хотите удалить эти строки после копирования, вы можете сделать

:linenumber1,linenumber2 d

Или

:'mark1,'mark2 d

Теперь перейдите в другой файл. Затем держите курсор на строке, в которую вы хотите вставить.

Тип

:r!cat temp1

Теперь содержимое временного файла вставляется здесь. Вы можете удалить временный файл из самой командной строки, после вставки содержимого.

:!rm temp1

Это поможет, если вы хотите скопировать и вставить несколько раз.