[linux-l] vim fragen

Steffen Solyga solyga at absinth.net
Mi Nov 13 01:16:21 CET 2002


Citing Soeren Sonnenburg (Tuesday, 2002/11/12 23:06)...

> > Verstehe das Problem nicht. Textdateien auf *NIX haben IMMER ein
> > "\n" am Ende, das muß so sein; nur bei den Dosen ist (war?) das
> 
> und was soll das ? muss das byte verschwendet werden. emacs (in der
> konfig in der er hier ist) hat das auch nicht einfach rangehaengt.

Das ist einfach eine Regel. Genau so, wie man einen Satz mit einem
Großbuchstaben beginnt.
Über die tieferen Gründe kann ich nur Vermutungen anstellen.
Meiner Meinung nach hat das etwas mit Konsitenz zu tun:
- ein Kommando wird mit ENTER abgeschickt == '\n' im Textstrom
- auch wenn nicht explizit festgeschrieben: read(2) gibt spätestens
  dann die Kontrolle an das aufrufende Programm zurück, wenn es auf
  ein '\n' stößt
- das Prompt beginnt in der ersten Spalte jedes Terminals, auch
  nach einem "cat textfile_ohne_newline"
Mit Deinen Textdateien ohne das letzte '\n' wirst Du einige komische
Sachen erleben, im Zweifelsfalle wird die letzte Zeile ignoriert.
Setz' mal "wc -l" auf so eine Datei an. Oder teste das mal:
$ echo "1+2" | bc
$ echo -n "1+2" | bc
Das '\n' hat eher die Bedeutung "end of line" als "new line".
Wie bei der Schreibmaschine stellt es einen definierten Zustand
des Wagens her. Wenn Du Dir (nach UNIX-Philosophie) eine Textdatei
als Zeichenstrom vorstellst, wird das vielleicht klarer.

> das ist mehr bug als feature. denn wozu sollte man bitte einen
> zeilenumbruch am ende einer datei haben wollen. wenn man einen brauch
> kann man ihn einfuegen, loeschen ist der totale krampf.

Logo, weil Löschen der versuchsweise skizzierten Idee zufolge
eine sinnlose Handlung ist.
Kann es sein, daß Du erst vor kurzer Zeit mit UNIX in Kontakt
gekommen bist? Ich schließe aus Deiner Sichtweise, daß Du eine
Textdatei sofort mit einem Texteditor in Verbindung bringst.
Dieser Zusammenhang ist nicht gegeben. Im wesentlichen ist
eine Textdatei identisch mit einem von der Tastatur stammenden
Zeichenstrom. Nimm Dir ein shellscript. Anstelle der direkten
Eingabe am Prompt
$ echo Hallo
kannst Du auch folgendes machen:
$ echo "echo Hallo" > test.txt; chmod +x test.txt; ./test.txt
oder auch
$ echo "echo Hallo" | sh
Damit das alles identisch ist, MUSS die Datei (der Zeichenstrom)
mit einem '\n' abgeschlossen sein, denn das ist der code für's
Drücken der ENTER-Taste.
Allerdings bist Du offenbar nicht der erste Mensch, der über
das Weglassen des letzten EOL gegrübelt hat.
$ echo -n "echo Hallo" | sh
funktioniert nämlich auch (jedenfalls auf meiner Linux-Kiste).

Gruß, Steffen.

-- 
--------------------------------------------
Steffen Solyga
mail: solyga at absinth.net
www : http://www-tet.ee.TU-Berlin.DE/solyga/
--------------------------------------------



Mehr Informationen über die Mailingliste linux-l