vi / vim, как я могу записать несколько строк в новый файл

30

У меня есть несколько строк, которые я хочу записать в другой файл.
Как я могу это сделать?

Майкл Даррант
источник

Ответы:

44

Ты можешь сделать

:100,200w filename

Конечно, 100 200 это диапазон строк, которые вы хотите написать.

Бернхард
источник
Являются ли адреса включенными или исключительными?
Марчин
3
Inclusive. Также включительно, если вы используете шаблоны:: / ^ что-то /, / ^ иначе / w имя файла или метки: 'a,' имя файла bw включает в себя строки, отмеченные 'a' и 'b'.
Брюс Эдигер
Привет @ Бернхард, что если я хочу вырезать строки из текущего файла.
Рави Севта
19

Наиболее общие:

  1. Переместите курсор на первую строку группы, которую вы хотите написать. Хит m и aпоследовательно. Это «установленная метка с именем« а »».

  2. Переместите курсор на последнюю строку группы, нажмите «m» и «b».

  3. Перейдите в режим командной строки: в качестве последовательности :'a,'b w filenameнажмите «Return».

Это будет работать в vi, nvi и vim.

Другой метод, работает в более современном vim:

  1. Поместите курсор на первую строку группы строк, которую вы хотите выписать. Хит V, для «запуска визуального блока линий».

  2. Переместите курсор в конец группы линий. Vim выделит с обратной видео каждую строку.

  3. Написать. Нажмите, :чтобы перейти в режим командной строки. Это даст вам подсказку внизу экрана, которая выглядит следующим образом: :'<,'> Это означает от начала визуального блока до конца. Введите wи имя файла и нажмите клавишу возврата.

Вы можете добавить выделенные строки в конец файла, поместив курсор на строку, которую вы хотите выписать, и набрав: :.w >> filenameи нажав клавишу возврата.

Команды «написать группу строк» ​​также работают с «>> filename» вместо просто «filename». «>>» заставляет vi или vim добавлять файл, а не просто записывать его.

Брюс Эдигер
источник
8

Чтобы добавить ответ Бернхарда, вы также можете выбрать регион в визуальном режиме и затем ввести :w filename.

noffle
источник
8

Если вам известны номера строк, которые вы хотите написать, вы можете сделать это из командной строки:

vim -c "100,200w new_file.txt" -c wq original_file.txt
Akavall
источник
1

один маленький трюк использует относительный номер строки. Например:: + 0, + 99w имя файла записать следующие 100 строк в имя файла.

Гуокай Ма
источник
Не перезаписать ли это оригинальный файл? ОП хотел бы записать в другой файл.
SabreWolfy
1
@SabreWolfy Нет; может быть, вы пропустили «имя файла» после номера строки. Я только что проверил его версию, и это сработало.
felwithe