Paras vastaus
En voi uskoa, ettei kukaan ole vielä sanonut Vimiä. Vim!
Kun olet ylittänyt alkuperäisen oppimiskäyrän, se on hämmästyttävä työkalu arkisten ohjelmointitehtävien automatisointiin. Annan sinulle esimerkin, jota käytin aiemmin tänään.
Loin XML-lukijaluokkaa (peritty XML-perusluokasta) kooditietokantamme komponentille. .Xml näytti tältä.
...
Ongelma oli (olemassa olevan arkkitehtuurin vuoksi), että näiden kenttäarvojen kaikkien oli oltava koodin Some\_XML\_Class yksityisiä tietoja. Tämä tarkoitti sitä, että olin tekemässä paljon turhaa työtä muuntamalla kenttä-yksi std :: string m\_field\_one , jokaiselle näistä kentistä.
Siellä Vim tulee sisään. Sen sijaan, että tappaisit 20 minuuttia tekemällä sen vaikeimmalla tavalla. Liitin yllä olevan koodiosan ja nauhoitin makron.
^xistd::string m\_
Tämä VIM-komentosarja tekee seuraavat. Siirtyy rivin ensimmäiseen merkkiin ja poistaa sen (‘ poistetaan). Siirtyy lisäystilaan ja valmistelee vakio :: merkkijono m\_ kohtaan -kenttä . Sitten se löytää ensimmäisen – – esiintymän ja korvaa sen sanalla \_. Sitten se hyppää sanan field\_N loppuun, siirtyy liitetilaan ja lisää puolipisteen ja siirtää kohdistimen oikealle. Joten nyt meillä on
std::string m\_field\_one;value="value1" />
Mutta emme ole vielä valmiit. Sitten siirrymme komentotilaan ja poistamme loput rivistä ja hyppäämme seuraavaan. Joten meillä on:
std::string m\_field\_one;
Huomaa, että rivi yksi on täydellisesti muotoiltu ja kohdistin on tällä hetkellä rivillä kaksi.
Tämä seuraava osa, jos taika tulee sisään. Ennen kuin suoritimme komennon, aloimme nauhoittaa makroa rekisteröimään ”a” . Käyttäen komentoa q ja sen jälkeen a . Tehdään täydellinen komento seuraavasti (jossa lopullista q käytetään osoittamaan makron päättyminen).
qa^xistd::string m\_
Kutsu nyt makro Vim-komennolla, jos hyvin,
@a
Se suorittaa makron uudelleen ja muotoilee seuraavan rivin automaattisesti:
std::string m\_field\_one;
std::string m\_field\_two;
Odota, meillä on silti N-2 riviä, joilla on samanlainen rakenne! Oletetaan tässä tapauksessa, että N oli 100. Ei ongelmaa. Kirjoitamme yksinkertaisesti komennon:
98@a
Tämä suorittaa yllä olevan makron 98 uudelleen, muotoilemalla loput koodistasi automaattisesti !! Meillä on nyt:
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;
Hämmästyttävä .
* PS: Aluksi nämä komennot saattavat vaikuttaa sinulle vierailta ja pelottavilta, mutta kun olet viettänyt jonkin aikaa Vimin kanssa pääeditorina, niistä tulee toinen luonne. Esimerkkimakro kirjoitti minulta 10 sekuntia ja säästeli valtavasti aikaa.
* PPS: Tiedän, että esimerkkikoodi on melko tyhmä, mutta käytin sitä vain havainnollistamaan pistettä. Todellisessa maailmassa törmäät kuitenkin vastaaviin tapauksiin.
Vastaa
Kiitos kysymyksestäsi.
Tulin tänne varoittamaan tällaisesta tavoitteesta, perustuen vain otsikkoon … Pohjimmiltaan tänään kirjoitat tekstieditorin, koska:
- Sinulla on hyvin erityinen tarve (mutta tässä tapauksessa sinun on silti parempi aloittaa olemassa olevasta tukikohdasta eikä alusta alkaen, ellei sinulla ole hyvin uusia ideoita);
- TAI luulet sen mielenkiintoisena ohjelmointiharjoituksena; mikä on todellakin tavoitteesi.
Koska rehellisesti sanottuna, jos et löydä unelmieditoriasi sadoista, ellei tuhansista olemassa olevista, olet erittäin nirso!; -)
Minulla oli myös houkutus sanoa, että tekstieditorin kirjoittaminen tyhjästä voi olla hieman pelottavaa aloittelijalle; sanotaan, että se on keskitason tehtävä: vähän vaikea absoluuttiselle aloittelijalle, suoritettavissa kerran saat jonkin verran kokemusta.
Siitä huolimatta kirjoitin oman tekstieditorin ollessani vasta aloittelija: vasta yliopiston ulkopuolella, koodattu vain vähän C: hen, ilman todellista projektia. Mutta olin tietokoneella, jossa SCO Unix oli vain vi toimittajana. Ja en pidä siitä sen kahden tilan (navigointi vs. painos) takia, mikä aina hämmentää minua (alkaa kirjoittaa, nähdä tekstini vasta ensimmäisen i jälkeen …).
Joten aloin juuri koodata muokkaustyökalua C: ssä, käyttäen Cursesia käyttöliittymänä, tekemällä omat tietorakenteet (luultavasti tehottomia, mutta käsitelimme tuolloin pieniä tiedostoja) jne.
Minulla oli hauskaa, opin paljon ja kun muut käyttäjät alkoivat käyttää sitä, huomasin, että he tekevät aina odottamattomia asioita, kuten sekoittavat välilehtiä ja välilyöntejä … 🙂
Jälleen kerran, jos olet täysin aloittelija, sinun on aloitettava pienemmillä projekteilla, jotta voit oppia kielen perusteista (silmukat, taulukot jne.), Tietorakenteista, kuinka lukea ja kirjoittaa tekstitiedostoja jne.
On vaikea neuvoa yhdelle kielelle … JVM-pohjaiseen projektiin käytän Ceylonia, ehkä JavaFX: n tai SWT: n kanssa. ”Lähellä metallia” -hankkeessa käytän Rustia (Rustissa on aloitusprojekti tekstieditorin kirjoittamisesta, näyttää lupaavalta), kun taas toiset neuvoisivat käyttämään C ++: ta (mikä voi olla ylivoimainen aloittelijoille!). Kielen helpottamiseksi ehkä Lua sopisi hyvin (muut neuvoisivat käyttämään Pythonia, mutta minulla ei ole kokemusta siitä). Tai ehkä JavaScript, Node.js: n ja Electron-alustan kanssa, trendikäs vaihtoehto … (Atom, Visual Studio Code ja suluet on kirjoitettu siihen. Mutta se ”tuskin” tyhjästä ”, kun he käyttävät olemassa olevia JS-koodin muokkaajia. )
Yleinen ohje: Suunnittele ensin tietorakenne (Scintilla-projektin käyttämä kaksiosainen strategia on hyvä; Rust-projektin käyttämät köydet ovat hiukan enemmän / liian kehittyneitä), miten manipuloit tietoja: kuinka lisätä tai poistaa merkkiä, viivaa, valintaa jne.
Ajattele sitten käyttöliittymää. Ihannetapauksessa erota nämä kaksi (datankäsittely ja datanäyttö). Tällä tavalla, joskus voit vaihtaa käyttöliittymäkohteen (Swingistä JavaFX: ksi, GTK +: sta Qt: ksi) riippumatta siitä, että peruslogiikkaasi muuttuu vähän tai ei ollenkaan. Hyvä siirrettävyyteen.