Vim как скопировать из одного файла в другой
Я работаю с двумя файлами, и мне нужно скопировать несколько строк из одного файла и вставить в другой файл. Я знаю, как копировать (yy) и вставлять (p) в один и тот же файл. Но это не работает для разных файлов. Как это сделать?
Кроме того, есть ли способ вырезать-вставить? Я пробовал погуглить, но большинство ресурсов говорят только о копипасте.
Поскольку вы уже знаете, как вырезать / восстанавливать текст, вот несколько идей, как вставить его обратно в другой файл:
-
Отредактируйте первый файл, выдернув нужный текст. Затем откройте второй файл из vi ( :e /path/to/other/file ) и вставьте его
Откройте оба файла вместе в разделенном окне и перемещайтесь между ними, используя Ctrl + w , Up / Down либо на :
- vi -o /path/to/file1 /path/to/file2
- Из первого файла, Ctrl + w , s
Если вы используете Vim в Windows, вы можете получить доступ к буферу обмена (копирование / вставка MS), используя:
" * d d - вырезать линию (или 3dd, чтобы вырезать три строки)
" * y y - скопировать строку (или 3yy, чтобы скопировать три строки)
" * p - вставить строку (строки) в строку после курсора
" * P - вставить строку (строки) в строку перед курсором
Позволяет выполнять вставку между отдельными окнами Vim или между приложениями Vim и ПК (Блокнот, Microsoft Word и т. д.).
Используйте варианты d , например dd , чтобы вырезать.
Чтобы записать диапазон строк в другой файл, вы можете использовать:
Где <n> и <m> - числа (или символы), обозначающие диапазон строк.
Чтобы использовать буфер обмена рабочего стола, обратите внимание на команды +g .
Вы можете открыть другой файл и ввести :r file_to_be_copied_from . Или вы можете буферизовать. Или перейдите к первому файлу, перейдите к строке, которую вы хотите скопировать, введите "qY , перейдите к файлу, который вы хотите вставить, и введите "qP .
" имя_буфера, копирует в буфер. Y - это рывок, а P - вставлено. Надеюсь, это поможет!
Вот один из способов сделать это;
- Запустите Vim и откройте файл file1, над которым вы работаете.
- : e file2, который вызовет file2, файл, из которого вы хотите скопировать строки.
- найдите строки, которые хотите скопировать. Если это три строки, вы нажимаете 3 y y
- : b 1 это переключится на буфер 1, где file1 -
- выясните, куда вы хотите вставить строки, которые вы выдернули, и нажмите p
Вы также можете просмотреть оба файла. Разделите экран, например, Ctrl + w s .
Что касается вырезания, d обрезает и помещает вырезанный материал в буфер восстановления. d d «разрежет» линию.
Все это отличные предложения, но если вы знаете расположение текста в другом файле, используйте sed с легкостью. :r! sed -n '1,10 p' < input_file.txt Это вставит 10 строк в уже открытый файл в текущую позицию курсора.
Обновление от 05.05.2017:
Я только что обнаружил, что если вы добавите следующую строку в свой файл vimrc,
установить буфер обмена = безымянный
Тогда Vim использует системный буфер обмена.
Я только что обнаружил, что такой способ не работает, когда я копирую содержимое между разными окнами экземпляра Vim. (По крайней мере, это не работает, исходя из моих знаний о Vim. Я не знаю, есть ли другой способ заставить его работать).
В соответствии с моим тестом способ восстановления работает только в том случае, если в одном окне открываются несколько файлов.
Если вы хотите сделать это, вам лучше использовать способ OS с вырезанным копированием, например Ctrl + x , Ctrl + c (в Windows).
При редактировании файла сделайте отметки там, где вы хотите, чтобы начало и конец были использованы
ma - устанавливает отметку a
mb - устанавливает знак b
Затем, чтобы скопировать это в другой файл, просто используйте команду w :
Эти переназначения работают для меня как шарм:
Итак, когда я нахожусь в визуальном режиме, я выбираю нужные строки и нажимаю Ctrl + c , а затем Ctrl + v , чтобы вставить текст в файл-приемник. Вы также можете использовать "* y", но я думаю, что иногда это трудно вспомнить.
Это также полезно для копирования текста из Vim в буфер обмена.
Цель : сохранить часть одного файла в другой.
Решение :
- Выделите текст, который хотите сохранить:
- Поместите курсор в то место, где вы хотите начать выделение.
- Нажмите v , чтобы выбрать символы, ИЛИ прописные буквы V , чтобы выбрать целые строки
- Переместите курсор в конец того, что вы хотите выделить.
Сохраните выделенный текст в новый файл. Введите : w Space и имя нового файла. На самом деле вы увидите
Затем нажмите Enter
Копирование текста между двумя буферами (== файлами), открытыми в одном экземпляре Vim, не проблема:
Просто скопируйте один буфер с помощью y (при условии, что вы ранее отметили область для копирования в визуальном режиме), а затем вставьте в другой буфер с помощью p . Он также работает с разными вкладками, если они находятся в одном экземпляре Vim.
Как открыть два файла в одном экземпляре Vim зависит от вашей системы:
- В Win32 в контекстном меню есть пункт Редактировать с помощью одного vim , если вы выбираете два или более файлов.
- Когда вы находитесь на консоли, вы можете добиться этого с помощью vim file1 file2
- Если вы используете Vim в качестве редактора для другого инструмента, обязательно укажите параметр --remote-silent , чтобы все файлы открывались в одном экземпляре.
Если вы открыли два файла в двух разных экземплярах Vim, тогда вам придется использовать системный буфер обмена: в первом экземпляре Vim скопируйте текст в системный буфер обмена с помощью "+y (снова отметьте область, которая будет передергивал в визуальном режиме), затем перейдите ко второму Vim и вставьте туда буфер обмена: "+p .
В моем сценарии мне нужно было скопировать n строк посередине, n неизвестно, из файла 1 в файл 2.
Пример: fileA и fileB - начать в fileA со строки 25, скопировать 50 строк и вставить в файлB
Опция ниже работает большую часть времени, а также для вставки позже.
Выдернутые строки будут сохранены в буфере 'x' . Его можно использовать в любом месте редактирования.
Чтобы вставить строку (строки) в другой файл,
Пример: введите следующую команду в текущем редактировании
Завершить операцию
открыть файл 1:
-Теперь откройте второй файл из текущего редактирования
-переместите курсор к строке, куда нужно вставить
- Строки из буфера '*a*' будут скопированы после текущего курсора pos
Если вы хотите скопировать часть файла и вставить это содержимое в середину другого файла, вы можете сделать это так.
Теперь строки копируются в другой файл. Если вы хотите удалить эти строки после копирования, вы можете сделать
Теперь перейдите к другому файлу. Затем удерживайте курсор на строке, которую вы хотите вставить.
Теперь сюда вставлено содержимое временного файла. Вы можете удалить временный файл из самой командной строки после вставки содержимого.
Это поможет, если вы захотите скопировать и вставить несколько раз.
Другой способ - открыть два файла в двух разделенных буферах и использовать следующий «фрагмент» после визуального выбора интересующих строк.
Я работаю с двумя файлами, мне нужно скопировать несколько строк из одного файла и вставить в другой файл. Я знаю, как копировать (yy) и вставлять (p) в один и тот же файл. Но это не работает для разных файлов, как это делается?
Кроме того, есть ли способ вырезать-вставить? Я пробовал поиск по Google, но большинство ресурсов говорят только о копировании.
Поскольку вы уже знаете, как вырезать/выкладывать текст, вот несколько идей для вставки его обратно в другой файл:
-
Отредактируйте первый файл, извлекая нужный текст. Затем откройте второй файл из vi ( :e /path/to/other/file ) и вставьте его
Откройте оба файла вместе в разделенном окне и перемещайтесь между ними с помощью Ctrl + w , Up / Down либо:
- vi -o /path/to/file1 /path/to/file2
- Внутри первого файла Ctrl + w , s
Если вы используете VIM в Windows, вы можете получить доступ к буферу (MS copy/paste), используя:
" * d d - отрежьте строку (или 3dd, чтобы разрезать 3 строки)
" * y y - скопируйте строку (или 3yy, чтобы скопировать 3 строки)
" * p - вставить строки в строке после курсора
" * p - вставить строки (строки) в строке перед курсором
Позволяет вставлять между отдельными окнами VIM или между приложениями VIM и ПК (блокнот, слово и т.д.).
Используйте варианты d как dd для вырезания.
Чтобы написать ряд строк в другой файл, вы можете использовать:
Где <n> и <m> - это числа (или символы), которые обозначают диапазон строк.
Для использования буфера обмена рабочего стола ознакомьтесь с командами +g .
Вы можете открыть другой файл и набрать :r file_to_be_copied_from . Или вы можете буферизировать. Или перейдите к первому файлу, перейдите к строке, которую вы хотите скопировать, введите "qY , перейдите в файл, который хотите вставить, и введите "qP .
" имя_буфера, копирует в буфер. Y yank и P . Надеюсь, что это поможет!
Здесь один из способов сделать это;
- Запустите vim и откройте файл1, который является файлом, над которым вы работаете.
- : e file2, который вызовет файл2, файл, с которого вы хотите скопировать строки.
- найдите строки, которые вы хотите скопировать, если это 3 строки, вы нажмете 3 y y
- : b 1 это переключится на буфер 1, где file1 -
- укажите, где вы хотите вставить строки, которые вы дернули, и нажмите p
Вы могли бы также просматривать оба файла, разделить экран, например. CTRL + w s
Что касается разрезания, d разрезает и помещает разрезанный материал в бункер yank. d d будет "вырезать" строку.
Это все замечательные предложения, но если вы знаете расположение текста в другом файле, используйте sed с легкостью. :r! sed -n '1,10 p' < input_file.txt Это добавит 10 строк в уже открытый файл в текущую позицию курсора.
При редактировании файла создайте метки, в которых вы хотите, чтобы начало и конец использовались
ma - устанавливает метку a
mb - устанавливает знак b
Затем, чтобы скопировать это в другой файл, просто используйте команду w :
Копирование текста между двумя буферами (== файлы), которые открываются в одном экземпляре VIM, не представляет проблемы: просто задержите в одном буфере с помощью y (предположим, что раньше вы отмечали область копирования в визуальном режиме), затем вставьте в другой буфер с помощью p . Также работает с разными вкладками, если они находятся в одном экземпляре VIM.
Как открыть два файла в одном экземпляре VIM, зависит от вашей системы:
- В Win32 есть опция в контекстном меню, в которой "Редактировать" с помощью одного vim, если вы выберете два или более файла
- Когда вы на консоли, вы можете достичь этого с помощью vim file1 file2
- Если вы используете VIM в качестве редактора для другого инструмента, обязательно укажите параметр --remote-silent , чтобы все файлы открывались в одном экземпляре
Если вы открыли два файла в двух разных экземплярах VIM, вам нужно пойти с системным буфером обмена: в первом VIM вытащите текст в системный буфер обмена, используя "+y (еще раз отметьте область, которая будет в начале визуального режима), затем перейдите ко второму VIM и вставьте туда буфер обмена: "+p .
Я работаю с двумя файлами, мне нужно скопировать несколько строк из одного файла и вставить в другой файл. Я знаю, как скопировать (уу) и вставить (р) в тот же файл. Но это не работает для разных файлов, как это сделать ??
Кроме того, есть ли способ вырезать-вставить? Я пробовал поискать в Google, но большинство ресурсов говорят только о копировании-вставке.
Поскольку вы уже знаете, как вырезать/восстановить текст, вот несколько идей для его вставки в другой файл:
-
Отредактируйте первый файл, набрав нужный текст. Затем откройте второй файл из vi ( :e /path/to/other/file ) и вставьте его
Откройте оба файла вместе в разделенном окне и перемещайтесь между ними, используя Ctrl + w , Up / Down либо:
- vi -o /path/to/file1 /path/to/file2
- Из первого файла Ctrl + w , s
Если вы используете VIM в Windows, вы можете получить доступ к буферу обмена (MS copy/paste), используя:
" * d d - вырезать линию (или 3DD, чтобы вырезать 3 линии)
" * y y - скопировать строку (или 3гг, чтобы скопировать 3 строки)
" * p - вставить строку (и) в строку после курсора
" * P - вставить строку (и) в строку перед курсором
Позволяет вставлять между отдельными окнами VIM или между VIM и приложениями ПК (блокнот, Word и т.д.).
Используйте варианты d как dd , чтобы вырезать.
Чтобы записать диапазон строк в другой файл, вы можете использовать:
Где <n> и <m> являются числами (или символами), которые обозначают диапазон строк.
Для использования буфера обмена рабочего стола взгляните на команды +g .
Вот один из способов сделать это;
- Запустите vim и откройте файл file1, над которым вы работаете.
- : e file2, который вызовет file2, файл, из которого вы хотите скопировать строки.
- найдите строки, которые вы хотите скопировать, если это 3 строки, вы нажмете 3 y y
- : b 1 это переключится на буфер 1, где file1
- выясните, где вы хотите вставить линии, которые вы дернули, и нажмите p
Вы также можете просматривать оба файла, разделив экран, например, CTRL + w s
Что касается резки, d режет и помещает вырезанный материал в буфер янки. d d будет "разрезать" линию.
Вы можете открыть другой файл и набрать :r file_to_be_copied_from . Или вы можете буферизовать. Или перейдите к первому файлу, перейдите на строку, которую хотите скопировать, введите "qY , перейдите к файлу, который хотите вставить, и введите "qP .
" buffer_name, копирует в буфер. Y - это янки, а P ставится. Надеюсь, это поможет!
Все это отличные предложения, но если вы знаете расположение текста в другом файле, используйте sed с легкостью. :r! sed -n '1,10 p' < input_file.txt Это вставит 10 строк в уже открытый файл в текущей позиции курсора.
При редактировании файла отметьте, где вы хотите использовать начало и конец
ma - устанавливает отметку a
mb - устанавливает отметку b
Затем, чтобы скопировать это в другой файл, просто используйте команду w :
Эти переотображения работают как очарование для меня:
Поэтому, когда я нахожусь в визуальном режиме, я выбираю нужные строки и нажимаю Ctrl + c, а затем Ctrl + v, чтобы вставить текст в файл получателя. Вы также можете использовать "* y", но я думаю, что иногда это трудно запомнить.
Это также полезно для копирования текста из Vim в буфер обмена.
Простого ответа здесь не нашел, поэтому выкладываю свой.
Цель: сохранить часть одного файла в другой файл.
Solution:
- Выберите текст, который вы хотите сохранить:
- Поместите курсор туда, где вы хотите начать выделение
- Нажмите v выбрать символы OR заглавными буквами V выбрать целые строки
- Переместите курсор в конец того, что вы хотите выбрать
Сохранить выделенный текст в новый файл. Тип : w Space и имя нового файла. На самом деле вы увидите
Затем нажмите Enter
Я только что обнаружил, что если вы добавите следующую строку в ваш файл vimrc,
установить буфер обмена = безымянный
затем VIM использует системный буфер обмена
Я только что обнаружил, что янки не будут работать на пути, где я копирую содержимое между разными окнами экземпляров VIM. (По крайней мере, это не работает, основываясь на моих знаниях VIM. Я не знаю, есть ли другой способ включить это).
Путь «янки» работает только в том случае, если в соответствии с моим тестом несколько файлов открываются в одном окне.
Если вы хотите это сделать, вам лучше использовать способ вырезания-копирования-прошивки ОС, например ctrl + x, ctrl + c (под Windows).
Копирование текста между двумя буферами (== файлами), которые открываются в одном и том же экземпляре VIM, не составляет проблемы: просто дерните один буфер с помощью y (при условии, что вы пометили область для копирования в визуальном режиме раньше), затем вставьте в другой буфер с помощью p , Также работает с различными вкладками, если они находятся в одном и том же экземпляре VIM.
Как открыть два файла в одном и том же экземпляре VIM, зависит от вашей системы:
- На Win32 есть опция в контекстном меню, которая гласит: Редактировать с одним vim, если вы выбираете два или более файлов
- Когда вы находитесь на консоли, вы можете достичь этого с помощью vim file1 file2
- Если вы используете VIM в качестве редактора для другого инструмента, обязательно укажите параметр --remote-silent , чтобы все файлы открывались в одном и том же экземпляре.
Если вы открыли два файла в двух разных экземплярах VIM, то вам нужно перейти к системному буферу обмена: в первом VIM скопируйте текст в системный буфер обмена с помощью "+y (опять же, отметьте область, которую нужно сместить в визуальном режиме перед ), затем перейдите ко второму VIM и вставьте туда буфер обмена: "+p .
Мой сценарий состоял в том, что мне нужно скопировать n строк в середине, n неизвестно, из файла 1 в файл 2.
Пример: fileS и file - начать с файла в строке 25, скопировать 50 строк и вставить в файл B
Войдите в командный режим и запустите
Например, чтобы извлечь строки 20-30 из filename в текущий открытый файл
Если вы хотите скопировать часть файла и вставить это содержимое в середину другого файла, вы можете сделать это следующим образом.
Теперь строки копируются в другой файл . Если вы хотите удалить эти строки после копирования, вы можете сделать
Теперь перейдите к другому файлу. Затем наведите курсор на строку, куда вы хотите вставить.
Теперь содержимое временного файла вставлено сюда. Вы можете удалить временный файл из самой командной строки после вставки содержимого.
Это поможет, если вы хотите скопировать и вставить несколько раз.
Другой способ - открыть два файла в двух разделенных буферах и использовать следующий «фрагмент» после визуального выбора интересующих строк.
Опция ниже работает большую часть времени, а также для вставки позже.
Выдернутые строки будут сохранены в буфере 'x' . Его можно использовать в любом месте редактирования.
Главное меню » Операционная система Linux » Как скопировать, вырезать и вставить в Vim/Vi
(5 оценок, среднее: 3,20 из 5)Vim или его предшественник Vi предустановлен на MacOS и почти во всех дистрибутивах Linux. Знание основ Vim полезно в ситуации, когда ваш любимый редактор недоступен.
В этой статье показано, как копировать, вырезать и вставлять в редакторе Vim/Vi.
Копирование, вырезание и вставка в обычном режиме
Когда вы запускаете редактор Vim, вы находитесь в обычном режиме. В этом режиме вы можете запускать команды Vim и перемещаться по файлу.
Чтобы вернуться в обычный режим из любого другого режима, просто нажмите клавишу Esc.
Копирование (Yanking)
Чтобы скопировать текст, поместите курсор в нужное место и нажмите yклавишу, а затем команду перемещения. Ниже приведены некоторые полезные команды для восстановления:
Вырезание (Deleting)
В обычном режиме d это клавиша для вырезания (удаления) текста. Переместите курсор в нужную позицию и нажмите клавишу d, а затем команду перемещения. Вот некоторые полезные команды удаления:
Команды перемещения, которые применяются для янкирования, также действительны для удаления. Например dw, удаляет до начала следующего слова, а d^ удаляет все от курсора до начала строки.
Вставка (Putting)
Чтобы поместить скопированный или удаленный текст, переместите курсор в нужное место и нажмите, p чтобы поместить (вставить) текст после курсора или P поместить (вставить) перед курсором.
Копирование, вырезание и вставка в визуальном режиме
Визуальный режим Vim позволяет выбирать текст и управлять им.
- Поместите курсор на линию, которую хотите начать копировать или резать.
- Визуальный режим имеет три подтипа.
- Нажмите, vчтобы войти в визуальный режим.
- Нажмите V для входа в режим визуальной линии, где текст выделяется по строке.
- Нажмите Ctrl+v для входа в режим визуального блока. В этом режиме текст выделяется прямоугольными блоками.
Заключение
В этой статье мы показали, как копировать, вырезать и вставлять в Vim.
Если вы новичок в Vim, посетите сайт Open Vim, где вы можете попрактиковаться в Vim с помощью интерактивного учебного пособия.
Не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Я пытаюсь скопировать-вставить некоторый текст из vim. Я делаю v , чтобы войти в визуальный режим, затем y после того, как я выбрал свой блок.
Скопирует текст в буфер обмена vim, потому что p вставляет его. Но в другой программе (например, в Chrome) правая кличка и gt не вставляют правильный текст. Как скопировать текст в правильный буфер обмена?
Следующие действия будут работать только в том случае, если vim --version указывает, что у вас есть функция +xterm_clipboard . Если нет, вам придется установить дополнительные пакеты или перекомпилировать vim с добавленной функцией.
На самом деле есть два варианта:
копирует в «обычный» буфер буфера обмена (чтобы вы могли вставлять с помощью Ctrl + V, щелкните правой кнопкой мыши и выберите «Вставить» и т. д.), а
копирует на выбор X11 - вы можете вставлять его из этого буфера с помощью среднего щелчка.
Обратите внимание, что "* и "+ работают в обоих направлениях. Поэтому, если вы выбрали какой-либо текст в другом приложении, вы можете вставить его в vim с помощью "*p , и если вы скопировали какой-либо текст (используя, скажем, Ctrl-C), вы можете вставить его в vim с помощью "+p .
Если вы используете vim> = 7.3.74, тогда вы действительно можете поместить это в свой vimrc:
По умолчанию используется буфер + (системный буфер обмена). Затем, чтобы yank (копировать), вы просто используете обычную команду y и т. Д.
Я нашел это поведение довольно раздражающим, хотя, поскольку команды типа d помещают текст, в котором они работают, в буфер по умолчанию, а это означает, что я не мог выполнить быстрый dd и вставить строку из Интернета, например.
Удерживайте нажатой клавишу и выберите текст с помощью курсора мыши.
Текст будет скопирован в буфер обмена.
Это также работает для вставки из в буфер обмена в vim.
Чтобы быть понятным, это работает для vim , работающего на терминале, например xterm .
Я считаю, что очень сложно использовать стандартные команды "+gP и "+y . Поэтому я переделал Ctrl-Y для загрузки в буфер обмена и Ctrl-P для вставки из буфера обмена. Добавьте это в .vimrc
Ничего, я нашел ответ - он написан на меню vim.
Очень интуитивно понятный.
Просто добавьте не-vim-специфический ответ: вы можете использовать Ctrl+Shift+C для копирования в системный буфер обмена в Ubuntu (если функциональность предоставляется вашим эмулятором терминала, gnome- терминал для одного обеспечивает его). Ctrl+Shift+V вставляет в другое окно терминала, обычный Ctrl+V пасты в графическое приложение.
Кроме того, если вы выберете текст в терминале, затем нажмите «средний», он будет вставлен из буфера обмена X11.
По умолчанию, если вы устанавливаете легкую версию vim, у вас не будет функции +xterm_clipboard ( vim --version | grep xterm )), которая необходим для использования регистров * и + вне vim.
Чтобы включить его, вы должны либо скомпилировать vim самостоятельно, либо установить версию vim, которая поставляется с ней preenabled. Я использовал vim-gnome: sudo apt-get install vim-gnome . Если вы выполняете vim --version | grep xterm , вы увидите, что теперь это +xterm_clipboard .
Теперь попробуйте скопировать код + и * , и он должен работать.
Когда я проверил, что vim не поддерживает буфер обмена:
Я установил vim-gnome, а затем снова проверил
Теперь я могу копировать и вставлять, используя «+ y и» + p соответственно.
Удерживайте нажатой клавишу SHIFT и выделите текст для копирования.
Затем вставьте другую программу с помощью CTRL + v .
Работает в терминале на моем Ubuntu 16.04. Не уверен в gvim и других системах.
Просто добавьте, если что-нибудь работает, попытайтесь переключить терминал, который обертывает vim (если вы используете vim из терминала). Я обнаружил, что, к примеру, буфер обмена недоступен в guake, а доступен из gnome-terminal.
Читайте также: