навигация вперед в большем количестве страниц с помощью f

навигация вперед в большем количестве страниц с помощью f

Он указан на странице руководства, moreкоторая fиспользуется для перехода вперед на k экранов текста (по умолчанию 1). Я сохранил очень длинный файл с помощью catи использовал moreего для отображения на экране страница за страницей, но когда я нажал fна саму первую страницу, он не перемещается вперед, а отображается, ... skipping 29 linesа затем файл закрывается, и возвращается приглашение. Когда я пытаюсь перемещаться с spacebarего помощью, он работает правильно, как и ожидалось. Поскольку длина файла достаточно велика, он должен перемещаться вперед, пропуская 1 страницу каждый раз. Почему он показывает такое разное поведение?

введите описание изображения здесь

решение1

Попробуйте провести такой эксперимент:

  • Откройте терминал с 25 строками.
  • Бегать seq 1 1 100 > test_text.
  • Бегать more test_text.
  • Посмотрите на предпоследнюю строку на экране. Она будет 24.
  • Нажмите f, чтобыпропускатьстраница.
  • Посмотрите на первую строку на экране. Там написано 49.

fпропускает страницу текста. Итак, вы увидели первую "страницу" файла, нажали fи увидели третью страницу.

На этом этапе, если вы нажмете fеще раз, вы увидите ... skipping 24 linesпоследние 4 строки файла. more'выход, так как для отображения пятой страницы недостаточно строк.

Попробуйте снова, используя spaceвместо этого. spaceне пропускает страницы. Вы увидите все страницы.

Редактировать

Этот ответ относится к more version 5.19 (Berkeley 6/29/88), which is currently in use in the Linux community(см.человек больше). Как сообщает @Kusalananda, результат «эксперимента» может различаться в разных версиях/юниксах.

Разница между а lineи аrow of text on a terminal

Часто эти два определения взаимозаменяемы. В этом случае важно их различать.

  • Строка — это последовательность символов в текстовом файле, которая заканчивается символом новой строки (символом \n). wc -lКоманда подсчитывает количество строк в файле. Длина строки может быть любым числом от нуля до бесконечности.
  • Строка текста (на терминале) — это последовательность символов, отображаемых на терминале. Она имеет фиксированную длину, равную ширине терминала.

Мой первый «эксперимент» был слишком прост, все линии были (совершенно точно) короче строк.

В вашем файле, вероятно, строки намного длиннее строк. Чтобы отобразить их, moreразместим каждую строку на нескольких строках.

Давайте попробуем новый эксперимент:

  • Создайте файл exampleсо следующим содержимым:

    006 XX\n010 XXYYYY\n015 XXYYYYZZZZZ\n
    

    Это файл из 3 строк. Длина каждой строки в следующем порядке: 6, 10 и 15 символов. Не забудьте посчитать пробел после номера.

  • Результат wc -l example— 3.

  • На 8-колоночном терминале вы должны увидеть что-то вроде

    006 XX  
    010 XXYY
    YY      
    015 XXYY
    YYZZZZZ 
    

    Первая строка состоит из 8 символов: 006+ пробел + XX+ 2 пробела.

    Длина второй строки составляет 8 символов: 010+ пробел + XXYY.

    Длина 3-й строки — 8 символов: YY+ 8 пробелов.

    И т.д. и т.п.

Ваши 3 строки текста теперь превратились в 5 строк текста.

На странице руководства moreнаписано:

 f         Skip forward k screenfuls of text.  Defaults to 1.

Это означает, что moreбудет пропущено столько строк текста, чтобы заполнить все строки терминала.

решение2

но он отображается ...skipping 29 lines, а затем файл закрывается и приглашение возвращается

Это происходит, когда вы нажимаете fи достигаете конца документа.

Например: у вас есть файл из 40 строк, вы делаете more myfileof60lines.txt, он отображает 29 первых строк, затем вы нажимаете f, поэтому он пропустит 29 следующих строк, но перед этим он достигает конца документа. Таким образом, вы в конечном итоге видите ...skipping 29 lines, и нормальное поведение, moreкогда он достигает конца документа, которое является возвратом к приглашению.

Связанный контент