Van ilyen szövegfájlom (a gVim használatával Windows rendszeren)
foo bar baz quux corge grault garply waldo fred plugh [...150 more lines...] xyzzy thud 
 Számot szeretnék hozzáadni a fájl minden sorához. Nem a :set number funkciót használja, hanem a számot minden sor előtt megelőző szövegként adja hozzá, az alábbiak szerint, így a szám a fájl része. 
1. foo bar baz quux 2. corge grault garply 3. waldo fred plugh [...~150 more lines...] 155. xyzzy thud 
Megjegyzések
nem érhető el általában a Windows rendszeren (ahogy az OP aawk-re vonatkozó megjegyzésükből kitűnik). A két legfontosabb megoldás tiszta Vim. Végül az összes vonal és egy para csak a tartomány kiválasztásának kérdése. Nyilvánvalóan nem nagy kérdés.
Válasz
Tiszta Vim módra:
:%s/^/\=line(".").". " 
Magyarázat:
:%s/^/ " the substitution will be applied to the beginning of every line \= " the rest of the replacement part is an expression line(".").". " " the expression returns the current line number concatenated with a dot and a space 
 Lásd: :help \= és :help line(). 
Egy kifejezés használata a pótalkatrészben nagyon hatékony és az FWIW nagyon jó belépési pont a vimscript-hez.
Megjegyzések
- Hogyan adhatom hozzá ezt a nagyon hasznos parancsot a vimrc billentyűsávjához?
 -  A vim súgótémához való hozzáféréshez: 
:help sub-replace-expression 
Válasz
A Vim makrók egyik szép tulajdonsága, hogy visszatérhetnek (meghívhatják magukat) ):
-  A q regisztráció törlése: 
qqq -  Adja hozzá a számot az első sorhoz: 
ggI1.(ne felejtse el a szóközt!) -  Lépjen vissza a sor elejére, és kezdjen el makrót rögzíteni: 
0qq - Másolja a számot:
 -  Mozgasson lefelé egy sort, és illessze be a számot: 
+P -  lépjen vissza a sor elejére és növelje a számot: 
0<c-a> -  Lépjen vissza a sor elejére (tehát a makró nem törik el, ha kétszeres számra kerül!): 
0 -  Hívja meg egyszer a makrót, hogy rekurzív legyen. Ezen a ponton még mindig nincs semmi a q regiszterben, így semmi sem fog történni: 
@q. -  Mentse a makrót: 
q -  Hívja még egyszer a makrót, és figyelje a szikrák repülését !: 
@@ 
A makró ezután folytassa önmagának meghívását, amíg el nem éri a fájl végét.
A rekurzív makrót sok más hasonló problémára is használhatja, ezért jó, ha tisztában van vele.
 Ha valamilyen oknál fogva nem akar rekurzív makrót használni, akkor kihagyhatja az 1. és a 8. lépést, és egy  count  használatával futtathatja a makrót többször, pl. A 100@q százszor futtatja a q makrót. 
Megjegyzések
- Hatalmas dolgok, meghajolok mesterkedése előtt. A makrók nekem olyanok, mint a fekete mágia …
 - @ropata, a makró csak (főleg) normál módú parancsok sorozata.
 - @romainl szerintem ‘ jobb, ha a billentyűleütések sorozataként gondolkodunk róla.
 - @Rich, ez sok mindenből állhat, beleértve az ex parancsokat is.
 - @romainl Igen, ezért ‘ ezért gondolom, hogy ‘ az a legjobb, ha billentyűleütésekként gondolunk rá. Pontosan azt játssza le, amit beír a billentyűzetre (beleértve, ahogy mondani szokta, az ex parancsokat), mintha kézzel írta volna be az egészet.
 
Válasz
Szeretem a vim globális parancsot használni az ilyen feladatok végrehajtására. Ez vonatkozik az iterációnak a sor elejére történő felvételére vagy egy szimbólum módosítására a szövegben. Úgy tűnik, bonyolultabb, mint a többi megoldás, de elég rugalmas minta, amikor használható, és könnyen átgondolható sok gondolkodás nélkül.
 Először válassza ki a tartományt (melyik vonalat választja) szeretnék ezt alkalmazni). Általában jelöléseket használok (pl.ma az első sorban és mb a második sorban, de használhat sorszámokat vagy vizuális kijelölést is), majd írja be a a következő parancs (jelenleg a felhasználói esethez igazítva) 
:let i=1|"a,"bg/^/s/^/\=i.". "/|let i=i+1 
Dekonstrukció
:let i=1 
 Ez beállítja a i változót kezdőértékkel. A listák általában 1-gyel kezdődnek, ezért az i értéket 1-re állítom. 
| 
A sáv új parancsot indít
"a,"b 
 Ez állítja be a következő parancs tartományát. A a jeltől a b jelölésig haladok , amely a lista első és utolsó sorára kerülne. 
g/^/ 
Ez a globális parancs. Megkeresi a fájlt (vagy tartományt) egy adott reguláris kifejezés után, és végrehajtja a parancssor többi részét az illeszkedő sorok mindegyikén . Minden sort megegyezek a “sor elejére” kereséssel. Ha olyan szövege volt, mint
Item some txt other text Item second item whatever Item third 
, és ezeket a címkéket csak a Item és hagyja figyelmen kívül a többi sort, tegye helyette g/Item/ vagy g/^Item/ (feltételezve a szó szerinti elem szövegét ) 
s/^/\=i.". "/ 
 Ez végrehajtja a reguláris kifejezést, amely a sor elejét lecseréli a i összefűzött értékre. a .. Általában ezt bármire megteheti (cserélje le például a Item címkét a számmal). 
|let i=i+1 
 Annak ellenére, hogy a sáv új parancsot indít, beállít egy második parancsot, amely a globális parancson belül fut, nem pedig a globális befejezése után. Ennek eredményeként növekszünk i mielőtt a következő sort feldolgozza g. Itt van egy másik lehetőség a rugalmasságra. Az i módosítása bármi lehet (incre 2-vel hívjon meg egy olyan függvényt, amely a Fibonacci szekvencia következő elemét generálja, bármi is legyen). 
Válasz
Számok hozzáadása a minden sor
 Lehetséges a  :%!nl -ba  vagy  :%!cat -n  parancsok, amelyek sorszámokat adnak az összes sorhoz. 
Windows rendszeren “telepítve van a Cygwin / MSYS / SUA.
Számok hozzáadása a kijelölt sorokhoz
 Ha csak a kiválasztott sorokhoz kíván hozzáadni számokat, válassza ki őket vizuális mód ( v  és kurzorok), majd ha elkészült, hajtsa végre a következő parancsot: :%!nl (az üres sorok figyelmen kívül hagyása) vagy :%!cat -n (üres sorokat is tartalmaz). 
Formázás
További szóközök eltávolításához válassza ki őket a vizuális blokkban ( Ctrl + v ), és távolítsa el őket ( x ).
 Néhány karakter hozzáadásához (., :, ) a számok után jelölje ki őket a vizuális blokkban ( Ctrl  +  v ), majd csatolja a karaktert ( A  , írja be a karaktert, majd fejezze be az  Esc ) kifejezést. 
Megjegyzések
- Ez nem adja meg a megadott formázást a kérdésben. Szeretem azonban a megoldás egyszerűségét.
 - @KarlYngveLerv å g Köszönöm, ezt is belefoglalta a válaszba.
 
Válasz
A romainl “válaszának módosítása :
:%s/^\(\d\+\. \)\?/\=line(".").". " 
Ez nem csak felvesz sorszámokat, hanem lecseréli a kilépő sorszámokat is, ha már ott vannak. Ha egy sort beillesztettél félúton, akkor az a vártnak megfelelően mindent újraszámoz.
Ez úgy működik, hogy bármely számot egy a. És egy sor elején levő szó helyettesít egy új számmal. . Ez nyilvánvalóan megszakad, ha van olyan sora, amely már ezzel a mintával kezdődik, ezért gondolattal használja.
A hozzáadott rész:
-  
^– a sor kezdete -  
\(– Új alcsoport indítása -  
\d\+– Egy számjegy egyeztetése legalább egyszer -  
\.– Pont illesztése (.) és egy szóköz. -  
\)– Alcsoport befejezése -  
\?– Tedd opcionálisá a csoportot, hogy úgy működjön, mint korábban, ha még nincs szám ezen a soron. 
 Bónusztipp : 
 A sorszámok  eltávolításához  ugyanazt a mintát használhatja üres válaszrésszel: 
:%s/^\(\d\+\. \)\?// 
Válasz
I1. <esc>^qqyWjP^<C-a>q 
 Ez számolja az első két sort, és megnyomhatja a @q a következő sorok számozásához (vagy írja be az ex. 18@q ha összesen 20 sort akarsz megszámolni).
Magyarázat:
I1. <esc> Number the first line hqq Go back to the start of the line and start recording a macro yWjP Copy the line number to the next line ^<C-a> Increment the next line"s line number q Finish recording 
Ennek előnye, hogy nem igényel külső parancsokat, ami akkor hasznos, ha újra például a Vim használatával Windows rendszeren.
Megjegyzések
-  A 
1. <esc>hbeírása után a második oszlop, nem első oszlop. Ahszöveget lecserélném a0kifejezésre, ami után szerintem nagyon jó megoldásnak kell lennie. - @KarlYngveLerv å g Hoppá, ez elírás volt. Köszönöm, kijavítottam.
 -  Semmi gond. Azonban még mindig nem frissítette a magyarázatot. Továbbá: Sok billentyűzeten a 
^egy második karakterre vár, hogy lehetővé tegye a gépelési kombinációkat, mint például a^a -> â. Még mindig egyetértek a legjobb megoldással, de úgy gondolom, hogy ezt is meg kell említeni. 
Válasz
I úgy gondolom, hogy a kiválasztott válasz a legjobb, de a változatosság ellenére alternatívát kínálok egy külső program használatával:
:%!cat -n 
 Ez az egészet szűri puffer (% jelöléssel) a külső programon keresztül, cat, ahol a -n A flag minden bemeneti sort előkészít egy sorszámmal. 
 Ehhez természetesen megkövetel cat telepítést, ami (valószínűleg) az összes Unix-ra igaz típusú rendszerek. 
 A :help :range! oldalon talál további információt a külső programok szűréséről. 
Megjegyzések
- Tudomásul veszem, hogy a kérdező a gVim-et használja a Windows rendszeren, így ez a megoldás valószínűleg nem fog ‘ t működni ott. Azt hiszem azonban, hogy még mindig ad némi lehetőséget másoknak t o tanuljon belőle.
 -  Ha ‘ telepítette a 
msysgitalkalmazást, és hozzáadta a PATH-hoz (IIRC it ‘ s telepítési opció), ennek a megoldásnak működnie kell a Windows rendszeren is. -     nem POSIX, de  
nlaz, tehát lehet, hogy jobb megoldás. 
Válasz
Egy kicsit feltörő megoldás a következő lehet (minden, ami a < és> be kell illeszteni a Ctrl + v ) megnyomása után:
:%normal :redir @"<Enter>:-=<Enter>:redir END<Enter>I<C-R>".<Tab><Esc>kdd 
Dekonstrukció
:%normal {commands} 
a normál mód parancsot futtatja a tartomány által megadott minden soron, ebben az esetben minden soron
:redir @" 
az ex parancsokkal készített összes kimenetet átirányítja a meg nem nevezett pufferbe.
:.= 
egy ex parancs, amely az aktuális sort adja ki szám (sajnos megelőző új vonallal)
:redir END 
abbahagyja az átirányítást a meg nem nevezett pufferbe
I<C-R>".<Tab><Esc> 
beszúrja a meg nem nevezett puffer tartalmát a-val. és egy tabulátorral az egyes sorok elejére, és kilép az beszúrási módból.
kdd 
egy sort felfelé halad és eltávolítja az új sort, amely a következők eredménye:. = parancs.
awkvalószínűleg ennek a feladatnak az eszköze. De ‘ m Windows-on (sóhajtok).catvagynl, amelyek képesek megadni a sorokat, de nem = “3ab99f7668”>