File: usr_12.dex

package info (click to toggle)
vimhelp-de 7.3.101122-2
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 660 kB
  • sloc: makefile: 34
file content (386 lines) | stat: -rw-r--r-- 15,391 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
*usr_12.txt*	Für Vim Version 7.3.  Letzte Änderung: 2007-Mai-11

		     VIM BENUTZERHANDBUCH - von Bram Moolenaar

				Klevere Tricks


Durch das Kombinieren mehrerer Befehle können Sie Vim fast alles tun
lassen.  In diesem Kapitel werden ein Paar nützliche Kombinationen
gezeigt.  Diese benutzen die in den vorigen Kapiteln eingeführten Befehle
und ein paar mehr.

|12.1|	Ein Wort ersetzen
|12.2|	»Nachname, Vorname« in »Vorname Nachname« ändern
|12.3|	Eine Liste sortieren
|12.4|	Umgekehrte Zeilenreihenfolge
|12.5|	Wörter zählen
|12.6|	Eine Man-Page finden
|12.7|	Leerzeichen abschneiden
|12.8|	Herausfinden, wo ein Wort benutzt wird

Nächstes Kapitel: |usr_20.txt| Befehle auf der Befehlszeile schnell tippen
 Voriges Kapitel: |usr_11.txt| Nach einem Absturz retten
Inhaltsübersicht: |usr_toc.txt|

==============================================================================
*12.1*	Ein Wort ersetzen

Der Ersetzungsbefehl »substitute« kann benutzt werden, um jedes Auftreten
eines Wortes durch ein anderes Wort zu ersetzen: >

	:%s/four/4/g

Der Bereich »%« bedeutet, dass in allen Zeilen ersetzt werden soll.  Das Flag
»g« am Ende veranlasst, dass jedes Auftreten des Wortes in einer Zeile ersetzt
wird.
   Dies tut nicht das Richtige, falls Ihre Datei auch »thirtyfour« enthält.
Dies würde durch »thirty4« ersetzt.  Benutzen Sie das Element »\<«, das den
Anfang eines Wortes sucht, um dies zu vermeiden: >

	:%s/\<four/4/g

Dies geht offensichtlich noch bei »fourteen« daneben.  Benutzen Sie
»\>«, das ein Wortende sucht: >

	:%s/\<four\>/4/g

Falls Sie programmieren, mögen Sie »four« in Kommentaren ersetzen wollen,
aber nicht im Kode.  Da dies schwer zu formulieren ist, fügen Sie das Flag
»c« hinzu, das den Befehl »substitute« Sie bei jeder Ersetzung fragen
lässt: >


	:%s/\<four\>/4/gc


IN MEHREREN DATEIEN ERSETZEN

Nehmen wir an, Sie wollen ein Wort in mehr als einer Datei ersetzen.  Sie
könnten jede Datei einzeln editieren und den Befehl manuell tippen.  Es ist
viel schneller die Aufnahme- und Abspiel-Funktion zu benutzen.
  Nehmen wir weiter an, Sie haben ein Verzeichnis mit C++-Dateien, die alle
auf .cpp enden.  Es gibt eine Funktion »GetResp«, die Sie in »GetAnswer«
umbenennen wollen.

	vim *.cpp		Starte Vim und definiere, dass alle C++-
				Dateien in der Argumentenliste sind.
	qq			Starte die Aufnahme in das Register »q«
	:%s/\<GetResp\>/GetAnswer/g
				Mache die Ersetzungen in der ersten Datei.
	:wnext			Schreibe diese Datei und gehe zur nächsten.
	q			Beende die Aufnahme.
	@q			Führe das Register »q« aus.  Dies spielt den
				Substitutionsbefehl und das »:wnext« ab.  Sie
				können sicherstellen, dass dies keine
				Fehlermeldung ausgibt.
	999q			Führe das Register »q« für die übrigen Dateien
				aus.

Bei der letzten Datei bekommen Sie eine Fehlermeldung, weil »:wnext« nicht
zur nächsten Datei gehen kann.  Dies beendet die Ausführung und alles ist
erledigt.

	Anmerkung:
	Beim Abspielen einer aufgezeichneten Sequenz beendet ein Fehler die
	Ausführung.  Stellen Sie deshalb beim Aufzeichnen sicher, dass Sie
	keine Fehlermeldung bekommen.

Es gibt einen Haken: Falls eine der .cpp-Dateien das Wort »GetResp« nicht
enthält, erhalten Sie einen Fehler und das Ersetzen hält an.  Um dies zu
vermeiden, fügen Sie dem Befehl »substitute« das Flag »e« hinzu: >

	:%s/\<GetResp\>/GetAnswer/ge

Das Flag »e« sagt »:substitute«, dass das Finden keiner Übereinstimmung
kein Fehler ist.

==============================================================================
*12.2*	»Nachname, Vorname« in »Vorname Nachname« ändern

Sie haben eine Namensliste dieser Form:

	Doe, John ~
	Smith, Peter ~

Diese wollen Sie wie folgt ändern:

	John Doe ~
	Peter Smith ~

Dies geht mit nur einem Befehl: >

	:%s/\([^,]*\), \(.*\)/\2 \1/

Lassen Sie uns dies Stück für Stück betrachten.  Offensichtlich beginnt es mit
dem Befehl »substitute«.  »%« ist der Bereich, was für die ganze Datei steht.
Also geschieht die Ersetzung in jeder Zeile der Datei.
   Die Argumente des Befehls »substitute« sind »/von/nach/«.  Die
Schrägstriche trennen das Muster »von« und die Zeichenkette »nach«.  Dies
enthält das Muster »von«:
							   \([^,]*\), \(.*\) ~

	Der erste Teil zwischen \(...\) trifft »Nachname«  \(     \)
	    treffe alles außer einem Komma		     [^,]
	    jegliche Anzahl					 *
	trifft genau das Zeichen »,«				    ,
	Der zweite Teil zwischen \(...\) trifft »Vorname«	      \(  \)
	    jegliches Zeichen						.
	    jegliche Anzahl						 *

In dem Teil »nach« haben wir »\2« und »\1«.  Dies sind sogenannte
Rückreferenzen (backreference).  Sie referenzieren den Text, der im Suchmuster
zwischen den \(...\) gefunden wurde.  »\2« referenziert den Text, der von dem
zweiten \(...\) gefunden wurde, was der Vorname ist.  »\1« referenziert das
erste Paar \(...\), das dem Nachnamen entspricht.
   Sie können bis zu neun Rückreferenzen im »nach«-Teil eines
Ersetzungsbefehls benutzen.  »\0« steht für das ganze getroffene Muster.  Der
Befehl »substitute« kennt ein Paar besondere Elemente mehr, siehe
|sub-replace-special|.

==============================================================================
*12.3*	Eine Liste sortieren

In einem Makefile haben Sie häufig eine Liste von Dateien.  Zum Beispiel:

	OBJS = \ ~
		version.o \ ~
		pch.o \ ~
		getopt.o \ ~
		util.o \ ~
		getopt1.o \ ~
		inp.o \ ~
		patch.o \ ~
		backup.o ~

Um diese Liste zu sortieren, filtern Sie den Text durch den externen Befehl
»sort«: >

	/^OBJS
	j
	:.,/^$/-1!sort

Wir gehen hier in die erste Zeile, an deren Anfang »OBJS« steht.  Dann gehen
wir eine Zeile nach unten und filtern die Zeilen bis zur nächsten leeren Zeile.
Wir könnten die Zeilen auch im visuellen Modus auswählen und dann »!sort«
benutzen.  Das ist einfacher zu tippen, aber mehr Arbeit bei vielen Zeilen
   Dies ist das Ergebnis:

	OBJS = \ ~
		backup.o ~
		getopt.o \ ~
		getopt1.o \ ~
		inp.o \ ~
		patch.o \ ~
		pch.o \ ~
		util.o \ ~
		version.o \ ~


Beachten Sie, dass der Backslash am Ende jeder Zeile angibt, dass die Zeile
logisch weitergeht.  Nach dem Sortieren ist dies falsch!  Die Zeile mit
»backup.o«, die die letzte war, hat keinen Backslash.  Nun ist sie an anderer
Stelle und muss einen Backslash haben.
   Die einfachste Lösung ist, den Backslash mit »A \<esc>« hinzuzufügen.  Sie
können den Backslash in der letzten Zeile stehenlassen, falls Sie
sicherstellen, dass danach eine leere Zeile kommt.  So haben Sie dieses
Problem nicht noch einmal.

==============================================================================
*12.4*	Umgekehrte Zeilenreihenfolge

Der Befehl |:global| kann mit dem Befehl |:move| kombiniert werden, um alle
Zeilen vor die erste zu verschieben, was eine umgedrehte Datei zum Ergebnis
hat.  Der Befehl ist: >

	:global/^/m 0

Abgekürzt: >

	:g/^/m 0

Der reguläre Ausdruck »^« trifft den Anfang der Zeile (selbst wenn die
Zeile leer ist).  Der Befehl |:move| schiebt die getroffene Zeile hinter die
mystische nullte Zeile, so dass die aktuell getroffene Zeile die erste Zeile
der Datei wird.  Da der Befehl |:global| nicht durch die sich ändernde
Zeilenreihenfolge verwirrt wird, macht er damit weiter, jede verbleibende
Zeile der Datei zu treffen und sie an erster Stelle zu setzen.

Dies funktioniert auch mit einem Zeilenbereich.  Gehen Sie zuerst eine über
die erste Zeilen und markieren Sie sie mit »mt«.  Dann gehen Sie zur
letzten Zeile in dem Bereich und tippen: >

	:'t+1,.g/^/m 't

==============================================================================
*12.5*	Wörter zählen

Manchmal müssen Sie einen Text mit einer Höchstanzahl von Wörtern schreiben.
Vim kann die Wörter für Sie zählen.
   Wenn Sie alle Wörter in der Datei zählen wollen, benutzen Sie diesen
Befehl: >

	g CTRL-G

Tippen Sie kein Leerzeichen nach dem g, dies wird hier nur benutzt, damit der
Befehl leichter zu lesen ist.
   Die Ausgabe sieht ungefähr so aus:

	Sp 1 von 0; Zeile 141 von 157; Wort 748 von 774; Byte 4489 von 4976 ~

Sie sehen auf welchem Wort Sie sich befinden (748) und die Gesamtanzahl der
Wörter in der Datei (774).

Wenn der Text nur ein Teil einer Datei ist, könnten Sie zum Beginn des
Textes gegen, »g CTRL-G« tippen, zum Ende des Textes gehen, nochmals »g
CTRL-G« tippen, und dann Ihr Hirn benutzen, um die Textlänge aus dem
Unterschied der Positionen zu berechnen.  Eine gute Übung, aber es gibt
einen einfacheren Weg.  Wählen Sie den Text, in dem Sie die Wörter zählen
möchten, im visuellen Modus aus.  Dann tippen Sie »g CTRL-G«. Das
Ergebnis:

	5 von 293 Zeilen; 70 von 1884 Wörtern; 359 von 10928 Bytes ~

Für andere Möglichkeiten, Wörter, Zeilen und andere Elemente zu zählen,
siehe |count-items|.

==============================================================================
*12.6*	Eine Man-Page finden				*find-manpage*

Während Sie ein Shell-Skript oder C-Programm editieren, benutzen Sie einen
Befehl oder eine Funktion, für die Sie die Man-Page finden wollen (unter
Unix).  Lassen Sie uns erst den einfachen Weg gehen: Bewegen Sie den Cursor
auf das Wort, für das Sie Hilfe finden wollen, und drücken Sie >

	K

Vim startet das externe Programm »man« mit diesem Wort als Argument.  Wenn
die Man-Page gefunden wird, wird sie angezeigt.  Dies benutzt den normalen
Pager, um durch den Text zu gehen (meistens das Programm »more«.  Wenn Sie
an das Ende kommen, bringt Sie ein Druck auf <Enter> zurück nach Vim.

Ein Nachteil ist, dass Sie nicht zur gleichen Zeit die Man-Page und den
Text, an dem Sie arbeiten, sehen können.  Es gibt einen Trick, um die
Man-Page in einem Vim-Fenster erscheinen zu lassen.  Laden Sie zunächst das
Dateityp-Plugin man: >

	:runtime! ftplugin/man.vim

Setzen Sie diesen Befehl in Ihre vimrc, falls Sie vorhaben, dies häufiger
zu tun.  Nun können Sie den Befehl »:Man« benutzen, um ein Fenster mit
einer Man-Page zu öffnen: >

	:Man csh

Sie können umherrollen und der Text wird hervorgehoben.  Dies erlaubt Ihnen,
die Hilfe zu finden, nach der Sie suchen.  Benutzen Sie CTRL-W w, um in das
Fenster mit dem Text, an dem Sie arbeiten, zu springen.
   Um eine Man-Page in einem bestimmten Abschnitt zu finden, stellen Sie die
Nummer des Abschnitts voran.  Um zum Beispiel in Abschnitt 3 »echo«
nachzuschlagen: >

	:Man 3 echo

Um auf eine andere Man-Page zu springen, die im Text typischerweise wie
»word(1)« angegeben ist, drücken Sie darauf CTRL-].  Weitere
»:Man«-Anweisungen benutzen dasselbe Fenster.

Um eine Man-Page für das Wort unter dem Cursor anzuzeigen, benutzen Sie
dies: >

	\K

(Falls Sie <Leader> umdefiniert haben, benutzen Sie dies statt des
Backslash.  Sie wollen zum Beispiel den Rückgabewert von »strstr()«
wissen, während Sie diese Zeile editieren:

	if ( strstr (input, "aap") == ) ~

Bewegen Sie den Cursor auf »strstr« und tippen Sie »\K«.  Ein Fenster
öffnet sich, um die Manpage für strstr() anzuzeigen.

==============================================================================
*12.7*	Leerzeichen abschneiden

Manche Leute finden Leerzeichen und Tabulatoren am Zeilenende nutzlos,
verschwenderisch und hässlich.  Um den Leerraum am Ende jeder Zeile zu
entfernen, führen Sie den folgenden Befehl aus: >

	:%s/\s\+$//

Als Zeilenbereich wird »%« benutzt, also arbeitet dies auf der ganzen
Datei.  Das Muster, das der Befehl »:substitute« sucht, ist »\s\+$«.  Dies
findet Leerraumzeichen (\s), eines oder mehrere (\+), direkt vor dem
Zeilenende ($).  Später in |usr_27.txt| wird erklärt, wie Sie Muster wie
dieses schreiben.
   Der Teil »nach« des Ersetzungsbefehls ist leer: »//«.  Also ersetzt er mit
nichts, effektive löscht dies den gefundenen Leerraum.

Ein anderer verschwenderischer Gebrauch von Leerzeichen ist, sie vor einen
Tabulator zu setzen.  Oft können diese gelöscht werden, ohne den Anteil
von Leerraum zu verändern.  Aber nicht immer!  Daher machen Sie dies am
Besten von Hand.  Benutzen Sie diesen Suchbefehl: >

	/ 	

Sie können es nicht sehen, aber in diesem Befehl ist ein Leerzeichen vor einem
Tabulator.  Also »/<Leerzeichen><Tabulator>«.  Nun benutzen Sie »x«, um das
Leerzeichen zu löschen, und überprüfen, dass sich der Anteil an Leerraum nicht
ändert.  Sie mögen einen Tabulator einfügen müssen, falls er sich ändert.
Tippen Sie »n«, um den nächsten Treffer zu finden.  Wiederholen Sie dies, bis
keine Treffer mehr gefunden werden können.

==============================================================================
*12.8*	Herausfinden, wo ein Wort benutzt wird

Falls Sie ein Unix-Benutzer sind, können Sie eine Kombination von Vim und dem
Befehl »grep« benutzen, um alle Dateien zu editieren, die ein gegebenes Wort
enthalten.  Dies ist extrem nützlich, falls Sie an einem Programm arbeiten und
alle Dateien betrachten oder editieren wollen, die eine bestimmte Variable
enthalten.
   Nehmen Sie zum Beispiel an, Sie wollen alle Dateien eines C-Programms
editieren, die das Wort »frame_counter« enthalten.  Um das zu tun, benutzen
Sie diesen Befehl: >

	vim `grep -l frame_counter *.c`

Schauen wir uns diesen Befehl im Detail an.  Der Befehl »grep« sucht in einer
Menge von Dateien nach einem gegebenen Wort.  Weil das Argument »-l« angegeben
ist, listet der Befehl nur die Dateien, die das Wort enthalten und gibt nicht
die gefundenen Zeilen aus.  Das gesuchte Wort ist »frame_counter«.  Dies kann
in Wirklichkeit jeder reguläre Ausdruck sein.  (Anmerkung:  die regulären
Ausdrücke, die grep benutzt, sind nicht genau dieselben wie in Vim.)
   Der gesamte Befehl ist in sogenannte Backticks (`) eingeschlossen.  Dies
sagt der Unix-Shell, dass sie diesen Befehl ausführen und so tun soll, als
wäre die Ausgabe in die Befehlszeile getippt.  Dies führt dazu, dass Vim die
Liste der Dateien editiert, die »grep« ausgeben hat.  Dann können Sie Befehle
wie »:next« und »:first« benutzen, um durch die Dateien zu gehen.


JEDE ZEILE FINDEN

Der obige Befehl findet nur die Dateien, in denen das Wort gefunden wird.  Sie
müssen immer noch das Wort in den Dateien finden.
   Vim hat einen eingebauten Befehl, den Sie benutzen können, um eine Menge
von Dateien nach einer gegebenen Zeichenkette zu durchsuchen.  Falls Sie zum
Beispiel alle Vorkommen von »error_string« in allen Dateien eines C-Programms
finden wollen, geben Sie den folgenden Befehl ein: >

	:grep error_string *.c

Dies lässt Vim die Zeichenkette »error_string« in allen angegebenen Dateien
(*.c) suchen.  Der Editor öffnet nun die erste Datei, in der eine
Übereinstimmung gefunden wird, und positioniert den Cursor auf der ersten
passenden Zeile.  Um zu der nächsten passenden Zeile zu gehen (egal in welcher
Datei), benutzen Sie den Befehl »:cnext«.  Um zur vorigen Übereinstimmung zu
gehen, benutzen Sie den Befehl »:cprev«.  Benutzen Sie »:clist«, um alle
Übereinstimmungen zu sehen, und wo sie sind.
   Der Befehl »:grep« benutzt die externen Befehle »grep« (unter Unix) oder
»findstr« (unter Windows).  Sie können dies ändern, indem Sie die Option
'grepprg' setzen.

==============================================================================

Nächstes Kapitel: |usr_20.txt| Befehle auf der Befehlszeile schnell tippen

Copyrigt: siehe |manual-copyright| vim:tw=78:ts=8:ft=help:norl: