Как с помощью vim переместить фрагмент текста в новый файл? На данный момент я делаю это:
- выберите текст
- использование
:w new_file
- выберите текст снова
- удалить текст
Есть ли более эффективный способ сделать это?
Перед
a.txt
sometext
some other text
some other other text
end
После
a.txt
sometext
end
b.txt
some other text
some other other text
Под «перемещением фрагмента текста в новый файл» я предполагаю, что вы имеете в виду вырезать этот фрагмент текста из текущего файла и создать новый файл, содержащий только этот текст.
Различные примеры:
:1,1 w new_file
создать новый файл, содержащий только текст из строки № 1:5,50 w newfile
создать новый файл, содержащий текст из строки 5 в строку 50:'a,'b w newfile
создать новый файл, содержащий текст от меткиa
к меткеb
Выше только копирует текст и создает новый файл, содержащий этот текст. Затем вам нужно будет удалить позже.
Это можно сделать, используя тот же диапазон и
d
команду::5,50 d
удалить текст из строки 5 в строку 50:'a,'b d
удалить текст с отметкиa
на отметкуb
Или используя ddдля случая единственной строки.
Если вы вместо этого выделите текст в визуальном режиме, а затем нажмете,
:
пока текст выделен, в командной строке вы увидите следующее::'<,'>
Который указывает на выделенный текст. Затем вы можете расширить команду до:
:'<,'>w >> old_file
Который будет добавлять текст в существующий файл. Затем удалите, как указано выше.
Один лайнер:
:2,3 d | new +put! "
Разбивка:
:2,3 d
- удалить строки со 2 по 3|
- технически это перенаправляет вывод первой команды на вторую команду, но поскольку первая команда ничего не выводит, мы просто объединяем команды в цепочкуnew
- открывает новый буфер+put! "
- поместить содержимое безымянного register ("
) в буфер!
) предназначена для размещения содержимого перед текущей строкой. Это вызывает и пустую строку в конце файла. Без этого в верхней части файла есть пустая строка.источник
'<,'>d | new | 0put "
для ясности.Основываясь на ответе @ embedded.kyle и этих вопросах и ответах , я получил этот вкладыш, чтобы добавить выделение к файлу и удалить из текущего файла. После выбора нескольких строк
Shift+V
нажмите:
и запустите:Первая часть добавляет выбранные строки. Вторая команда входит в обычный режим и запускается,
gvd
чтобы выбрать последний выбор, а затем удалить.источник
Выделите текст в визуальном режиме, затем нажмите, yчтобы «вытащить» его в буфер (копировать) или d«удалить» его в буфер (вырезать).
Затем вы можете
:split <new file name>
разбить окно vim вверх и нажать, pчтобы вставить в текст. Напишите файл как обычно.Чтобы снова закрыть разделение, передайте разделение, которое вы хотите закрыть
:q
.источник
:x
вместо этого вы передадите разделение , вы можете объединить запись и закрытие в одно и сделать это за пять шагов. : P