it-swarm-eu.dev

Použití programu Emacs jako IDE

V současné době můj pracovní postup s Emacs, když jsem kódování v C nebo C++ zahrnuje tři okna. Největší napravo obsahuje soubor, se kterým pracuji. Levá část je rozdělena na dvě části, dolní část je Shell, který používám k psaní v kompilaci nebo k vytváření příkazů, a nahoře je často nějaká dokumentace nebo soubor README, který chci konzultovat, když pracuji. Teď už vím, že tam jsou někteří odborníci z Emacsu, kteří jsou někteří odborníci, a já jsem zvědavý, jaké další funkce Emacs jsou užitečné, pokud je jejich účelem použít jako kompletní IDE. Konkrétně, většina IDE obvykle plní tyto funkce je nějaká forma nebo jiný:\t

  • Editor zdrojového kódu
  • Kompilátor
  • Ladění
  • Vyhledávání dokumentace
  • Řízení verzí
  • Funkce OO, jako je vyhledávání ve třídě a inspekce objektů 

Pro některé z nich je zcela zřejmé, jak se Emacs do těchto funkcí vejde, ale co zbytek? Pokud se musí zaměřit na specifický jazyk, řekl bych, že by to mělo být C++. 

Edit: Jeden uživatel poukázal na to, že bych měl být konkrétnější, když jsem řekl „co zbytek? Většinou jsem byl zvědavý na efektivní řízení verzí a také na vyhledávání dokumentů. Například v SLIME je poměrně snadné provést rychlé vyhledávání na funkci LISP. Existuje rychlý způsob, jak vyhledat něco v dokumentaci C++ STL (pokud jsem zapomněl přesnou syntaxi hash_map , například)?

163
user7545

Budeš muset být specifický, co myslíš tím "zbytek". S výjimkou inspektora objektů (který jsem si vědom), emacs dělá vše výše uvedené docela snadno:

  • editor (zřejmý)
  • kompilátor - stačí spustit M-x compile a zadat příkaz kompilace. Odtud můžete pouze M-x compile a použít výchozí. Emacs zachytí chyby kompilátoru C/C++ (nejlépe funguje s GCC) a pomůže vám přejít na řádky s varováním nebo chybami.
  • Ladění - podobně, když chcete ladit, zadejte M-x gdb a vytvoří se vyrovnávací paměť gdb se speciálními vazbami
  • Dokumentace vyhledávání - emacs má vynikající CScope vazby pro kód navigace. Pro další dokumentaci: Emacs má také čtečku pro manage a vše ostatní obsahuje web a knihy.
  • řízení verzí - existuje spousta vazeb Emacs pro různé VCS backendy (CVS, SCCS, RCS, SVN, GIT všechny na mysli)

Edit: Uvědomuji si, že moje odpověď na vyhledávání dokumentace se opravdu týkala navigace kódem. Zde je několik dalších informací: 

Vyhledávání Google nepochybně odhalí další příklady.

Jak ukazuje druhý odkaz, lze vyhledávat funkce (a cokoliv) v jiné dokumentaci, i když nejsou podporovány z krabice.

73
Ben Collins

Musím doporučit Emacs Code Browser jako více "tradiční" IDE styl prostředí pro emacs.

EDIT: Také nyní doporučuji Magit vysoce přes standardní VCS rozhraní v emacs.

29
baudtack

Namísto spuštění příkazu make v okně Shell jste vyzkoušeli kompilaci M-x? Bude spouštět příkaz make, zobrazovat chyby a v mnoha případech je velmi snadné přeskočit na řádek kódu, který způsobil chybu, pokud výstup obsahuje názvy souborů a čísla řádků.

Pokud jste fanouškem IDEs, můžete také chtít podívat na balíček emacs 'speedbar (M-x speedbar). Pokud jste ještě neučinili, dozvíte se, jak používat tabulky značek k navigaci ve vašem kódu.

19
Bryan Oakley

Tam jsou rohy emacs, které kdysi objevil vás více produktivní způsoby, které jste nikdy nenapadlo. Jak už zmínili jiní, použití značek je fantastický a rychlý způsob, jak přiblížit zdrojový kód a pomocí M-/(dabbrev-expand) často děláte přesně to, co očekáváte při vyplňování názvu proměnné. 

Použití je užitečné pro získání vyrovnávací paměti se všemi výskyty regulárního výrazu v bufferu. To je opravdu užitečné při refactoring kódu a hledání fragmentů kódu nebo použití proměnných, nebo pokud používáte TODO značky ve zdrojových souborech a chcete je všechny navštívit.

flush-lines, sort-numeric-fields, funkce replace-regexp a obdélník mohou být opravdu užitečné pro odebrání výpisu z nějakého nástroje a jeho převedení na užitečná data, jako je např. elisp program nebo tabulka oddělená čárkami. 

Napsal jsem stránku o IDE jako věci, které můžete dělat s emacs 

http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html

Učení elispu je další skvělý způsob, jak odpovědět sami, co jiného může emacs udělat nad rámec toho, co může typický IDE udělat. 

Například jsem blogoval o psaní Perforce pomocných funkcí, jako je vina (psaní vlastních prostředků, které můžete udělat, aby se chovala přesně tak, jak chcete) ...

http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-working-on-last.html

Také jsem napsal kód, který dynamicky vytváří komentáře pro funkci v bodě, který odpovídá kódovacím normám, se kterými pracuji. 

Žádný z mých elisp kódů není obzvláště velký a většina z nich již existuje v knihovnách, ale je to opravdu užitečné, aby bylo možné, aby emacs dělal vlastní věci, které přicházejí během pracovního dne. 

15
justinhj

Podrobný popis integrace emacs & version naleznete na stránkách my site . Také pracuji na článku o používání Emacs jako vývojového prostředí pro mnoho jazyků - C/C++, Java, Perl, LISP/Scheme, Erlang atd.

10
Alex Ott

Okay, všichni tady dávají perfektní rady, aby se emacs stal skvělým IDE. 

Ale kdokoliv by měl mít na paměti, že když si svůj emacs přizpůsobíte spoustou rozšíření (zejména těch, které jsou určeny pro kontrolu typu za běhu, vyhledávání definic funkcí atd.), Váš emacs se na editoru načte velmi, velmi pomalu. 

K řešení tohoto problému bych doporučil použít emacs v server mode

Je to docela jednoduché použití, není třeba přizpůsobit svůj soubor init. Stačí spustit emacs v režimu démon;

emacs --daemon

Tím se vytvoří emacs server, pak ho můžete připojit buď z terminálu, nebo z gui. Doporučuji také vytvořit nějaké aliasy, aby bylo snadné volání. 

alias ec="emacsclient -t"
alias ecc="emacsclient -c &"
# some people also prefer this but no need to fight here;
alias vi="emacsclient -t"

Tímto způsobem budou emacs vystřelit ještě rychleji než gedit, slibují.

Jeden možný problém zde, pokud používáte démona emacs od vašeho běžného uživatele, pravděpodobně se nemůžete připojit k serveru emacs jako root

Pokud tedy potřebujete otevřít soubor s přístupem uživatele root; místo toho použijte tramp. Jednoduše spusťte klienta emacs s běžným uživatelem a otevřete soubory jako je tento;

C-x C-f
/Sudo:[email protected]/some/file/that/has/root/access/permissions
# on some linux distro it might be `/su:[email protected]` 

Tím se můj život usnadnil, můžu otevřít svůj těžký upravený python IDE v milisekundách tímto způsobem. Můžete také chtít přidat emacs --daemon ke spuštění systému nebo vytvořit pracovní soubor pro emacsclient. To je na tobě. 

Více o emacs démonovi a emacs klientovi lze nalézt na wiki;

http://www.emacswiki.org/emacs/EmacsAsDaemon

http://www.emacswiki.org/emacs/EmacsClient

8
Muhammet Can

Pro řízení verzí existuje několik věcí, které můžete použít v závislosti na tom, jaký systém správy verzí používáte. Některé funkce jsou však společné všem.

vc.el je vestavěný způsob zpracování řízení verzí na úrovni souborů. Má backendy pro většinu systémů pro správu verzí. Například, Subversion backend přijde s Emacs, a tam jsou git backends a jiní dostupný od jiných zdrojů.

Nejužitečnější příkaz je C-xv v (vc-next-action), která provede odpovídající další akci pro soubor, který navštěvujete. To může znamenat aktualizaci z úložiště nebo provádění změn, vc.el také rebinds C-x C-q kontrolovat vstupy a výstupy souborů, pokud používáte systém, který to potřebuje (jako RCS).

Další velmi užitečné příkazy jsou C-xv lC-xv = , které ukazují protokol a aktuální rozdíl pro soubor, který používáte.

Pro skutečnou produktivitu byste se ale měli vyhnout použití příkazů vc.el s jedním souborem, než pro jednoduché věci. Existuje několik balíčků, které vám poskytnou přehled o stavu celého stromu a poskytnou vám větší sílu, a nehledě na schopnost vytvářet soudržné příkazy zahrnující několik souborů.

Většina z nich je silně ovlivněna nebo založena na originálu pcl-cvs/pcvs pro CVS. Existují dokonce dva z nich, které přicházejí s Subversion, psvn.eldsvn.el. Existují balíčky pro git atd.

8
dkagedal

Souhlasím s tím, že byste se měli dozvědět o kompilaci M-x (vázat, a M-x příští chyba na krátkou sekvenci kláves).

Další informace o vazbách pro řízení verzí (např. Vc-diff, vc-next-action atd.)

Podívejte se do registrů. Nejenže si můžete pamatovat umístění v bufferech, ale celé okno (C-x r w - window-configuration-to-register).

7
HD.

Výchozí bod (který může být non-zřejmý) pro zkoumat VC rysy Emacs je M-x vc-next-akce

V aktuálním souboru provede operaci "další logické řízení verzí" v závislosti na stavu souboru a backendu VC. Pokud tedy soubor není pod kontrolou verzí, zaregistruje jej, pokud byl soubor změněn, změny jsou odeslány atd. 

Trvá to trochu zvykat, ale je to velmi užitečné. 

Výchozí klávesová zkratka je C-x v v

6
Chopmo

Je zde TFS.el pro integraci emacs do Microsoft TFS . Pracuje s jakýmkoliv TFS, včetně TFS, který provozuje Codeplex.com. 

Základní kroky k nastavení:

  1. Umístěte tfs.el do své dráhy.

  2. Ve vašem souboru .emacs: 

    (require 'tfs)
    (setq tfs/tf-exe  "c:\\vs2008\\common7\\ide\\tf.exe")
    (setq tfs/login "/login:domain\\userid,password")
          -or-
    (setq tfs/login (getenv "TFSLOGIN"))  ;; if you have this set
    
  3. také v souboru .emacs nastavte lokální nebo globální vazby kláves pro příkazy tfs. jako tak:

    (global-set-key  "\C-xvo" 'tfs/checkout)
    (global-set-key  "\C-xvi" 'tfs/checkin)
    (global-set-key  "\C-xvp" 'tfs/properties)
    (global-set-key  "\C-xvr" 'tfs/rename)
    (global-set-key  "\C-xvg" 'tfs/get)
    (global-set-key  "\C-xvh" 'tfs/history)
    (global-set-key  "\C-xvu" 'tfs/undo)
    (global-set-key  "\C-xvd" 'tfs/diff)
    (global-set-key  "\C-xv-" 'tfs/delete)
    (global-set-key  "\C-xv+" 'tfs/add)
    (global-set-key  "\C-xvs" 'tfs/status)
    (global-set-key  "\C-xva" 'tfs/annotate)
    (global-set-key  "\C-xvw" 'tfs/workitem)
    
4
Cheeso

kompilace, příští chyba a předchozí chyba jsou všechny důležité příkazy pro vývoj C++ v Emacsu (funguje také skvěle na grep výstupu). Důležité jsou také Etags, visit-tags-table a find-tag. complete.el je jedním z největších neuzavřených hacků 20. století a může urychlit váš C++ hacking o řád. A nezapomeňme na šerif.

Ještě jsem se nenaučil, jak používat řízení verzí bez návštěvy prostředí Shell, ale teď, když běžím, spáchá se tak mnohem častěji (s gitem).

3
jfm3

Používám emacs ve Windows. kompilační modul je Nice, ale chtěl jsem, aby kompilace byla chytřejší o příkazovém řádku kompilace, který navrhuje. Je možné použít "File Variables" pro určení compile-command , ale chtěl jsem něco trochu chytřejšího. Tak jsem napsal malou funkci, abych pomohl. Odhaduje příkaz kompilace, který má použít, k zobrazení výzvy uživateli při spuštění compile

Funkce hádání hledá soubor vbproj nebo csproj nebo sln a pokud je nalezen, navrhne msbuild. Pak se dívá na název souboru vyrovnávací paměti a podle toho navrhuje různé věci. Soubor .wxs znamená, že se jedná o projekt WIX a pravděpodobně budete chtít vytvořit MSI, takže logika odhaduje příkaz nmake pro MSI. Pokud je to modul Javascript, pak je návrhem spustit soubor jslint-for-wsh.js, aby se soubor. Jako nouzový, to navrhne nmake. 

Kód, který používám, vypadá takto:

(defun cheeso-guess-compile-command ()
  "set `compile-command' intelligently depending on the
current buffer, or the contents of the current directory."
  (interactive)
  (set (make-local-variable 'compile-command)
       (cond
        ((or (file-expand-wildcards "*.csproj" t)
             (file-expand-wildcards "*.vcproj" t)
             (file-expand-wildcards "*.vbproj" t)
             (file-expand-wildcards "*.shfbproj" t)
             (file-expand-wildcards "*.sln" t))
         "msbuild ")

        ;; sometimes, not sure why, the buffer-file-name is
        ;; not set.  Can use it only if set.
        (buffer-file-name
         (let ((filename (file-name-nondirectory buffer-file-name)))
           (cond

            ;; editing a .wxs (WIX Soluition) file
            ((string-equal (substring buffer-file-name -4) ".wxs")
             (concat "nmake "
                     ;; (substring buffer-file-name 0 -4) ;; includes full path
                     (file-name-sans-extension filename)
                     ".msi" ))

            ;; a javascript file - run jslint
            ((string-equal (substring buffer-file-name -3) ".js")
             (concat (getenv "windir")
                     "\\system32\\cscript.exe c:\\users\\cheeso\\bin\\jslint-for-wsh.js "
                     filename))

            ;; something else - do a typical .exe build
            (t
             (concat "nmake "
                     (file-name-sans-extension filename)
                     ".exe")))))
        (t
         "nmake "))))


(defun cheeso-invoke-compile-interactively ()
  "fn to wrap the `compile' function.  This simply
checks to see if `compile-command' has been previously set, and
if not, invokes `cheeso-guess-compile-command' to set the value.
Then it invokes the `compile' function, interactively."
  (interactive)
  (cond
   ((not (boundp 'cheeso-local-compile-command-has-been-set))
    (cheeso-guess-compile-command)
    (set (make-local-variable 'cheeso-local-compile-command-has-been-set) t)))
  ;; local compile command has now been set
  (call-interactively 'compile))

;; in lieu of binding to `compile', bind to my monkeypatched function
(global-set-key "\C-x\C-e"  'cheeso-invoke-compile-interactively)

Snažil jsem se to udělat jako "před radou" pro kompilovanou funkci, ale nemohl jsem ji dostat uspokojivě. Tak jsem definoval novou funkci a vázal ji na stejnou kombinaci kláves, kterou jsem používal pro compile


EDIT je nyní " smarter-compile.el ", která tuto myšlenku posouvá o krok dále.

3
Cheeso

Můžete také najít tabbar užitečné. Napodobuje jediné chování, které jsem zmeškal při přechodu z Eclipse do Emacsu. Vazba na "," a "." pro přesun na předchozí a následující lištu se vám znovu přepne z vyrovnávací paměti pomocí Ctrl-x b.

Tato webová stránka bohužel neposkytuje správnou verzi ke stažení. Většina verzí Ubuntu je však dodává v balíčcích emacs-goodies.

3
wr.

Vím, že je to velmi starý příspěvek. Tato otázka je však platná pro začátečníky emacs.

IMO nejlepším způsobem, jak používat emacs jako ideu, je použít jazykový serverový protokol s emacs. Veškeré informace o jazykových serverech naleznete na odkazovaných stránkách. 

Pro rychlé nastavení bych vás požádal, abyste šli na tuto stránku eglot . IMO eglot dělá svou práci docela dobře. Dobře se integruje s balíčky automatických doplňků jako je společnost. Poskytuje reference a další. 

Také pro ladicí program můžete potřebovat specifické debuggery pro konkrétní jazyky. Můžete použít gdb z emacs. Stačí zadat M-x gdb

Pro kompilaci kódu je nejlepší použít příkazy Shell. Na tomto projektu pracuji eproj . Bude to chvíli trvat, než to dokončí. Ale vše, co dělá, je mapovat příkaz Shell na typ projektu. A staví vás prostřednictvím projektu Shell. To samé provede příkaz. Možná budu potřebovat pomoc při dokončení tohoto projektu. Není to připraveno k použití, ale pokud víte, že je to trochu elisp, můžete projít kódem. 

To stranou je vždy nejlepší použít příkaz emacs compile.

Pro řízení verzí jsem ještě neviděl žádný jiný balíček, který by mohl odpovídat výkonu magit . Je to specifické pro git. Také pro git existuje další balíček git-timemachine, který považuji za velmi užitečný.

Vyhledávání objektů a vyhledávání třídy poskytuje protokol jazykového serveru. 

Strom projektu lze použít jako rozhraní s treemacs .

Existuje také projekt Interakční knihovna nazvaná projectile .

Pro automatické vyplňování najdu firemní režim velmi užitečný. 

Opravdu emacs mohou být dělány dělat něco.

2
sidharth arya

Vyhledávání v dokumentaci: závisí na vašem programovacím jazyce (jazycích).

Knihovny C a systémová volání jsou obvykle dokumentovány v manuálových stránkách. K tomu můžete použít M-x man. Některé věci mohou být lépe dokumentovány na informačních stránkách; použití M-x info.

Pro samotný elisp použijte C-h f. Pro python použijte v interpretu >>> help(<function, class, module>).

Zjistil jsem, že většina ostatních jazyků nabízí dokumentaci ve formátu html. Vyzkoušejte vložený prohlížeč (používám w3m). Nastavte proměnnou prostředí BROWSER na skript wrapperu kolem emacsclient -e "(w3m-goto-url-new-session \"[email protected]\")" (na * nix), v případě, že by se mohlo otevřít prohlížeč a chcete ho otevřít uvnitř emacs.

2
Jonas Kölker

V uplynulých letech, Clang se stal důležitou částí Emacs C + + podpora. Atila Neves hovořila na CppCon 2015: "Emacs jako C++ IDE"

Jedná se o 16minutový rozhovor, kde zobrazuje řešení pro následující témata:

  • Přejít na definici
  • Automatické dokončení
  • Zvýraznění syntaxe
  • Najděte soubor v projektu

Snímky lze nalézt zde .

1
Philipp Claßen

Ve stylu Unixu nebo X okna nevím, že existuje integrované IDE, které funguje pro všechno. 

Pro interakci s debuggery, jen jednu komponentu IDE, zvažte realgud . Další věc, kterou mám, je užitečná jsou parsery pro zprávy o poloze, takže pokud máte stopu volání zásobníku a chcete editovat na určitém místě v callstacku, toto rozhraní to může udělat. 

Tento program by mohl zdaleka využít zlepšení. Ale pak by to mohlo také využít lidí, kteří na něm pracují, aby to vylepšili. 

Disclaimer: Pracuji na realgud

0
rocky