Vorwärtsnavigation in mehreren Pagern mit f

Vorwärtsnavigation in mehreren Pagern mit f

In der Manpage von wird angegeben, moredass es fverwendet wird, um k Bildschirmtext vorwärts zu springen (Standardwert: 1). Ich habe eine sehr lange Datei mit gespeichert catund moresie Seite für Seite auf dem Bildschirm angezeigt, aber als ich fauf die erste Seite selbst gedrückt habe, wurde nicht vorwärts navigiert, sondern angezeigt, ... skipping 29 linesund dann wird die Datei geschlossen und die Eingabeaufforderung wird wieder angezeigt. Wenn ich versuche, damit zu navigieren, spacebarfunktioniert es wie erwartet. Da die Dateilänge ausreichend lang ist, sollte es vorwärts navigieren, indem jedes Mal 1 Seite übersprungen wird. Warum zeigt es ein so unterschiedliches Verhalten?

Bildbeschreibung hier eingeben

Antwort1

Versuchen Sie dieses Experiment:

  • Öffnen Sie ein Terminal mit 25 Zeilen.
  • Laufen seq 1 1 100 > test_text.
  • Laufen more test_text.
  • Schauen Sie sich die vorletzte Zeile auf Ihrem Bildschirm an. Dort steht 24.
  • drücke fum zuüberspringeneine Seite.
  • Schauen Sie sich die erste Zeile auf dem Bildschirm an. Dort würde stehen 49:

füberspringt eine Textseite. Sie haben also die erste „Seite“ der Datei gesehen, Sie haben gedrückt fund die dritte Seite gesehen.

Wenn Sie an dieser Stelle ferneut drücken, werden ... skipping 24 linesdie letzten 4 Zeilen der Datei angezeigt. moreSie werden beendet, da nicht genügend Zeilen vorhanden sind, um eine fünfte Seite anzuzeigen.

Versuchen Sie es erneut mit spacestattdessen. spaceSeiten werden nicht übersprungen. Sie sehen alle Seiten.

Bearbeiten

Diese Antwort bezieht sich auf more version 5.19 (Berkeley 6/29/88), which is currently in use in the Linux community(sieheMann mehr). Wie @Kusalananda berichtet, kann das Ergebnis des „Experiments“ bei verschiedenen Versionen/Unices unterschiedlich ausfallen.

Unterschied zwischen a lineund arow of text on a terminal

Oft werden diese beiden Definitionen synonym verwendet. In diesem Fall ist es wichtig, sie zu unterscheiden.

  • Eine Zeile ist eine Zeichenfolge in einer Textdatei, die mit einem Zeilenumbruch (dem \nZeichen) endet. wc -lDer Befehl zählt die Anzahl der Zeilen in einer Datei. Die Länge einer Zeile kann eine beliebige Zahl zwischen null und unendlich sein.
  • Eine Textzeile (auf einem Terminal) ist eine Zeichenfolge, die auf einem Terminal angezeigt wird. Ihre Länge entspricht der Breite des Terminals.

Mein erstes „Experiment“ war zu einfach, alle Linien waren (ziemlich sicher) kürzer als die Reihen.

In Ihrer Datei sind die Zeilen wahrscheinlich viel länger als die Reihen. Um sie anzuzeigen, morewird jede Zeile in mehreren Reihen angeordnet.

Versuchen wir ein neues Experiment:

  • Erstellen Sie eine Datei examplemit diesem Inhalt:

    006 XX\n010 XXYYYY\n015 XXYYYYZZZZZ\n
    

    Dies ist eine 3-zeilige Datei. Die Länge jeder Zeile beträgt in der Reihenfolge: 6, 10 und 15 Zeichen. Vergessen Sie nicht, das Leerzeichen nach der Zahl mitzuzählen.

  • Lauf wc -l example. 3 ist das Ergebnis.

  • Auf einem 8-Spalten-Terminal sollten Sie etwa Folgendes sehen:

    006 XX  
    010 XXYY
    YY      
    015 XXYY
    YYZZZZZ 
    

    Die erste Zeile ist 8 Zeichen lang: 006+ ein Leerzeichen + XX+ 2 Leerzeichen.

    Die zweite Zeile ist 8 Zeichen lang: 010+ ein Leerzeichen + XXYY.

    Die 3. Zeile ist 8 Zeichen lang: YY+ 8 Leerzeichen.

    Usw. usw.

Aus Ihren 3 Textzeilen werden jetzt 5 Textzeilen.

Auf der Manualpage von moreheißt es:

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

Dies bedeutet, dass moreso viele Textzeilen übersprungen werden, um alle Zeilen des Terminals zu füllen.

Antwort2

aber es wird angezeigt ...skipping 29 linesund dann wird die Datei geschlossen und die Eingabeaufforderung wird zurückgegeben

Dies geschieht, wenn Sie drücken fund das Ende des Dokuments erreichen.

Beispiel: Sie haben eine Datei mit 40 Zeilen. Sie drücken more myfileof60lines.txt, die ersten 29 Zeilen werden angezeigt. Dann drücken Sie f, damit die nächsten 29 Zeilen übersprungen werden. Zuvor wird jedoch das Ende des Dokuments erreicht. Sie sehen also ...skipping 29 lines, und das normale Verhalten, morewenn das Ende des Dokuments erreicht wird, nämlich eine Rückkehr zur Eingabeaufforderung.

verwandte Informationen