Скопируйте и вставьте содержимое из одного файла в другой файл в vi - PullRequest
228 голосов
/ 07 января 2011

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

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

Ответы [ 18 ]

193 голосов
/ 07 января 2011

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

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

    • vi -o /path/to/file1 /path/to/file2
    • Из первого файла, Ctrl + ш , с
46 голосов
/ 07 января 2011

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

"* d d - вырезать линию (или 3DD, чтобы отрезать 3 строки)

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

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

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

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

36 голосов
/ 07 января 2011

Используйте варианты d, например dd, чтобы вырезать.

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

:<n>,<m> w filename

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

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

25 голосов
/ 07 января 2011

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

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

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

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

23 голосов
/ 07 января 2011

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

" buffer_name, скопируйте в буфер,Y - это янки, а P ставится.Надеюсь, это поможет!

15 голосов
/ 10 марта 2012

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

7 голосов
/ 12 октября 2011

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

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

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

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

:'a,'bw /name/of/output/file.txt
5 голосов
/ 03 декабря 2015

Эти переназначения работают для меня как очарование:

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, чтобы вставить текст в файл получателя. Вы также можете использовать "* у, но я думаю, что это иногда трудно вспомнить.

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

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

5 голосов
/ 10 августа 2011

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

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

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

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


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

Путь «янки» работает только в том случае, если в соответствии с моим тестом несколько файлов открываются в одном окне.

Если вы хотите это сделать, вам лучше использовать способ вырезания-копирования ОС, например ctrl + x, ctrl + c (под Windows).

4 голосов
/ 07 января 2011

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

Способ открытия двух файлов в одном экземпляре VIM зависит от вашей системы:

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

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

...