vi [m] чтение диапазона строк из другого файла

9

В Linux при редактировании file_Bв vim я хочу добавить строку 10-25 из file_A. Пример: у каждого есть целый набор HTML-документов с совершенно одинаковым заголовком, и да, можно создать шаблон и начать с него, но все же:

Я ищу простой [и элегантный] способ вставить диапазон строк из одного файла и добавить его в файл, который я сейчас редактирую. В Vim.

Решения, которые я нашел до сих пор, но не совсем то, что я ищу,

  • внутри file_B команда :read file_Aдобавит * весь файл_A * в файл_B. Перебор
  • внутри vim есть копия и вставка - но для этого надо было открыть file_A
  • внутри file_A :10,25w! file_Bбудет «отправлять» заданный диапазон строк file_B.
    Это похоже на копирование и вставку
  • в vim можно открыть несколько окон.
    Но когда я работаю на 8-дюймовом экране, несколько окон затрудняют ориентацию

Поскольку я не смог найти удобного решения, мне было бы интересно, не понял ли я что-то неправильно, или способы, которые я нашел до сих пор, обычно используются и воспринимаются как стандартный способ.

erch
источник
Посмотрите этот ТАК вопрос , ответ @ Бернхарда был принятым ответом на этот вопрос тоже там!
SLM
@slm Мне был известен этот ответ, но, поскольку я не включил его в список найденных решений, спасибо за подсказку. Я все еще ищу что-то построенное внутри vim. Но это кажется недосягаемым. И мне действительно интересно, достижимо ли это только с помощью внешних команд, потому что, насколько я понял vim, я дошел до небольших ограничений.
13
@ cellar.dweller Вы можете сделать из этого какую-то функцию, если вы действительно хотите что-то проще.
Бернхард

Ответы:

11

Лучшее решение, которое я могу придумать - это внешне позвонить sedи объединить это с:read !

:r !sed -n -e '10,25p' fileB
Бернхард
источник
Здесь не работает - но почему? Во-первых, спасибо за вашу помощь. Я получаю 'E34: нет предыдущей команды' [грубо переведено], как будто vim пытается повторить команду. Насколько я понимаю, шаг за шагом: :rсокращение от readvim. Я не знаю, sedкак и как его использовать. Конечно, я заменил fileBна фактический файл :)
erch
@ cellar.dweller Мой ответ был обновлен кем-то, я получил ту же ошибку по этому коду. Я откатился назад. Посмотрите, работает ли это для вас.
Бернхард
@ Стефан Хорошо, чтобы сократить ответы, но ваше предложение не сработало.
Бернхард
Теперь это работает! Чтобы добавить немного myslef: начиная с :10rи т. Д., Содержимое из строки десять будет помещено в [до тех пор, пока оно существует]. Работает как шарм сейчас. Отлично. Большое спасибо!
erch
2
Ой, извини. Забыл про расширение vim! Должно было быть :r!sed 10,25\!d. Обратите внимание, что вам не нужны -eни кавычки, ни кавычки, так что вы можете написать это :r!sed -n 10,25pдля краткости. :r sed '10,$\!d;25q'чтобы не читать весь файл.
Стефан Шазелас