vimhilfe - en to de translation catalogue (200 entries)

note: type: description
en: For Vim version 9.1.  Last change: 2024 Nov 12
de: Für Vim in Version 9.1. Letzte Änderung 12.Nov.2024

note: type: paragraph
en: VIM USER MANUAL - by Bram Moolenaar
de: VIM-ANWENDERHANDBUCH - von Bram Moolenaar

note: type: paragraph
en: Making big changes
de: Große Änderungen machen

note: type: paragraph
en: In chapter 4 several ways to make small changes were explained.  This chapter
    goes into making changes that are repeated or can affect a large amount of
    text.  The Visual mode allows doing various things with blocks of text.  Use
    an external program to do really complicated things.
de: In Kapitel 4 wurden einige Möglichkeiten erläutert, um kleine Änderungen
    vorzunehmen. Dieses Kapitel beschäftigt sich mit Änderungen, die wiederholt
    werden oder eine große Menge an Text beeinflussen können. Der visuelle Modus
    erlaubt es verschiedene Dinge mit Textblöcken zu tun. Verwenden Sie ein
    externes Programm um wirklich komplizierte Dinge zu tun.

note: type: paragraph
en: |10.1|	Record and playback commands
    |10.2|	Substitution
    |10.3|	Command ranges
    |10.4|	The global command
    |10.5|	Visual block mode
    |10.6|	Reading and writing part of a file
    |10.7|	Formatting text
    |10.8|	Changing case
    |10.9|	Using an external program
de: |10.1|	Befehle aufzeichnen und abspielen
    |10.2|	Ersetzung (Substitution)
    |10.3|	Befehlsbereiche
    |10.4|	Der Befehl "global"
    |10.5|	Der Modus "Visueller Block"
    |10.6|	Teile einer Datei lesen und schreiben
    |10.7|	Text formatieren
    |10.8|	Groß-/Kleinschreibung ändern
    |10.9|	Ein externes Programm benutzen

note: type: paragraph
en:      Next chapter: |usr_11.txt|  Recovering from a crash
     Previous chapter: |usr_09.txt|  Using the GUI
    Table of contents: |usr_toc.txt|
de:   Nächstes Kapitel: |usr_11.txt|  Nach einem Absturz retten
    Vorheriges Kapitel: |usr_09.txt|  Die GUI benutzen
      Inhaltsübersicht: |usr_toc.txt|

note: type: paragraph
en: *10.1*	Record and playback commands
de: *t10.1*	Befehle aufzeichnen und abspielen

note: type: paragraph
en: The "." command repeats the preceding change.  But what if you want to do
    something more complex than a single change?  That's where command recording
    comes in.  There are three steps:
de: Der Befehl `.` wiederholt die vorhergehende Änderung. Doch was wenn Sie etwas
    komplizierteres als eine einzelne Änderung vornehmen wollen? Hier kommt das
    Aufzeichnen von Befehlen ins Spiel. Es sind drei Schritte:

note: type: paragraph
en: 1. The "q{register}" command starts recording keystrokes into the register
       named {register}.  The register name must be between a and z.
    2. Type your commands.
    3. To finish recording, press q (without any extra character).
de: 1. Der Befehl "q{Register}" beginnt das Aufnehmen von Tastendrücken in das
       Register namens {Register}. Der Name des Registers muss zwischen a und z
       sein.
    2. Tippen Sie Ihre Befehle.
    3. Um das Aufnehmen abzuschließen drücken Sie q (ohne jegliches weiteres
       Zeichen).

note: type: paragraph
en: You can now execute the macro by typing the command "@{register}".
de: Nun können Sie das Makro ausführen, indem Sie den Befehl "@{Register}"
    tippen.

note: type: paragraph
en: Take a look at how to use these commands in practice.  You have a list of
    filenames that look like this:
de: Blicken wir nun darauf, wie man diese Befehle in der Praxis verwendet. Wir
    haben eine Liste von Dateinamen, die so aussieht:

note: type: paragraph
en: And what you want is the following:
de: Und wir wollen das Folgende:

note: type: column heading
en: 	#include "stdio.h"
    	#include "fcntl.h"
    	#include "unistd.h"
    	#include "stdlib.h"
de: #include "stdio.h"
    #include "fcntl.h"
    #include "unistd.h"
    #include "stdlib.h"

note: type: paragraph
en: You start by moving to the first character of the first line.  Next you
    execute the following commands:
de: Wir beginnen, indem wir auf das erste Zeichen der ersten Zeile gehen. Nun
    führen wir die folgenden Befehle aus:

note: type: paragraph
en: qa			Start recording a macro in register a.
    ^			Move to the beginning of the line.
    i#include "<Esc>	Insert the string #include " at the beginning
    			of the line.
    $			Move to the end of the line.
    a"<Esc>			Append the character double quotation mark (")
    			to the end of the line.
    j			Go to the next line.
    q			Stop recording the macro.
de: qa			Das Aufnehmen eines Makros in das Register a
    			beginnen.
    ^			Zum Anfang der Zeile gehen.
    i#include "<Esc>	Die Zeichenfolge #include " am
    			Anfang der Zeile einfügen.
    $			Zum Ende der Zeile gehen.
    a"<Esc>			Das doppelte Anführungszeichen (") am
    			Ende der Zeile anhängen.
    j			Zur nächsten Zeile gehen.
    q			Das Aufnehmen des Makros beenden.

note: type: paragraph
en: Now that you have done the work once, you can repeat the change by typing the
    command "@a" three times.
       The "@a" command can be preceded by a count, which will cause the macro to
    be executed that number of times.  In this case you would type:
de: Nachdem wir die Arbeit nun einmal erledigt haben, können wir die Änderung
    wiederholen, indem wir dreimal den Befehl "@a" tippen.
       Dem Befehl "@a" kann eine Anzahl vorangestellt werden, welche das Makro so
    viele Male ausführen lässt. In diesem Fall würden wir tippen:

note: type: paragraph
en: MOVE AND EXECUTE
de: BEWEGEN UND AUSFÜHREN

note: type: paragraph
en: You might have the lines you want to change in various places.  Just move the
    cursor to each location and use the "@a" command.  If you have done that once,
    you can do it again with "@@".  That's a bit easier to type.  If you now
    execute register b with "@b", the next "@@" will use register b.
       If you compare the playback method with using ".", there are several
    differences.  First of all, "." can only repeat one change.  As seen in the
    example above, "@a" can do several changes, and move around as well.
    Secondly, "." can only remember the last change.  Executing a register allows
    you to make any changes and then still use "@a" to replay the recorded
    commands.  Finally, you can use 26 different registers.  Thus you can remember
    26 different command sequences to execute.
de: Sie könnten die Zeilen, die Sie ändern wollen, an verschiedenen Orten haben.
    Gehen Sie einfach mit dem Cursor an jede Stelle, und verwenden Sie den Befehl
    "@a". Wenn Sie das einmal getan haben, können Sie den Befehl mit "@@"
    wiederholen. Das ist etwas einfacher zu tippen. Falls Sie nun das Register b
    mit "@b" ausführen, verwendet das nächste "@@" Register b.
       Wenn Sie diese Playback-Methode mit dem Verwenden von "." vergleichen, gibt
    es mehrere Unterschiede. Zu aller erst kann sich "." nur die letzte Änderung
    merken. Wie in dem Beispiel oben gesehen kann "@a" mehrere Änderungen
    vornehmen und ebenso umherspringen. Ein Register ausführen erlaubt Ihnen,
    jegliche Änderungen zu machen, um dann wieder mit "@a" die aufgezeichneten
    Befehle abzuspielen. Schließlich können Sie 26 verschiedene Register
    verwenden, was es Ihnen erlaubt, 26 verschiedene Befehlssequenzen zur
    Ausführung zu speichern.

note: type: paragraph
en: USING REGISTERS
de: REGISTER VERWENDEN

note: type: paragraph
en: The registers used for recording are the same ones you used for yank and
    delete commands.  This allows you to mix recording with other commands to
    manipulate the registers.
       Suppose you have recorded a few commands in register n.  When you execute
    this with "@n" you notice you did something wrong.  You could try recording
    again, but perhaps you will make another mistake.  Instead, use this trick:
de: Die zum Aufzeichnen verwendeten Register sind dieselben die Sie schon zum
    Kopieren und Löschen verwendet haben. Dies erlaubt es uns das Aufnehmen mit
    anderen Befehlen zum Manipulieren der Register zu mischen.
       Angenommen Sie haben einige Befehle in das Register n aufgenommen. Als Sie
    diese mit "@n" ausführen bemerken Sie einen Fehler. Sie könnten das
    Aufnehmen nochmals versuchen, aber dann machen Sie möglicherweise einen
    anderen Fehler. Verwenden Sie stattdessen diesen Trick:

note: type: paragraph
en: G			Go to the end of the file.
    o<Esc>			Create an empty line.
    "np			Put the text from the n register.  You now see
    			the commands you typed as text in the file.
    {edits}			Change the commands that were wrong.  This is
    			just like editing text.
    0			Go to the start of the line.
    "ny$			Yank the corrected commands into the n
    			register.
    dd			Delete the scratch line.
de: G			Gehen Sie an das Ende der Datei.
    o<Esc>			Erzeugen Sie eine leere Zeile.
    "np			Fügen Sie den Text aus dem Register n
    			Nun sehen Sie die Befehle, die Sie
    			Sie getippt haben als Text in der Datei.
    {editieren}		Ändern Sie die Befehle, die falsch
    			waren. Dies ist genau wie Text editieren.
    0			Gehen Sie an den Anfang der Zeile.
    "ny$			Kopieren Sie die korrigierten Befehle in das
    			Register n.
    dd			Löschen Sie die zusätzliche Zeile.

note: type: paragraph
en: Now you can execute the corrected commands with "@n".  (If your recorded
    commands include line breaks, adjust the last two items in the example to
    include all the lines.)
de: Nun können Sie die korrigierten Befehle mit "@n" ausführen. (Falls Ihre
    aufgezeichneten Befehle Zeilenumbrüche enthalten, passen Sie die letzen
    beiden Punkte in dem Beispiel so an, dass alle Zeilen erfasst werden.)

note: type: paragraph
en: APPENDING TO A REGISTER
de: AN EIN REGISTER ANHÄNGEN

note: type: paragraph
en: So far we have used a lowercase letter for the register name.  To append to a
    register, use an uppercase letter.
       Suppose you have recorded a command to change a word to register c.  It
    works properly, but you would like to add a search for the next word to
    change.  This can be done with:
de: Bis jetzt haben wir nur Kleinbuchstaben für den Namen eines Registers
    verwendet. Um an ein Register anzuhängen, verwenden Sie einen Großbuchstaben.
       Angenommen Sie haben in Register c einen Befehl aufgenommen, um ein Wort
    zu ändern. Es arbeitet korrekt, aber Sie möchten eine Suche nach dem
    nächsten Wort, das geändert werden soll, hinzufügen. Dies kann man mit dem
    folgenden erreichen:

note: type: codeblock
en: qC/word<Enter>q
de: qC/Wort<Eingabetaste>q

note: type: paragraph
en: You start with "qC", which records to the c register and appends.  Thus
    writing to an uppercase register name means to append to the register with
    the same letter, but lowercase.
de: Wir beginnen mit "qC", was in das Register c aufnimmt und anhängt. Somit
    hängt das Schreiben in ein Register mit einem Namen als Großbuchstaben in
    dasselbe Register wie mit einem Kleinbuchstaben an.

note: type: paragraph
en: This works both with recording and with yank and delete commands.  For
    example, you want to collect a sequence of lines into the a register.  Yank
    the first line with:
de: Dies funktioniert sowohl beim Aufnehmen wie mit Kopier- und Löschbefehlen.
    Sie wollen zum Beispiel eine Reihe von Zeilen in einem Register sammeln.
    Kopieren Sie die erste Zeile mit dem folgenden:

note: type: paragraph
en: Now move to the second line, and type:
de: Nun gehen Sie zur zweiten Zeile und tippen:

note: type: paragraph
en: Repeat this command for all lines.  The a register now contains all those
    lines, in the order you yanked them.
de: Sie wiederholen diesen Befehl für alle Zeilen. Das Register a enthält dann
    alle jene Zeilen, in der Reihenfolge in der Sie sie kopiert haben.

note: type: paragraph
en: *10.2*	Substitution						*find-replace*
de: *10.2*	Ersetzung (Substitution)				*find-replace*

note: type: paragraph
en: The ":substitute" command enables you to perform string replacements on a
    whole range of lines.  The general form of this command is as follows:
de: Der Befehl `:substitute` lässt Sie Zeichenkettenersetzungen auf einem ganzen
    Bereich von Zeilen ausführen. Die allgemeine Form dieses Befehls ist wie
    folgt:

note: type: codeblock
en: :[range]substitute/from/to/[flags]
de: :[Bereich]substitute/von/nach/[Marker]

note: type: paragraph
en: This command changes the "from" string to the "to" string in the lines
    specified with [range].  For example, you can change "Professor" to "Teacher"
    in all lines with the following command:
de: Dieser Befehl ändert die Zeichenkette "von" in die Zeichenkette "nach" in
    den durch [Bereich] angegebenen Zeilen. Sie können zum Beispiel mit dem
    folgenden Befehl "Professor" in "Lehrer" ändern:

note: type: codeblock
en: :%substitute/Professor/Teacher/
de: :%substitute/Professor/Lehrer/

note: type: paragraph
en: Note:
    The ":substitute" command is almost never spelled out completely.
    Most of the time, people use the abbreviated version ":s".  From here
    on the abbreviation will be used.
de: Anmerkung:
    Der Befehl `:substitute` wird fast nie komplett ausgeschrieben.
    Meistens wird die abgekürzte Version `:s` verwendet. Von nun an wird
    die Abkürzung verwendet.

note: type: paragraph
en: The "%" before the command specifies the command works on all lines.  Without
    a range, ":s" only works on the current line.  More about ranges in the next
    section |10.3|.
de: Das "%" vor dem Befehl gibt an, dass der Befehl auf allen Zeilen arbeitet.
    Ohne Bereich arbeitet ":s" lediglich auf der aktuellen Zeile. Weiteres zu
    Bereichen im nächsten Abschnitt |10.3|.

note: type: paragraph
en: By default, the ":substitute" command changes only the first occurrence on
    each line.  For example, the preceding command changes the line:
de: In der Vorgabe ändert der Befehl ":substitute" nur das erste Vorkommen auf
    jeder Zeile. Der vorherige Befehl ändert zum Beispiel:

note: type: column heading
en: 	Professor Smith criticized Professor Johnson today.
de: 	Professor Schmidt kritisierte heute Professor Jansson.

note: type: paragraph
en: to:
de: in:

note: type: column heading
en: 	Teacher Smith criticized Professor Johnson today.
de: 	Lehrer Schmidt kritisierte heute Professor Jansson.

note: type: paragraph
en: To change every occurrence on the line, you need to add the g (global) flag.
    The command:
de: Um jedes Vorkommen auf der Zeile zu ändern müssen Sie den Marker g wie global
    hinzufügen. Der Befehl:

note: type: codeblock
en: :%s/Professor/Teacher/g
de: :%s/Professor/Lehrer/g

note: type: paragraph
en: results in (starting with the original line):
de: ergibt (beginnend mit der ursprünglichen Zeile):

note: type: column heading
en: 	Teacher Smith criticized Teacher Johnson today.
de: 	Lehrer Schmidt kritisierte heute Lehrer Jansson.

note: type: paragraph
en: Other flags include p (print), which causes the ":substitute" command to print
    out the last line it changes.  The c (confirm) flag tells ":substitute" to ask
    you for confirmation before it performs each substitution.  Enter the
    following:
de: Ein weiterer Marker ist p wie print, das den Befehl ":substitute" die
    letzte Zeile ausgeben lässt, die er ändert. Der Marker c wie confirm lässt
    `:substitute` Sie vor jeder Änderung nach einer Bestätigung fragen. Geben Sie
    das folgende ein:

note: type: codeblock
en: :%s/Professor/Teacher/c
de: :%s/Professor/Lehrer/c

note: type: paragraph
en: Vim finds the first occurrence of "Professor" and displays the text it is
    about to change.  You get the following prompt:
de: Vim findet das erste Vorkommen von "Professor" und zeigt den Text an, den
    er ändern wird. Sie erhalten die folgende Eingabeaufforderung:

note: type: codeblock
en: replace with Teacher (y/n/a/q/l/^E/^Y)?
de: ersetze durch Lehrer (y/n/a/q/l/^E/^Y)?

note: type: paragraph
en: At this point, you must enter one of the following answers:
de: Hier müssen eine der folgenden Antworten eingeben:

note: type: paragraph
en: y		Yes; make this change.
    n		No; skip this match.
    a		All; make this change and all remaining ones without
    		further confirmation.
    q		Quit; don't make any more changes.
    l		Last; make this change and then quit.
    CTRL-E		Scroll the text one line up.
    CTRL-Y		Scroll the text one line down.
de: y		Ja (yes); diese Änderung durchführen.
    n		Nein; diese Übereinstimmung überspringen.
    a		Alle; diese Änderung und alle weiteren ohne noch-
    		malige Bestätigung durchführen.
    q		Ende (quit); keine weiteren Änderungen.
    l		Letzte: diese Änderung und das Ersetzen beenden.
    CTRL-E		Den Text eine Zeile nach oben rollen.
    CTRL-Y		Den Text eine Zeile nach unten rollen.

note: type: paragraph
en: The "from" part of the substitute command is actually a pattern.  The same
    kind as used for the search command.  For example, this command only
    substitutes "the" when it appears at the start of a line:
de: Der Teil "von" des Ersetzungsbefehls ist tatsächlich ein Muster. Von
    derselben Art wie es für den Suchbefehl verwendet wird. Dieser Befehl zum
    Beispiel ersetzt "das" nur, wenn es am Anfang der Zeile vorkommt:

note: type: codeblock
en: :s/^the/these/
de: :s/^das/diese/

note: type: paragraph
en: If you are substituting with a "from" or "to" part that includes a slash, you
    need to put a backslash before it.  A simpler way is to use another character
    instead of the slash.  A plus, for example:
de: Falls Sie bei der Ersetzung einen "von"- oder "nach"-Teil verwenden, der
    einen Schrägstrich (/) enthält, müssen Sie ihm einen Backslash (\)
    voranstellen. Einfacher ist es, statt des Schrägstrichs ein anderes Zeichen
    zu verwenden. Ein Plus zum Beispiel:

note: type: codeblock
en: :s+one/two+one or two+
de: :s+eins/zwei+eins oder zwei+

note: type: paragraph
en: *10.3*	Command ranges
de: *10.3*	Befehlsbereiche

note: type: paragraph
en: The ":substitute" command, and many other : commands, can be applied to a
    selection of lines.  This is called a range.
       The simple form of a range is {number},{number}.  For example:
de: Der Befehl `:substitute`, und viele andere ":"-Befehle, kann auf eine Auswahl
    von Zeilen angewendet werden. Dies nennt sich ein Bereich (range).
        Die einfache Form eines Bereichs ist {Nummer},{Nummer}. Zum Beispiel:

note: type: codeblock
en: :1,5s/this/that/g
de: :1,5s/dies/das/g

note: type: paragraph
en: Executes the substitute command on the lines 1 to 5.  Line 5 is included.
    The range is always placed before the command.
de: führt den Ersetzungsbefehl auf den Zeilen eins bis fünf aus. Zeile fünf wird
    einbezogen. Der Bereich steht immer vor dem Befehl.

note: type: paragraph
en: A single number can be used to address one specific line:
de: Eine einzelne Zahl kann verwendet werden, um eine bestimmte Zeile anzugeben:

note: type: paragraph
en: Some commands work on the whole file when you do not specify a range.  To make
    them work on the current line the "." address is used.  The ":write" command
    works like that.  Without a range, it writes the whole file.  To make it write
    only the current line into a file:
de: Einige Befehle arbeiten auf der ganzen Datei wenn Sie keinen Bereich angeben.
    Um sie auf der aktuellen Zeile arbeiten zu lassen wird die Adresse "."
    benutzt. Der Speicherbefehl `:write` arbeitet so. Ohne einen Bereich
    speichert er die gesamte Datei. Um ihn nur die aktuelle Zeile in eine Datei
    sichern zu lassen:

note: type: codeblock
en: :.write otherfile
de: :.write anderedatei

note: type: paragraph
en: The first line always has number one.  How about the last line?  The "$"
    character is used for this.  For example, to substitute in the lines from the
    cursor to the end:
de: Die erste Zeile hat immer die Nummer eins. Was ist mit der letzten Zeile? Das
    Zeichen "$" wird für diese benutzt. Um zum Beispiel in den Zeilen von der
    Cursor bis ans Dateiende zu ersetzen:

note: type: codeblock
en: :.,$s/yes/no/
de: :.,$s/ja/nein/

note: type: paragraph
en: The "%" range that we used before, is actually a short way to say "1,$", from
    the first to the last line.
de: Der Bereich "%", den wir oben benutzt haben, ist tatsächlich eine Kurzform
    "1,$", von der ersten zur letzten Zeile, zu sagen.

note: type: paragraph
en: USING A PATTERN IN A RANGE
de: EIN MUSTER IN EINEM BEREICH VERWENDEN

note: type: paragraph
en: Suppose you are editing a chapter in a book, and want to replace all
    occurrences of "grey" with "gray".  But only in this chapter, not in the next
    one.  You know that only chapter boundaries have the word "Chapter" in the
    first column.  This command will work then:
de: Angenommen Sie editieren ein Kapitel in einem Buch, und wollen nur alle
    Vorkommnisse von "Greuel" durch "Gräuel" ersetzen. Aber nur in diesem
    Kapitel, nicht in dem nächsten. Sie wissen, dass nur Kapiteltrenner das Wort
    "Kapitel" in der ersten Spalte haben. Dann funktioniert dieser Befehl:

note: type: codeblock
en: :?^Chapter?,/^Chapter/s=grey=gray=g
de: :?^Kapitel?,/^Kapitel/s=Greuel=Gräuel=g

note: type: paragraph
en: You can see a search pattern is used twice.  The first "?^Chapter?" finds the
    line above the current position that matches this pattern.  Thus the ?pattern?
    range is used to search backwards.  Similarly, "/^Chapter/" is used to search
    forward for the start of the next chapter.
       To avoid confusion with the slashes, the "=" character was used in the
    substitute command here.  A slash or another character would have worked as
    well.
de: Sie sehen, dass zwei Mal ein Suchmuster verwendet wird. Das erste
    "?^Kapitel?" findet die Zeile über der aktuellen Position, auf die dieses
    Muster passt. Somit wird ?Muster? in einem Bereich verwendet, um rückwärts zu
    suchen. Analog wird "/^Kapitel/" verwendet, um vorwärts nach dem Anfang des nächsten Kapitels zu suchen.
       Um Verwirrung mit den Schrägstrichen zu vermeiden, wurde im
    Ersetzungsbefehl das Zeichen "=" verwendet. Schrägstriche oder ein anderes
    Zeichen hätten ebenso funktioniert.

note: type: paragraph
en: ADD AND SUBTRACT
de: ADDIEREN UND SUBSTRAHIEREN

note: type: paragraph
en: There is a slight error in the above command: If the title of the next chapter
    had included "grey" it would be replaced as well.  Maybe that's what you
    wanted, but what if you didn't?  Then you can specify an offset.
       To search for a pattern and then use the line above it:
de: Es gibt einen kleinen Fehler in dem Befehl oben: Hätte der Titel des
    nächsten Kapitels "Greuel" enthalten, wäre dies ebenso ersetzt worden.
    Vielleicht ist es das was Sie wollten, aber was falls nicht? Dann können
    Sie einen Offset angeben.
       Dies sucht nach einem Muster und verwendet die Zeile darüber:

note: type: codeblock
en: /Chapter/-1
de: /Kapitel/-1

note: type: paragraph
en: You can use any number instead of the 1.  To address the second line below the
    match:
de: Statt der 1 können Sie jede andere Anzahl verwenden. Um die zweite Zeile
    unter der Übereinstimmung anzusprechen:

note: type: codeblock
en: /Chapter/+2
de: /Kapitel/+2

note: type: paragraph
en: The offsets can also be used with the other items in a range.  Look at this
    one:
de: Offsets können auch mit anderen Elementen in einem Bereich verwendet werden.
    Sehen Sie sich dies an:

note: type: paragraph
en: This specifies the range that starts three lines below the cursor and ends
    five lines before the last line in the file.
de: Dies gibt einen Bereich an, der drei Zeilen unter dem Cursor beginnt und fünf
    Zeilen vor der letzten Zeile in der Datei endet.

note: type: paragraph
en: USING MARKS
de: MARKIERUNGEN BENUTZEN

note: type: paragraph
en: Instead of figuring out the line numbers of certain positions, remembering them
    and typing them in a range, you can use marks.
       Place the marks as mentioned in chapter 3.  For example, use "mt" to mark
    the top of an area and "mb" to mark the bottom.  Then you can use this range
    to specify the lines between the marks (including the lines with the marks):
de: Statt die Zeilennummern bestimmter Positionen herauszufinden, sie sich zu
    merken und sie in einen Bereich zu tippen können Sie Markierungen verwenden.
       Setzen Sie die Markierungen wie in Kapitel 3 beschrieben. Verwenden Sie zum
    Beispiel "ma" für den Anfang eines Areals und "me" für das Ende. Dann können
    Sie diesen Bereich verwenden um die Zeilen zwischen den Markierungen
    anzugeben (die Zeilen mit den Markierungen eingeschlossen):

note: type: codeblock
en: :'t,'b
de: :'a,'e

note: type: paragraph
en: VISUAL MODE AND RANGES
de: VISUELLER MODUS UND BEREICHE

note: type: paragraph
en: You can select text with Visual mode.  If you then press ":" to start a colon
    command, you will see this:
de: Sie können Text mit den visuellen Modus auswählen. Wenn Sie dann ":"
    drücken, um einen Doppelpunkt-Befehl zu beginnen, sehen Sie dies:

note: type: paragraph
en: Now you can type the command and it will be applied to the range of lines that
    was visually selected.
de: Nun können Sie den Befehl tippen, und er wird auf den Bereich von Zeilen
    angewendet werden, der visuell ausgewählt wurde.

note: type: paragraph
en: Note:
    When using Visual mode to select part of a line, or using CTRL-V to
    select a block of text, the colon commands will still apply to whole
    lines.  This might change in a future version of Vim.
de: Anmerkung:
    Wenn Sie den visuellen Modus verwenden, um einen Teil einer Zeile aus-
    zuwählen, oder CTRL-V für einen Textblock, werden die Doppelpunkt-
    befehle dennoch auf ganze Zeilen angewendet. Dies könnte sich in einer
    zukünftigen Version von Vim ändern.

note: type: paragraph
en: The '< and '> are actually marks, placed at the start and end of the Visual
    selection.  The marks remain at their position until another Visual selection
    is made.  Thus you can use the "'<" command to jump to position where the
    Visual area started.  And you can mix the marks with other items:
de: '< und '> sind tatsächlich Markierungen, gesetzt an den Beginn und das Ende
    der visuellen Auswahl. Diese Markierungen bleiben an ihrer Position bis eine
    weitere visuelle Auswahl vorgenommen wird. Somit können Sie den Befehl "'<"
    benutzen, um zu der Position zu springen, wo das visuelle Areal begann. Und
    Sie können die Markierungen mit anderen Elementen mischen:

note: type: paragraph
en: This addresses the lines from the end of the Visual area to the end of the
    file.
de: Dies spricht die Zeilen vom Ende des visuellen Bereichs zum Dateiende an.

note: type: paragraph
en: A NUMBER OF LINES
de: EINE ANZAHL VON ZEILEN

note: type: paragraph
en: When you know how many lines you want to change, you can type the number and
    then ":".  For example, when you type "5:", you will get:
de: Wenn Sie wissen wie viele Zeilen Sie ändern wollen, können Sie die Zahl
    tippen und dann ":". Wenn Sie zum Beispiel "5:" tippen, erhalten Sie:

note: type: paragraph
en: Now you can type the command you want to use.  It will use the range "."
    (current line) until ".+4" (four lines down).  Thus it spans five lines.
de: Jetzt können Sie den Befehl, den Sie verwenden wollen, tippen. Er verwendet
    dann den Bereich "." (aktuelle Zeilen) bis ".+4" (vier Zeilen abwärts).
    Somit überspannt er fünf Zeilen.

note: type: paragraph
en: *10.4*	The global command
de: *10.4*	Der Befehl "global"

note: type: paragraph
en: The ":global" command is one of the more powerful features of Vim.  It allows
    you to find a match for a pattern and execute a command there.  The general
    form is:
de: Der Befehl `:global` ist eine der mächtigeren Fähigkeiten von Vim. Er erlaubt
    Ihnen, eine Übereinstimmung auf ein Muster zu finden und dort einen Befehl
    auszuführen. Die allgemeine Form ist:

note: type: codeblock
en: :[range]global/{pattern}/{command}
de: :[Bereich]global/{Muster}/{Befehl}

note: type: paragraph
en: This is similar to the ":substitute" command.  But, instead of replacing the
    matched text with other text, the command {command} is executed.
de: Dies ist dem Befehl `:substitute` ähnlich. Aber statt den gefundenen Text
    durch anderen Text zu ersetzen wird ein Befehl ausgeführt.

note: type: paragraph
en: Note:
    The command executed for ":global" must be one that starts with a
    colon.  Normal mode commands can not be used directly.  The |:normal|
    command can do this for you.
de: Anmerkung:
    Der Befehl, der von `:global` ausgeführt werden soll, muss ein
    Doppelpunktbefehl sein. Befehle des Normalmodus können nicht direkt
    verwendet werden. Der Befehl |:normal| kann dies für Sie erledigen.

note: type: paragraph
en: Suppose you want to change "foobar" to "barfoo", but only in C++ style
    comments.  These comments start with "//".  Use this command:
de: Angenommen Sie wollen "foobar" in "barfoo" ändern, aber nur in
    Kommentaren im Stil von C++. Diese Kommentare beginnen mit "//". Verwenden
    Sie diesen Befehl:

note: type: paragraph
en: This starts with ":g".  That is short for ":global", just like ":s" is short
    for ":substitute".  Then the pattern, enclosed in plus characters.  Since the
    pattern we are looking for contains a slash, this uses the plus character to
    separate the pattern.  Next comes the substitute command that changes "foobar"
    into "barfoo".
       The default range for the global command is the whole file.  Thus no range
    was specified in this example.  This is different from ":substitute", which
    works on one line without a range.
       The command isn't perfect, since it also matches lines where "//" appears
    halfway through a line, and the substitution will also take place before the
    "//".
de: Dies beginnt mit `:g`. Das ist eine Abkürzung für `:global`, so wie `:s`
    für `:substitute`. Dann das Muster, eingeschlossen in Pluszeichen. Weil,
    das Muster, das wir suchen, Schrägstriche enthält, verwendet dieses Beispiel
    Pluszeichen, um das Muster abzugrenzen. Als nächstes kommt der
    Ersetzungsbefehl, der "foobar" in "barfoo" ändert.
       Der Bereich für den Befehl `:global` ist als Vorgabe die ganze Datei.
    Somit wurde in diesem Beispiel kein Bereich angegeben. Dies unterscheidet
    sich zu `:substitute`, welches ohne Bereichsangabe auf einer Zeile
    arbeitet.
       Der Befehl ist nicht perfekt, weil er auch auf Zeilen übereinstimmt,
    wo "//" mitten in der Zeile steht, und die Ersetzung auch vor dem "//"
    stattfinden kann.

note: type: paragraph
en: Just like with ":substitute", any pattern can be used.  When you learn more
    complicated patterns later, you can use them here.
de: Ganz wie mit `:substitute` kann jegliches Muster verwendet werden. Wenn Sie
    später kompliziertere Muster lernen, können Sie sie hier verwenden.

note: type: paragraph
en: *10.5*	Visual block mode
de: *10.5*	Der Modus "Visueller Block"

note: type: paragraph
en: With CTRL-V you can start selection of a rectangular area of text.  There are
    a few commands that do something special with the text block.
de: Mit CTRL-V können Sie die Auswahl eines rechteckigen Textbereichs beginnen.
    Es gibt ein Paar Befehle, die etwas besonderes mit dem Textblock machen.

note: type: paragraph
en: There is something special about using the "$" command in Visual block mode.
    When the last motion command used was "$", all lines in the Visual selection
    will extend until the end of the line, also when the line with the cursor is
    shorter.  This remains effective until you use a motion command that moves the
    cursor horizontally.  Thus using "j" keeps it, "h" stops it.
de: Das Verwenden des Befehls `$` ist besonders im Modus visueller Block. Wenn
    der zuletzt verwendete Bewegungsbefehl `$` war, erstrecken sich alle Zeilen
    in der visuellen Auswahl bis zum Zeilenende, auch wenn die Zeile mit dem
    Cursor kürzer ist. Dies bleibt aktiv, bis Sie einen Bewegungsbefehl
    verwenden, der den Cursor horizontal bewegt. Somit behält dies `j` bei, `h`
    hebt es auf.

note: type: paragraph
en: INSERTING TEXT
de: TEXT EINGEBEN

note: type: paragraph
en: The command  "I{string}<Esc>" inserts the text {string} in each line, just
    left of the visual block.  You start by pressing CTRL-V to enter visual block
    mode.  Now you move the cursor to define your block.  Next you type I to enter
    Insert mode, followed by the text to insert.  As you type, the text appears on
    the first line only.
       After you press <Esc> to end the insert, the text will magically be
    inserted in the rest of the lines contained in the visual selection.  Example:
de: Der Befehl "I{Zeichenkette}<Esc> fügt den Text {Zeichenkette} in jeder
    Zeile gerade links von dem visuellen Block ein. Sie beginnen mit dem Drücken
    von CTRL-V um den visuellen Blockmodus zu betreten. Als nächstes tippen
    Sie I um den Einfügemodus zu betreten, gefolgt von dem einzufügenden Text.
    Während Sie tippen, erscheint der Text nur auf der ersten Zeile.
       Nachdem Sie <Esc> drücken, um die Eingabe zu beenden, erscheint der
    Text auf magische Weise auf den restlichen in der visuellen Auswahl
    enthaltenen Zeilen. Beispiel:

note: type: paragraph
en: Move the cursor to the "o" of "one" and press CTRL-V.  Move it down with "3j"
    to "four".  You now have a block selection that spans four lines.  Now type:
de: Bewegen Sie den Cursor zu dem "o" von "one" und drücken Sie CTRL-V. Gehen
    Sie mit "3j" nach "four" hinunter. Sie haben nun eine Blockauswahl, die
    vier Zeilen überspannt. Nun tippen Sie:

note: type: paragraph
en: The result:
de: Das Ergebnis:

note: type: paragraph
en: If the block spans short lines that do not extend into the block, the text is
    not inserted in that line.  For example, make a Visual block selection that
    includes the word "long" in the first and last line of this text, and thus has
    no text selected in the second line:
de: Falls der Block kurze Zeilen überspannt, die sich nicht in den Block
    erstrecken, wird der Text in diesen Zeilen nicht eingefügt. Machen Sie zum
    Beispiel in diesem Text eine visuelle Blockauswahl, die das Wort "lange"
    enthält, und somit keinen Text in der zweiten Zeile auswählt:

note: type: column heading
en: 	This is a long line
    	short
    	Any other long line
de: 	Dies ist eine lange Zeile
    	kurz ~
    	Und noch eine lange Zeile

note: type: paragraph
en: ^^^^ selected block
de:     ^^^^^ ausgewählter Block

note: type: paragraph
en: Now use the command "Ivery <Esc>".  The result is:
de: Nun verwenden Sie den Befehl "Isehr <Esc>". Das Ergebnis ist:

note: type: column heading
en: 	This is a very long line
    	short
    	Any other very long line
de: 	Dies ist eine sehr lange Zeile
    	kurz
    	Und noch eine sehr lange Zeile

note: type: paragraph
en: In the short line no text was inserted.
de: In der kurzen Zeile wurde kein Text eingefügt.

note: type: paragraph
en: If the string you insert contains a newline, the "I" acts just like a Normal
    insert command and affects only the first line of the block.
de: Falls die eingegebene Zeichenkette einen Zeilenvorschub enthält, verhält sich
    das `I` ganz wie der normale Einfügebefehl und fügt nur in der ersten Zeile
    des Blocks ein.

note: type: paragraph
en: The "A" command works the same way, except that it appends after the right
    side of the block.  And it does insert text in a short line.  Thus you can
    make a choice whether you do or don't want to append text to a short line.
       There is one special case for "A": Select a Visual block and then use "$"
    to make the block extend to the end of each line.  Using "A" now will append
    the text to the end of each line.
       Using the same example from above, and then typing "$A XXX<Esc>, you get
    this result:
de: Der Befehl `A` arbeitet auf dieselbe Weise, außer dass er hinter der
    rechten Seite des Blocks anhängt. Und er fügt Text in einer kurzen Zeile
    ein. Somit können Sie eine Auswahl machen, ob Sie Text in einer kurzen
    Zeile anhängen wollen oder nicht.
       Es gibt einen speziellen Fall für `A`: Wählen Sie einen visuellen
    Block aus und benutzen Sie dann `$` um den Block sich an das Ende jeder Zeile
    erstrecken zu lassen. Das benutzen von `A` hängt den Text nun an das Ende
    jeder Zeile an.
       Das Beispiel von oben benutzend und dann "$A XXX<Esc>" tippend
    erhalten Sie dieses Ergebnis:

note: type: column heading
en: 	This is a long line XXX
    	short XXX
    	Any other long line XXX
de: 	Dies ist eine lange Zeile XXX
    	kurz XXX
    	Und noch eine lange Zeile XXX

note: type: paragraph
en: This really requires using the "$" command.  Vim remembers that it was used.
    Making the same selection by moving the cursor to the end of the longest line
    with other movement commands will not have the same result.
de: Dies erfordert wirklich den Befehl `$`. Vim merkt sich, dass er verwendet
    wurde. Dieselbe Auswahl machend, indem der Cursor mit anderen
    Bewegungsbefehlen an das Ende der längsten Zeile verwendet wird, hat nicht
    dasselbe Ergebnis.

note: type: paragraph
en: CHANGING TEXT
de: TEXT ÄNDERN

note: type: paragraph
en: The Visual block "c" command deletes the block and then throws you into Insert
    mode to enable you to type in a string.  The string will be inserted in each
    line in the block.
       Starting with the same selection of the "long" words as above, then typing
    "c_LONG_<Esc>", you get this:
de: Der Befehl `c` auf einem visuellen Block löscht den Block und bringt Sie
    dann in den Einfügemodus, um Sie eine Zeichenkette tippen zu lassen. Die
    Zeichenkette wird dann in jeder Zeile des Blocks eingefügt.
       Beginnend mit derselben Auswahl der Worte "lange" wie oben und dann
    "c_LANGE_<Esc> tippend erhalten Sie dies:

note: type: column heading
en: 	This is a _LONG_ line
    	short
    	Any other _LONG_ line
de: 	Dies ist eine _LANGE_ Zeile
    	kurz
    	Und noch eine _LANGE_ Zeile

note: type: paragraph
en: Just like with "I" the short line is not changed.  Also, you can't enter a
    newline in the new text.
de: Genau wie bei "I" wird die kurze Zeile nicht verändert. Auch können Sie in
    dem neuen Text keinen Zeilenvorschub eingeben.

note: type: paragraph
en: The "C" command deletes text from the left edge of the block to the end of
    line.  It then puts you in Insert mode so that you can type in a string,
    which is added to the end of each line.
       Starting with the same text again, and typing "Cnew text<Esc>" you get:
de: Der Befehl `C` löscht Text von der linken Kante des Blocks zum Zeilenende.
    Er bringt Sie dann in den Einfügemodus so dass Sie eine Zeichenkette
    eingeben können, die an das Ende jeder Zeile angefügt wird.
       Wieder mit demselben Text beginnend und dann "Cneue Nachricht<Esc>"
    erhalten Sie:

note: type: column heading
en: 	This is a new text
    	short
    	Any other new text
de: 	Dies ist eine neue Nachricht
    	kurz
    	Und noch eine neue Nachricht

note: type: paragraph
en: Notice that, even though only the "long" word was selected, the text after it
    is deleted as well.  Thus only the location of the left edge of the visual
    block really matters.
       Again, short lines that do not reach into the block are excluded.
de: Beachten Sie dass, obwohl nur das Wort "lange" ausgewählt wurde, auch der
    Text danach ebenso gelöscht wird. Somit ist nur die Stelle der linken
    Kante des visuellen Blocks wirklich entscheidend.
       Wieder werden kurze Zeilen, die nicht in den Block reichen, ausgenommen.

note: type: paragraph
en: Other commands that change the characters in the block:
de: Andere Befehle die die Zeichen im Block ändern:

note: type: paragraph
en: ~	swap case	(a -> A and A -> a)
    U	make uppercase  (a -> A and A -> A)
    u	make lowercase  (a -> a and A -> a)
de: ~	Groß-/Kleinschreibung vertauschen (a -> A und A -> a)
    U	alles groß schreiben (a -> A und A -> A)
    u	alles klein schreiben (a -> a und A -> a)

note: type: paragraph
en: FILLING WITH A CHARACTER
de: MIT EINEM ZEICHEN FÜLLEN

note: type: paragraph
en: To fill the whole block with one character, use the "r" command.  Again,
    starting with the same example text from above, and then typing "rx":
de: Um den ganzen Block mit einem Zeichen zu füllen, verwenden Sie den Befehl
    `r`. Wieder mit demselben Beispieltext von oben beginnend und dann "rx"
    tippend:

note: type: column heading
en: 	This is a xxxx line
    	short
    	Any other xxxx line
de: Dies ist eine xxxxx Zeile
    kurz
    Und noch eine xxxxx Zeile

note: type: paragraph
en: Note:
    If you want to include characters beyond the end of the line in the
    block, check out the 'virtualedit' feature in chapter 25.
de: Anmerkung:
    Falls Sie Zeichen über das Ende der Zeile hinaus einbeziehen wollen,
    lesen Sie über die Fähigkeit 'virtualedit' in Kapitel 25.

note: type: paragraph
en: SHIFTING
de: SCHIEBEN

note: type: paragraph
en: The command ">" shifts the selected text to the right one shift amount,
    inserting whitespace.  The starting point for this shift is the left edge of
    the visual block.
       With the same example again, ">" gives this result:
de: Der Befehl `>` schiebt die Textauswahl um einen Schiebebetrag nach rechts,
    indem Leerraum eingefügt wird. Der Startpunkt für diese Verschiebung ist
    die linke Kante des visuellen Blocks.
       Wieder mit demselben Beispiel ergibt `>` dieses Ergebnis:

note: type: column heading
en: 	This is a	  long line
    	short
    	Any other	  long line
de: 	Dies ist eine        lange Zeile
    	kurz
    	Und noch eine        lange Zeile

note: type: paragraph
en: The shift amount is specified with the 'shiftwidth' option.  To change it to
    use 4 spaces:
de: Der Schiebebetrag wird mit der Option 'shiftwidth' angegeben. Um ihn auf vier
    Leerzeichen zu ändern:

note: type: paragraph
en: The "<" command removes one shift amount of whitespace at the left
    edge of the block.  This command is limited by the amount of text that is
    there; so if there is less than a shift amount of whitespace available, it
    removes what it can.
de: Der Befehl `<` entfernt einen Schiebebetrag an Leerraum an der linken Kante
    des Blocks. Dieser Befehl wird beschränkt durch den Betrag an Text, der
    vorhanden ist; falls also weniger als ein Schiebebetrag an Leerraum verfügbar
    ist, entfernt der Befehl was möglich ist.

note: type: paragraph
en: JOINING LINES
de: ZEILEN ZUSAMMENFÜGEN

note: type: paragraph
en: The "J" command joins all selected lines together into one line.  Thus it
    removes the line breaks.  Actually, the line break, leading white space and
    trailing white space is replaced by one space.  Two spaces are used after a
    line ending (that can be changed with the 'joinspaces' option).
       Let's use the example that we got so familiar with now.  The result of
    using the "J" command:
de: Der Befehl `J` fügt alle ausgewählten Zeilen zu einer Zeile zusammen. Somit
    entfernt er die Zeilenvorschübe. Tatsächlich wird der Zeilenvorschub,
    führender Leerraum und nachstehender Leerraum durch ein Leerzeichen
    ersetzt. Zwei Leerzeichen werden bei einem Satzende verwendet (dies kann mit
    der Option 'joinspaces' geändert werden.
       Verwenden wir das Beispiel, das uns nun so vertraut ist. Das Ergebnis des
    Befehls `J`:

note: type: column heading
en: 	This is a long line short Any other long line
de: 	Dies ist eine lange Zeile kurz Und noch eine lange Zeile

note: type: paragraph
en: The "J" command doesn't require a blockwise selection.  It works with "v" and
    "V" selection in exactly the same way.
de: Der Befehl `J` erfordert keine blockweise Auswahl. Er funktioniert mit der
    Auswahl durch `v` und `V` in exakt derselben Weise.

note: type: paragraph
en: If you don't want the white space to be changed, use the "gJ" command.
de: Falls Sie den Leerraum nicht geändert haben wollen, verwenden Sie den Befehl
    `gJ`.

note: type: paragraph
en: *10.6*	Reading and writing part of a file
de: *10.6*	Teile einer Datei lesen und schreiben

note: type: paragraph
en: When you are writing an e-mail message, you may want to include another file.
    This can be done with the ":read {filename}" command.  The text of the file is
    put below the cursor line.
       Starting with this text:
de: Wenn Sie eine Email-Nachricht schreiben, mögen Sie eine andere Datei
    einfügen wollen. Dies kann mit dem Befehl ":read {Dateiname}" erledigt
    werden. Der Text der Datei wird gerade unter der Cursor-Zeile eingefügt.
       Wir beginnen mit diesem Text:

note: type: column heading
en: 	Hi John,
    	Here is the diff that fixes the bug:
    	Bye, Pierre.
de: Hi John,
    Hier ist das Diff, das den Fehler behebt:
    Tschüss, Pierre.

note: type: paragraph
en: Move the cursor to the second line and type:
de: Wir bewegen den Cursor in die zweite Zeile und tippen:

note: type: paragraph
en: The file named "patch" will be inserted, with this result:
de: Die Datei names "patch" wird eingefügt, mit diesem Ergebnis:

note: type: column heading
en: 	Hi John,
    	Here is the diff that fixes the bug:
    	2c2
    	<	for (i = 0; i <= length; ++i)
    	---
    	>	for (i = 0; i < length; ++i)
    	Bye, Pierre.
de: Hi John,
    Hier ist das Diff, das den Fehler behebt:
    2c2
    <	for (i = 0; i <= length; ++i)
    ---
    >	for (i = 0; i < length; ++i)
    Tschüss, Pierre.

note: type: paragraph
en: The ":read" command accepts a range.  The file will be put below the last line
    number of this range.  Thus ":$r patch" appends the file "patch" at the end of
    the file.
       What if you want to read the file above the first line?  This can be done
    with the line number zero.  This line doesn't really exist, you will get an
    error message when using it with most commands.  But this command is allowed:
de: Der Befehl `:read` akzeptiert einen Bereich. Die Datei wird unter die
    letzte Zeile dieses Bereichs platziert. Somit hängt ":$r patch" die Datei
    "patch" an das Ende der Datei an.
       Was wenn `:read` die Datei über der ersten Zeile einfügen soll? Dies kann
    mit der Zeilennummer Null erledigt werden. Diese Zeile existiert nicht
    wirklich, bei den meisten Befehlen erhalten Sie bei ihrer Verwendung eine
    Fehlermeldung. Aber dieser Befehl ist erlaubt:

note: type: paragraph
en: The file "patch" will be put above the first line of the file.
de: Die Datei "patch" wird über der ersten Zeile der Datei platziert.

note: type: paragraph
en: WRITING A RANGE OF LINES
de: EINEN ZEILENBEREICH SCHREIBEN

note: type: paragraph
en: To write a range of lines to a file, the ":write" command can be used.
    Without a range it writes the whole file.  With a range only the specified
    lines are written:
de: Der Befehl `:write` kann verwendet werden, um einen Bereich von Zeilen in
    eine Datei zu schreiben. Ohne einen Bereich schreibt er die ganze Datei. Mit
    einem Bereich werden nur die angegebenen Zeilen geschrieben:

note: type: paragraph
en: This writes the lines from the cursor until the end of the file into the file
    "tempo".  If this file already exists you will get an error message.  Vim
    protects you from accidentally overwriting an existing file.  If you know what
    you are doing and want to overwrite the file, append !:
de: Dies schreibt die Zeilen vom Cursor bis zum Dateiende in die Datei "tempo".
    Falls diese Datei bereits existiert, erhalten Sie eine Fehlermeldung. Vim
    schützt Sie davor, aus Versehen eine existierend Datei zu überschreiben.
    Falls Sie wissen, was Sie tun und die Datei überschreiben wollen, hängen Sie
    ein "!" an:

note: type: paragraph
en: CAREFUL: The ! must follow the ":write" command immediately, without white
    space.  Otherwise it becomes a filter command, which is explained later in
    this chapter.
de: VORSICHT: Das "!" muss dem Befehl `:write` unmittelbar folgen, ohne
    Leerraum. Anderenfalls wird es ein Filterbefehl, die weiter unten in diesem
    Kapitel erklärt werden.

note: type: paragraph
en: APPENDING TO A FILE
de: AN EINE DATEI ANHÄNGEN

note: type: paragraph
en: In the first section of this chapter was explained how to collect a number of
    lines into a register.  The same can be done to collect lines in a file.
    Write the first line with this command:
de: Im ersten Abschnitt dieses Kapitels wurde erklärt, wie man eine Anzahl von
    Zeilen in ein Register sammelt. Dasselbe kann gemacht werden, um Zeilen in
    eine Datei zu sammeln. Schreiben Sie die erste Zeile mit diesem Befehl:

note: type: codeblock
en: :.write collection
de: :.write sammlung

note: type: paragraph
en: Now move the cursor to the second line you want to collect, and type this:
de: Nun bewegen Sie den Cursor in die zweite Zeile, die Sie sammeln möchten, und
    tippen Sie dies:

note: type: codeblock
en: :.write >>collection
de: :.write >>sammlung

note: type: paragraph
en: The ">>" tells Vim the "collection" file is not to be written as a new file,
    but the line must be appended at the end.   You can repeat this as many times
    as you like.
de: ">>" sagt Vim, dass die Datei "sammlung" nicht als eine neue Datei
    geschrieben werden soll, sondern dass die Zeile am Ende angehängt werden
    soll. Sie können dies so oft Sie mögen wiederholen.

note: type: paragraph
en: *10.7*	Formatting text
de: *10.7*	Text formatieren

note: type: paragraph
en: When you are typing plain text, it's nice if the length of each line is
    automatically trimmed to fit in the window.  To make this happen while
    inserting text, set the 'textwidth' option:
de: Wenn Sie einfachen Text schreiben, ist es nett wenn die Länge jeder Zeile
    automatisch gestutzt wird, um in das Fenster zu passen. Setzen Sie die Option
    'textwidth', um dies beim Eingeben von Text geschehen zu lassen:

note: type: paragraph
en: You might remember that in the example vimrc file this command was used for
    every text file.  Thus if you are using that vimrc file, you were already
    using it.  To check the current value of 'textwidth':
de: Sie mögen sich erinnern, dass in der Beispiel-Vimrc-Datei dieser Befehl für
    jede Textdatei verwendet wurde. Falls Sie also diese Vimrc-Datei verwenden,
    haben Sie die Option bereits verwendet. Um den aktuellen Wert von 'textwidth'
    zu prüfen:

note: type: paragraph
en: Now lines will be broken to take only up to 72 characters.  But when you
    insert text halfway through a line, or when you delete a few words, the lines
    will get too long or too short.  Vim doesn't automatically reformat the text.
       To tell Vim to format the current paragraph:
de: Nun werden Zeilen so umbrochen, dass sie bis zu 72 Zeichen aufnehmen. Aber
    wenn Sie in der Mitte einer Zeile Text einfügen oder ein Paar Worte
    löschen, werden die Zeilen zu lang oder zu kurz. Vim formatiert den Text
    nicht automatisch neu.
       Um Vim den aktuellen Absatz formatieren zu lassen:

note: type: paragraph
en: This starts with the "gq" command, which is an operator.  Following is "ap",
    the text object that stands for "a paragraph".  A paragraph is separated from
    the next paragraph by an empty line.
de: Dies beginnt mit dem Befehl `gq`, was ein Operator ist. Es folgt "ap", das
    Textobjekt, das für "a paragraph" (einen Absatz) steht. Absätze werden von
    einander durch eine Leerzeile getrennt.

note: type: paragraph
en: Note:
    A blank line, which contains white space, does NOT separate
    paragraphs.  This is hard to notice!
de: Anmerkung:
    Eine Leerzeile, die Leerraum enthält, trennt NICHT Absätze. Dies
    ist schwer zu erkennen!

note: type: paragraph
en: Instead of "ap" you could use any motion or text object.  If your paragraphs
    are properly separated, you can use this command to format the whole file:
de: Statt "ap" können Sie jeglichen Bewegungsbefehl oder jegliches Textobjekt
    verwenden. Falls Ihre Absätze korrekt getrennt sind, können Sie diesen Befehl
    verwenden, um die ganze Datei zu formatieren:

note: type: paragraph
en: "gg" takes you to the first line, "gq" is the format operator and "G" the
    motion that jumps to the last line.
de: `gg` bringt Sie in die erste Zeile, `gq` ist der Formatierungsoperator und
    `G` der Bewegungsbefehl, der in die letzte Zeile springt.

note: type: paragraph
en: In case your paragraphs aren't clearly defined, you can format just the lines
    you manually select.  Move the cursor to the first line you want to format.
    Start with the command "gqj".  This formats the current line and the one below
    it.  If the first line was short, words from the next line will be appended.
    If it was too long, words will be moved to the next line.  The cursor moves to
    the second line.  Now you can use "." to repeat the command.  Keep doing this
    until you are at the end of the text you want to format.
de: Im Falle dass Ihre Absätze nicht klar definiert sind, können Sie nur die
    Zeilen formatieren, die Sie von Hand auswählen. Bewegen Sie den Cursor in die
    erste Zeile, die Sie formatieren wollen. Beginnen Sie mit dem Befehl "gqj".
    Dies formatiert die aktuelle Zeile und die Zeile darunter. Falls die erste
    Zeile kurz war, werden Wörter von der nächsten Zeile angehängt. Falls sie zu
    lang war, werden Wörter in die nächste Zeile geschoben. Der Cursor bewegt
    sich in die zweite Zeile. Nun können Sie `.` verwenden, um den Befehl zu
    wiederholen. Fahren Sie so fort bis Sie am Ende des Texts sind, den Sie
    formatieren wollen.

note: type: paragraph
en: *10.8*	Changing case
de: *10.8*	Groß-/Kleinschreibung ändern

note: type: paragraph
en: You have text with section headers in lowercase.  You want to make the word
    "section" all uppercase.  Do this with the "gU" operator.  Start with the
    cursor in the first column:
de: Sie haben Text mit Abschnittskopfzeilen in Kleinschreibung. Sie wollen das
    Wort "abschnitt" komplett groß machen. Tun Sie dies mit dem Operator `gU`.
    Beginnen Sie mit dem Cursor auf dem a:

note: type: codeblock
en: gUw
de: gUe

note: type: paragraph
en: section header	    ---->      SECTION header
de: kopfzeile abschnitt ----> kopfzeile ABSCHNITT

note: type: paragraph
en: The "gu" operator does exactly the opposite:
de: Der Operator `gu` tut das genaue Gegenteil:

note: type: codeblock
en: guw
de: gue

note: type: paragraph
en: SECTION header	    ---->      section header
de: kopfzeile ABSCHNITT ----> kopfzeile abschnitt

note: type: paragraph
en: You can also use "g~" to swap case.  All these are operators, thus they work
    with any motion command, with text objects and in Visual mode.
       To make an operator work on lines you double it.  The delete operator is
    "d", thus to delete a line you use "dd".  Similarly, "gugu" makes a whole line
    lowercase.  This can be shortened to "guu".  "gUgU" is shortened to "gUU" and
    "g~g~" to "g~~".  Example:
de: Sie können auch `g~` verwenden, um Groß-/Kleinschreibung zu vertauschen.
    Diese drei sind Operatoren, also funktionieren sie mit jedem
    Bewegungsbefehl, mit Textobjekten und im visuellen Modus.
       Um einen Operator auf Zeilen arbeiten zu lassen verdoppeln Sie ihn. Der
    Lösch-Operator ist `d`, somit verwenden Sie `dd` um eine Zeile zu löschen
    Ähnlich verwandelt "gugu" eine ganze Zeile in Kleinschreibung. Dies kann
    zu "guu" abgekürzt werden. "gUgU" verkürzt sich zu "gUU" und "g~g~" zu
    "g~~". Beispiel:

note: type: column heading
en: 	Some GIRLS have Fun    ---->   sOME girls HAVE fUN
de: Manche MÄDCHEN haben Spaß ----> mANCHE mädchen HABEN sPAß

note: type: paragraph
en: *10.9*	Using an external program
de: *10.9*	Ein externes Programm verwenden

note: type: paragraph
en: Vim has a very powerful set of commands, it can do anything.  But there may
    still be something that an external command can do better or faster.
       The command "!{motion}{program}" takes a block of text and filters it
    through an external program.  In other words, it runs the system command
    represented by {program}, giving it the block of text represented by {motion}
    as input.  The output of this command then replaces the selected block.
       Because this summarizes badly if you are unfamiliar with UNIX filters, take
    a look at an example.  The sort command sorts a file.  If you execute the
    following command, the unsorted file input.txt will be sorted and written to
    output.txt.  (This works on both UNIX and Microsoft Windows.)
de: Vim hat eine sehr mächtige Menge an Befehlen, die alles erledigen kann. Aber
    es mag immer noch einen externen Befehl geben, der etwas besser oder
    schneller tun kann.
       Der Befehl "!{Bewegung}{Programm} nimmt einen Textblock und filtert ihn
    durch ein externes Programm. Mit anderen Worten: er führt den System-
    Befehl, der durch {Programm} repräsentiert wird, aus, und übergibt ihm
    dabei den durch {Bewegung} repräsentierten Textblock als Eingabe. Dann
    ersetzt die Ausgabe dieses Befehls den ausgewählten Block.
       Weil dies eine schlechte Zusammenfassung ist, falls Sie nicht mit
    Filtern unter UNIX vertraut sind, schauen wir auf ein Beispiel. Der Befehl
    sort sortiert eine Datei. Wenn Sie den folgenden Befehl ausführen, wird
    die unsortierte Datei Eingabe.txt sortiert und nach Ausgabe.txt
    geschrieben. (Dies funktioniert sowohl unter UNIX wie auch unter
    Microsoft Windows.)

note: type: codeblock
en: sort <input.txt >output.txt
de: sort <Eingabe.txt >Ausgabe.txt

note: type: paragraph
en: Now do the same thing in Vim.  You want to sort lines 1 through 5 of a file.
    You start by putting the cursor on line 1.  Next you execute the following
    command:
de: Nun tun Sie dasselbe in Vim. Sie wollen die Zeilen 1 bis 5 einer Datei
    sortieren. Sie beginnen, indem Sie den Cursor auf Zeile 1 setzen. Als
    nächstes führen Sie folgenden Befehl aus:

note: type: paragraph
en: The "!" tells Vim that you are performing a filter operation.  The Vim editor
    expects a motion command to follow, indicating which part of the file to
    filter.  The "5G" command tells Vim to go to line 5, so it now knows that it
    is to filter lines 1 (the current line) through 5.
       In anticipation of the filtering, the cursor drops to the bottom of the
    screen and a ! prompt displays.  You can now type in the name of the filter
    program, in this case "sort".  Therefore, your full command is as follows:
de: Das "!" sagt Vim, dass Sie eine Filter-Operation durchführen. Der Editor
    Vim erwartet, dass ein Bewegungsbefehl folgt, der angibt welcher Teil der
    Datei gefiltert werden soll. Der Befehl "5G" lässt Vim in Zeile 5 gehen,
    so dass er nun weiß, dass die Zeilen eins (die aktuelle Zeile) bis fünf
    gefiltert werden sollen.
       In Erwartung des Filterns springt der Cursor an den unteren Rand des
    Bildschirms und eine "!"-Eingabeaufforderung erscheint. Nun können Sie den
    Namen des Filterprogramms tippen, in diesem Fall "sort". Somit ist der
    vollständige Befehl:

note: type: paragraph
en: The result is that the sort program is run on the first 5 lines.  The output
    of the program replaces these lines.
de: Das Ergebnis ist, dass das Programm sort auf den ersten fünf Zeilen
    ausgeführt wird. Die Ausgabe des Programms ersetzt diese Zeilen.

note: type: paragraph
en: line 55			      line 11
    line 33			      line 22
    line 11		-->	      line 33
    line 22			      line 44
    line 44			      line 55
    last line		      last line
de: Zeile 55			     Zeile 11
    Zeile 33			     Zeile 22
    Zeile 11		-->	     Zeile 33
    Zeile 22			     Zeile 44
    Zeile 44			     Zeile 55
    letzte Zeile			    letzte Zeile

note: type: paragraph
en: The "!!" command filters the current line through a filter.  In Unix the "date"
    command prints the current time and date.  "!!date<Enter>" replaces the current
    line with the output of "date".  This is useful to add a timestamp to a file.
de: Der Befehl `!!` filtert die aktuelle Zeile durch einen Filter. Unter Unix
    gibt der Befehl "date" das aktuelle Datum und die Uhrzeit aus.
    "!!date<Enter>" ersetzt die aktuelle Zeile mit der Ausgabe von "date".
    Dies ist nützlich, um einer Datei einen Zeitstempel hinzuzufügen.

note: type: paragraph
en: Note: There is a difference between "!cmd" (e.g. using it without any file
    range) and "{range}!cmd".  While the former will simply execute the external
    command and Vim will show the output, the latter will filter {range}lines
    through the filter and replace that range by the result of the filter command.
    See |:!| and |:range!| for details.
de: Anmerkung: Es gibt einen Unterschied zwischen "!Befehl" (d.h. es ohne
    jeglichen Dateibereich zu verwenden) und "{Bereich}!{Befehl}". Während
    ersteres einfach den externen Befehl ausführt und Vim zeigt seine Ausgabe an,
    filtert letzteres {Bereich} Zeilen durch den Filter und ersetzt diesen
    Bereich durch das Ergebnis des Filterbefehls. Lesen Sie |:!| und |:range!|
    für Details.

note: type: paragraph
en: WHEN IT DOESN'T WORK
de: WENN ES NICHT FUNKTIONIERT

note: type: paragraph
en: Starting a shell, sending it text and capturing the output requires that Vim
    knows how the shell works exactly.  When you have problems with filtering,
    check the values of these options:
de: Eine Shell starten, ihr Text schicken und die Ausgabe auffangen erfordert,
    dass Vim weiß, wie die Shell genau arbeitet. Wenn Sie Probleme mit dem
    Filtern haben, überprüfen Sie die Werte dieser Optionen:

note: type: paragraph
en: 'shell'		specifies the program that Vim uses to execute
    		external programs.
    'shellcmdflag'	argument to pass a command to the shell
    'shellquote'	quote to be used around the command
    'shellxquote'	quote to be used around the command and redirection
    'shelltype'	kind of shell (only for the Amiga)
    'shellslash'	use forward slashes in the command (only for
    		MS-Windows and alikes)
    'shellredir'	string used to write the command output into a file
de: 'shell'		gibt das Programm an, das Vim verwendet, um
    		externe Befehle auszuführen.
    'shellcmdflag'	Argument, um einen Befehl an eine
    		Shell weiterzureichen.
    'shellquote'	Zitatzeichen, das um den Befehl
    		verwendet werden soll.
    'shellxquote'	Zitatzeichen, das um Befehl und
    		Umleitung verwendet werden soll.
    'shelltype'	Art der Shell (Nur für den Amiga)
    'shellslash'	Schrägstriche im Befehl verwenden
    		(Nur für MS-Windows und ähnliche).
    'shellredir'	Zu verwendende Zeichenkette um die Ausgabe
    		des Befehl in eine Datei zu schreiben.

note: type: paragraph
en: On Unix this is hardly ever a problem, because there are two kinds of shells:
    "sh" like and "csh" like.  Vim checks the 'shell' option and sets related
    options automatically, depending on whether it sees "csh" somewhere in
    'shell'.
       On MS-Windows, however, there are many different shells and you might have
    to tune the options to make filtering work.  Check the help for the options
    for more information.
de: Unter Unix ist dies kaum jemals ein Problem, weil es zwei Arten von Shells
    gibt: "sh"-ähnliche und "csh"-ähnliche. Vim prüft die Option 'shell' und
    setzt die bezogenen Optionen automatisch, abhängig davon, ob er irgendwo
    in 'shell' "csh" sieht.
       Unter MS-Windows gibt es jedoch viele verschiedene Shells, und
    möglicherweise müssen Sie diese Optionen justieren, damit das Filtern
    funktioniert. Lesen Sie die Hilfe der Optionen für weitere
    Informationen.

note: type: paragraph
en: READING COMMAND OUTPUT
de: DIE AUSGABE EINES BEFEHLS LESEN

note: type: paragraph
en: To read the contents of the current directory into the file, use this:
de: Verwenden Sie dies, um den Inhalt des aktuellen Verzeichnisses in die Datei
    einzulesen:

note: type: paragraph
en: on Unix:
de: unter Unix:

note: type: paragraph
en: on MS-Windows:
de: unter MS-Windows:

note: type: paragraph
en: The output of the "ls" or "dir" command is captured and inserted in the text,
    below the cursor.  This is similar to reading a file, except that the "!" is
    used to tell Vim that a command follows.
       The command may have arguments.  And a range can be used to tell where Vim
    should put the lines:
de: Die Ausgabe des Befehls "ls" oder "dir" wird aufgefangen und in den Text
    eingefügt, unterhalb des Cursors. Dies ähnelt dem Einlesen einer Datei,
    außer dass das "!" Vim sagen lässt, dass ein Befehl folgt.
       Der Befehl kann Argumente haben. Und ein Bereich kann verwendet werden,
    um Vim zu sagen, wohin die Zeilen platziert werden sollen:

note: type: paragraph
en: This inserts the current time and date in UTC format at the top of the file.
    (Well, if you have a date command that accepts the "-u" argument.)  Note the
    difference with using "!!date": that replaced a line, while ":read !date" will
    insert a line.
de: Dies fügt das aktuelle Datum und die Uhrzeit im UTC-Format am Anfang der
    Datei ein (falls Ihr Befehl date das Argument "-u" akzeptiert). Beachten
    Sie den Unterschied zum Verwenden von "!!date": das ersetzt eine Zeile,
    während ":read !date" eine Zeile einfügt.

note: type: paragraph
en: WRITING TEXT TO A COMMAND
de: TEXT IN EINEN BEFEHL SCHREIBEN

note: type: paragraph
en: The Unix command "wc" counts words.  To count the words in the current file:
de: Der Unix-Befehl "wc" zählt Wörter. Um die Wörter in der aktuellen Datei zu
    zählen:

note: type: paragraph
en: This is the same write command as before, but instead of a file name the "!"
    character is used and the name of an external command.  The written text will
    be passed to the specified command as its standard input.  The output could
    look like this:
de: Dies ist derselbe `:write`-Befehl wie vorher, doch statt eines Dateinamens
    wird das Zeichen "!" und der Name eines externen Programms verwendet. Der
    geschriebene Text wird dem angegebenen Befehl auf seiner Standardeingabe
    übergeben. Die Ausgabe könnte so aussehen:

note: type: paragraph
en: The "wc" command isn't verbose.  This means you have 4 lines, 47 words and 249
    characters.
de: Der Befehl "wc" ist nicht wortreich. Dies bedeutet, dass Sie vier Zeilen,
    47 Wörter und 249 Zeichen haben.

note: type: paragraph
en: Watch out for this mistake:
de: Achten Sie auf diesen Fehler:

note: type: paragraph
en: This will write the file "wc" in the current directory, with force.  White
    space is important here!
de: Dies erzwingt das Schreiben der Datei "wc" im aktuellen Verzeichnis. Hier
    ist das Leerzeichen wichtig!

note: type: paragraph
en: REDRAWING THE SCREEN
de: DEN BILDSCHIRM AUFFRISCHEN

note: type: paragraph
en: If the external command produced an error message, the display may have been
    messed up.  Vim is very efficient and only redraws those parts of the screen
    that it knows need redrawing.  But it can't know about what another program
    has written.  To tell Vim to redraw the screen:
de: Falls der externe Befehl eine Fehlermeldung ausgegeben hat, kann die Anzeige
    durcheinandergebracht worden sein. Vim ist sehr effizient und frischt nur die
    Teile des Bildschirms auf, von denen er weiß, dass sie aufgefrischt werden
    müssen. Aber er kann nicht wissen, was ein anderes Programm geschrieben hat.
    Um Vim den Bildschirm auffrischen zu lassen:

note: type: paragraph
en: Next chapter: |usr_11.txt|  Recovering from a crash
de: Nächstes Kapitel: |usr_11.txt|  Nach einem Absturz retten

note: type: paragraph
en: Copyright: see |manual-copyright|  vim:tw=78:ts=8:noet:ft=help:norl:
de: Copyright: siehe |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl:
