Я хочу прочитать строку n1- > n2 из файла foo.c в текущий буфер.
Я пробовал: 147,227r /path/to/foo/foo.c
Но я получаю: "E16: Недопустимый диапазон", хотя я уверен, что foo.c содержит более 1000 строк.
Я хочу прочитать строку n1- > n2 из файла foo.c в текущий буфер.
Я пробовал: 147,227r /path/to/foo/foo.c
Но я получаю: "E16: Недопустимый диапазон", хотя я уверен, что foo.c содержит более 1000 строк.
:r! sed -n 147,227p /path/to/foo/foo.c
Вы можете сделать это в чистом Vimscript без использования внешнего инструмента, такого как sed:
:put =readfile('/path/to/foo/foo.c')[146:226]
Обратите внимание, что мы должны уменьшить один из номеров строк, потому что массивы начинаются с 0, а номера строк начинаются с 1.
Недостатки: это решение на 7 символов длиннее принятого ответа, и оно временно будет потреблять память относительно размера другого файла.
{диапазон} относится к месту назначения в текущем файле, а не к диапазону строк в исходном файле.
После некоторых экспериментов, кажется,
:147,227r /path/to/foo/foo.c
означает вставить содержимое /path/to/foo/foo.c
после строки 227 в этот файл. то есть он игнорирует 147.
Вам нужно будет:
:r /path/to/foo/foo.c
:d 228,$
:d 1,146
Три шага, но это будет сделано...
Диапазон позволяет применять команду к группе строк в текущем буфере.
Таким образом, диапазон инструкции чтения означает, где вставлять содержимое в текущий файл, но не диапазон файла, который вы хотите прочитать.
Я просто должен был сделать это в моем проекте кода и сделал это следующим образом:
В буфере с /path/to/foo/foo.c
открыть:
:147,227w export.txt
В буфере я работаю с:
:r export.txt
Намного проще в моей книге... Для этого требуется, чтобы оба файла были открыты, но если я импортирую набор строк, я обычно их открываю в любом случае. Этот метод более общий и легче запомнить для меня, особенно если я пытаюсь экспортировать/импортировать более сложный набор строк, используя g/<search_criteria/:.w >> export.txt
или какой-либо другой более сложный способ выбора строк.
Другие опубликованные решения отлично подходят для определенных номеров строк. Часто бывает, что вы хотите читать сверху или снизу другого файла. В этом случае чтение выхода головы или хвоста происходит очень быстро. Например -
:r !head -20 xyz.xml
Будет читать первые 20 строк из xyz.xml в текущий буфер, где курсор
:r !tail -10 xyz.xml
Будет читать последние 10 строк из xyz.xml в текущий буфер, где курсор
Команды головы и хвоста чрезвычайно быстры, поэтому их комбинирование может быть намного быстрее, чем другие подходы для очень больших файлов.
:r !head -700030 xyz.xml| tail -30
Будет читать номера строк от 700000 до 700030 из файла xyz.xml в текущий буфер
Эта операция должна завершиться мгновенно даже для довольно больших файлов.