Jaký je nejlepší textový editor?

Nejlepší odpověď

Nemůžu uvěřit, že ještě nikdo neřekl Vim. Vim!

Jakmile překonáte počáteční křivku učení, je to úžasný nástroj pro automatizaci úloh pozemského programování. Dám vám příklad, který jsem dnes použil dříve.

Vytvářel jsem třídu čtečky XML (zděděnou ze základní třídy XML) pro komponentu naší kódové základny. Soubor XML vypadal nějak takto.

...

Problém bylo (kvůli existující architektuře), že všechny tyto hodnoty pole musely být soukromými datovými členy Some\_XML\_Class v kódu. Což znamenalo, že jsem se chystal udělat hodně nesmyslné práce s převodem field-one na std :: string m\_field\_one , pro každé z těchto polí.

To je místo, kde přichází Vim. Místo toho, aby to bylo zabito 20 minut těžkým způsobem. Vložil jsem výše uvedenou část kódu a zaznamenal makro.

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

Tato řada příkazů vim provádí následující. Přechod na první znak řádku a jeho smazání (smazání „.) Přejde do režimu vkládání a předponu std :: string m\_ předponuje pole . Poté najde první výskyt znaku „-“ a nahradí jej znakem „\_“. Poté přejde na konec slova field\_N , přejde do režimu přidání a přidá středník a kurzor posune o jeden doprava. Takže nyní máme

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

Ale ještě jsme nedělali. Poté přejdeme do příkazového režimu, odstraníme zbytek řádku a přejdeme na další. Takže máme:

std::string m\_field\_one;

Všimněte si, že první řádek je perfektně naformátovaný a kurzor je aktuálně na druhém řádku.

Tato další část, pokud vstupuje magie. Než jsme spustili tento příkaz, začali jsme nahrávat makro pro registraci a . Pomocí příkazu q následovaného a . Kompletní příkaz tedy uděláte následovně (kde poslední q slouží k označení ukončení makra).

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

Pokud tedy toto makro dobře zavoláte pomocí příkazu Vim:

@a

Znovu spustí makro a automaticky naformátuje váš další řádek:

std::string m\_field\_one;

std::string m\_field\_two;

Ale počkejte, stále máme N-2 řádky s podobnou strukturou! Předpokládejme, že v tomto případě bylo N rovno 100. Žádný problém. Jednoduše zadáme příkaz:

98@a

Toto makro se spustí výše 98krát a zbytek vašeho kódu se automaticky naformátuje !! Nyní máme:

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;

úžasný .

* PS: Zpočátku se vám tyto příkazy mohou zdát cizí a děsivé, ale jakmile jste strávili nějaký čas s Vim jako primárním editorem, stanou se druhou přirozeností. Ukázkové makro mi trvalo 10 sekund, než jsem napsal, a ušetřilo to obrovské množství času.

* PPS: Vím, že ukázkový kód je docela hloupý, ale použil jsem ho pouze pro ilustraci bodu. Ve skutečném světě však narazíte na podobné případy.

Odpověď

Děkuji za dotaz.

Přišel jsem sem zpočátku, abych varoval před takovým cílem, pouze na základě na název … V zásadě byste dnes napsali textový editor, protože:

  • Máte velmi konkrétní potřebu (ale v tomto případě je lepší začít spíše od existující základny než jít od nuly, pokud nemáte velmi nové nápady);
  • NEBO si to myslíte jako zajímavé cvičení v programování; což je skutečně váš cíl.

Protože upřímně řečeno, pokud nemůžete najít svého editora snů ve stovkách, ne-li v tisících existujících, jste velmi vybíraví!; -)

Byl jsem také v pokušení říci, že psaní textového editoru od začátku může být pro začátečníka trochu skličující; řekněme, že je to úkol na střední úrovni: pro absolutního začátečníka je to trochu těžké, jednou proveditelné získáte nějaké zkušenosti.

To znamená, že když jsem byl ještě začátečník, napsal jsem si vlastní textový editor: čerstvě z univerzity, kódovaný jen trochu v jazyce C, bez skutečného projektu. Ale byl jsem na PC s SCO Unix, který měl jako editor pouze vi. A nelíbí se mi to kvůli jeho dvěma režimům (navigace vs. vydání), které mě vždy matou (začíná psát, vidět můj text až po prvním i …).

Takže jsem právě začal kódovat svůj editor v jazyce C, používal jsem jako rozhraní Curses a vytvářel své vlastní datové struktury (pravděpodobně neefektivní, ale v té době jsme se zabývali malými soubory) atd.

Užil jsem si spoustu zábavy, hodně jsem se naučil, a když to začali používat i ostatní uživatelé, zjistil jsem, že dělají vždy nečekané věci, jako je míchání karet a mezer … 🙂

Pokud jste úplný začátečník, měli byste začít s menšími projekty, abyste se seznámili se základy jazyka (smyčky, pole atd.), O datových strukturách, jak číst a psát textové soubory atd.

Je těžké poradit pro jeden jazyk … Pro projekt založený na JVM bych použil Ceylon, snad s JavaFX nebo SWT. Pro projekt „blízký kovu“ bych použil Rust (je zde počáteční projekt psaní textového editoru v Rustu, zdá se slibný), zatímco jiní by radili použít C ++ (což může být pro začátečníka ohromující!). Pro jednodušší jazyk by se možná Lua dobře hodil (jiný by doporučil použít Python, ale nemám s ním žádné zkušenosti). Nebo snad JavaScript s Node.js a platformou Electron, což je trendová možnost … (Atom, Visual Studio Code a Brackets byly napsány s tím. Ale to je „sotva“ od nuly “, protože používají existující editory kódu JS. )

Obecná rada: nejprve si navrhněte datovou strukturu (dvoudílná strategie použitá v projektu Scintilla je dobrá; lana, jak je používá v projektu Rust, jsou trochu více / příliš pokročilá), jak manipulujete s daty: jak přidat nebo odebrat znak, řádek, výběr atd.

Pak se zamyslete nad uživatelským rozhraním. V ideálním případě je oddělte (manipulace s daty a jejich zobrazení). můžete změnit cíl uživatelského rozhraní (ze Swingu na JavaFX, z GTK + na Qt, cokoli) s malými nebo žádnými změnami základní logiky. Dobré pro přenositelnost.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *