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

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

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

Ответы [ 18 ]

4 голосов
/ 26 октября 2015

Не нашел простого ответа, поэтому выкладываю свой.

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

Решение

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

    :'<,'>w new.txt

    Затем нажмите Введите

3 голосов
/ 07 июня 2012

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

:'a,'bw /name/of/output/file.txt
1 голос
/ 03 ноября 2017
  1. Убедитесь, что у вас есть версия Vim с поддержкой буфера обмена
    • :echo has('clipboard') должен вернуться 1
    • если он возвращает 0 (например, OSX, по крайней мере, El Capitan, Mavericks и Mountain Lion - поставляется с версией Vim, без поддержки буфера обмена), вы должны установить версию Vim с поддержкой буфера обмена, например, через brew install vim ( не забудьте перезапустить ваш терминал (ы) после установки)
  2. Вход в визуальный режим ( V - многострочный, v - обычный или Ctrl v - блок-визуальный)
  3. Выберите строки, которые вы хотите скопировать
  4. "* y - для копирования выбранных
  5. "* p - вставить скопированный

P.S:

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

Пример: файл A и файл B - начать с файла 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
0 голосов
/ 19 апреля 2018

Войдите в командный режим и выполните

:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from

Например, чтобы извлечь строки 20-30 из filename в текущий открытый файл

:r! sed -n '20, 30p' filename
0 голосов
/ 04 мая 2016

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

:vnoremap <F4> :y<CR><C-W>Wr<Esc>p
0 голосов
/ 03 мая 2016

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

: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

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

0 голосов
/ 11 февраля 2015

Опция ниже работает большую часть времени, а также для вставки позже.

 "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*' будуткопируется после текущего курсора поз

...