Mi a legjobb szövegszerkesztő?

Legjobb válasz

Nem hiszem el, hogy még senki sem mondta a Vim-et. Vim!

Amint túllép a kezdeti tanulási görbén, ez egy csodálatos eszköz a hétköznapi programozási feladatok automatizálásához. Mondok egy példát, amelyet ma korábban használtam.

Létrehoztam egy XML olvasó osztályt (egy alap XML osztályból örökölt) a kódalapunk egyik eleméhez. Az .xml valami ilyesmit nézett ki.

...

A probléma az volt (a meglévő architektúra miatt), hogy ezeknek a mezőértékeknek mind a Some\_XML\_Class privát adattagjának kellett lenniük a kódban. Ami azt jelentette, hogy sok értelmetlen munkát fogok végezni, a mező-egyt std :: string m\_field\_one átalakítással , ezekhez a mezőkhöz.

Ott jön be Vim. Ahelyett, hogy 20 percet ölne, a nehezebb módon tegye. Beillesztettem a fenti kódrészletet, és makrót rögzítettem.

^xistd::string m\_f-r\_ea;ld$j

Ez a vim parancssor a következőket teszi. A sor első karakterére lép, és törli (‘ törlésre kerül). Beillesztési módba megy, és előkészíti a std :: string m\_ fájlt mező . Ezután megtalálja a „-” első előfordulását, és helyébe „\_” lép. Ezután a mező\_N szó végére ugrik, átmegy Függelék módba, pontosvesszőt ad hozzá, és a kurzort jobbra mozgatja. Tehát most megvan

std::string m\_field\_one;value="value1" />

De még nincs kész. Ezután parancsmódba megyünk, és töröljük a sor többi részét, és leugrunk a következőre. Tehát:

std::string m\_field\_one;

Vegye figyelembe, hogy az első sor tökéletesen formázott, és a kurzor jelenleg a második sorban van.

Ez a következő rész, ha bejön a varázslat. Mielőtt lefuttattuk a parancsot, elkezdtünk egy makrót rögzíteni az a regisztrálásához. . A q parancs, majd a a parancs használata. Így a teljes parancsot a következőképpen készítjük el (ahol az utolsó q a makró befejezésének jelzésére szolgál).

qa^xistd::string m\_f-r\_ea;ld$jq

Ha jól van, hívja meg ezt a makrót a Vim paranccsal:

@a

Újra futtatja a makrót, és automatikusan formázza a következő sort:

std::string m\_field\_one;

std::string m\_field\_two;

De várj, még mindig vannak hasonló szerkezetű N-2 sorok! Tegyük fel, hogy ebben az esetben N értéke 100 volt. Semmi probléma. Egyszerűen beírjuk a következő parancsot:

98@a

Ez még többször futtatja a fenti makrót, automatikusan formázva a kód többi részét !! Most van:

std::string m\_field\_one;

std::string m\_field\_two;

std::string m\_field\_three;

...

std::string m\_field\_ninetynine

std::string m\_field\_onehundered;

Döbbenetes .

* PS: Először ezek a parancsok idegennek és félelmetesnek tűnhetnek számodra, de miután egy kis időt töltöttél Vimmel, mint elsődleges szerkesztővel, másodlagos természetűvé válnak. A példa makró 10 másodpercet vett igénybe, mire írtam, és rengeteg időt spóroltam meg.

* PPS: Tudom, hogy a példakód elég buta, de csak egy pont illusztrálására használtam. A való világban azonban hasonló esetekkel fog találkozni.

Válasz

Köszönöm, hogy megkérdezte.

Azért jöttem ide, hogy figyelmeztessem az ilyen célok ellen, csak az alapján a címre … Alapvetően ma írna egy szövegszerkesztőt, mert:

  • Önnek nagyon specifikus igénye van (de ebben az esetben még mindig jobb, ha egy meglévő bázisról indul ki, nem pedig a semmiből indul, hacsak nincsenek nagyon új ötleteid);
  • VAGY úgy gondolja, hogy ez érdekes programozási gyakorlat; ami valóban a célod.

Mert őszintén szólva, ha nem találja meg álmai szerkesztőjét a meglévők százaiban, ha nem ezerben, nagyon válogatós vagy!; -)

Kísértésként azt is mondtam, hogy a szövegszerkesztő nulláról történő írása kissé ijesztő lehet egy kezdő számára; mondjuk azt, hogy középszintű feladat: kicsit nehéz egy abszolút kezdő számára, egyszer elvégezhető kapsz némi tapasztalatot.

Ennek ellenére még kezdő koromban írtam a saját szövegszerkesztőt: frissen az egyetemről, csak kissé kódolva C-be, valódi projekt nélkül. De olyan számítógépen voltam, ahol SCO Unix volt, és csak vi szerkesztő. És nem szeretem a két módja miatt (navigáció vs. kiadás), ami mindig összezavar (gépelni kezd, a szövegemet csak az első i után látom …).

Tehát most kezdtem el kódolni a szerkesztőmet C-ben, a Curses-t interfészként használva, saját adatstruktúrákat készítettem (valószínűleg nem hatékonyak, de akkoriban kis fájlokkal foglalkoztunk), stb.

Nagyon jól szórakoztam, sokat tanultam, és amikor más felhasználók is elkezdték használni, rájöttem, hogy mindig váratlan dolgokat csinálnak, például kevernek fület és szóközt … 🙂

Ismételten, ha teljesen kezdő vagy, akkor kezdj el kisebb projektekkel, hogy megismerd a nyelv alapjait (ciklusok, tömbök stb.), Az adatstruktúrákat, a szöveges fájlok olvasását és írását stb.

Nehéz tanácsot adni egy nyelvre … JVM-alapú projektnél a Ceylon-t használnám, esetleg JavaFX-sel vagy SWT-vel. A “közel a fémhez” projekthez a Rust-ot használnám (van egy kezdő projekt a szövegszerkesztő írásáról a Rust-ban, ígéretesnek tűnik), míg mások a C ++ használatát javasolják (ami egy kezdő számára elsöprő lehet!). Egy könnyebb nyelv érdekében talán a Lua lenne a megfelelő (más a Python használatát tanácsolná, de nincs tapasztalatom róla). Vagy talán a JavaScript a Node.js-sel és az Electron platformmal, egy felkapott opció … (Az Atom, a Visual Studio Code és a Brackets ezzel íródott. De ez “alig” a semmiből “, mivel a meglévő JS-kód szerkesztőket használják. )

Általános tanács: először tervezze meg adatstruktúráját (a Scintilla projekt által használt kétrészes stratégia jó; a Rust projekt által használt kötelek valamivel több / túl fejlett), hogyan manipulálod az adatokat: hogyan adhatsz hozzá vagy távolíthatsz el egy karaktert, egy sort, egy kijelölést stb.

Ezután gondolkodj el a kezelőfelületen. Ideális esetben különítsd el a kettőt (adatkezelés és adatmegjelenítés). Így egyszer, egyszer megváltoztathatja a felhasználói felület célját (Swingről JavaFX-re, GTK + -ról Qt-ra, bármi másra), az alaplogikát alig változtatva, de egyáltalán nem. Jó a hordozhatósághoz.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük