Obecnie mój przepływ pracy z Emacsem, gdy koduję w C lub C ++, obejmuje trzy okna. Największy po prawej zawiera plik, z którym pracuję. Lewa strona jest podzielona na dwie części, dolna to powłoka, której używam do wpisywania poleceń kompilacji lub tworzenia poleceń, a na górze często jest jakaś dokumentacja lub plik README, z którym chcę się zapoznać podczas pracy. Teraz wiem, że są tam dość doświadczeni użytkownicy Emacsa i jestem ciekawy, jakie inne funkcje Emacsa są przydatne, jeśli zamierzamy używać go jako kompletnego IDE. W szczególności większość IDE zwykle spełnia te funkcje w takiej czy innej formie:
- Edytor kodu źródłowego
- Kompilator
- Debugowanie
- Wyszukiwanie dokumentacji
- Kontrola wersji
- Funkcje obiektowe takie jak wyszukiwanie klas i inspektor obiektów
W przypadku kilku z nich jest całkiem oczywiste, jak Emacs może dopasować te funkcje, ale co z resztą? Ponadto, jeśli trzeba się skupić na konkretnym języku, powiedziałbym, że powinien to być C ++.
Edycja: Jeden użytkownik wskazał, że powinienem był być bardziej szczegółowy, kiedy powiedziałem „a co z resztą”. Przede wszystkim interesowała mnie skuteczna kontrola wersji, a także wyszukiwanie dokumentacji. Na przykład w SLIME dość łatwo jest wykonać szybkie wyszukiwanie hiperspeckie w funkcji Lisp. Czy istnieje szybki sposób na wyszukanie czegoś w dokumentacji C ++ STL (jeśli na przykład zapomniałem dokładnej składni hash_map )?
źródło
Odpowiedzi:
Musisz dokładnie określić, co masz na myśli przez „resztę”. Z wyjątkiem inspektora obiektów (o którym wiem), emacs robi to wszystko dość łatwo:
M-x compile
i wprowadź polecenie kompilacji. Od tegoM-x compile
momentu możesz po prostu użyć domyślnego. Emacs przechwytuje błędy kompilatora C / C ++ (działa najlepiej z GCC) i pomoże ci przejść do linii z ostrzeżeniami lub błędami.M-x gdb
a utworzy bufor gdb ze specjalnymi powiązaniamiEdycja: zdaję sobie sprawę, że moja odpowiedź dotycząca wyszukiwania dokumentacji naprawdę dotyczyła nawigacji po kodzie. Oto kilka bardziej szczegółowych informacji:
Wyszukiwarka Google bez wątpienia ujawni dalsze przykłady.
Jak pokazuje drugi link, można wyszukiwać funkcje (i cokolwiek) w innej dokumentacji, nawet jeśli nie są one obsługiwane po wyjęciu z pudełka.
źródło
Muszę polecić Emacsa Code Browser jako bardziej "tradycyjne" środowisko IDE dla emacsa.
EDYCJA : Również teraz polecam Magit bardziej niż standardowy interfejs VCS w emacsie.
źródło
Zamiast uruchamiać polecenie make w oknie powłoki, czy próbowałeś kompilować Mx? Uruchomi polecenie make, wyświetli błędy, aw wielu przypadkach bardzo ułatwi przejście do wiersza kodu, który spowodował błąd, jeśli dane wyjściowe zawierają nazwy plików i numery wierszy.
Jeśli jesteś fanem IDE, możesz również spojrzeć na pakiet speedbara emacsa (Mx speedbar). Jeśli jeszcze tego nie zrobiłeś, dowiedz się, jak używać tabel tagów do poruszania się po kodzie.
źródło
Istnieją zakamarki emacsa, które raz odkryte sprawiają, że jesteś bardziej produktywny w sposób, o którym nigdy nie pomyślałeś. Jak wspominali inni, używanie tagów to fantastyczny i szybki sposób na przybliżanie kodu źródłowego, a użycie M- / (dabbrev-expand) często robi dokładnie to, czego oczekujesz, wypełniając nazwę zmiennej.
Użycie wystąpienia jest przydatne do uzyskania bufora ze wszystkimi wystąpieniami wyrażenia regularnego w buforze. Jest to bardzo przydatne podczas refaktoryzacji kodu i wyszukiwania fragmentów kodu lub zastosowań zmiennych, lub jeśli używasz znaczników TODO w plikach źródłowych i chcesz je wszystkie odwiedzić.
funkcje typu flush-lines, sort-numeric-fields, replace-regexp i rectangle mogą być bardzo przydatne przy pobieraniu zrzutu z jakiegoś narzędzia i konwertowaniu go na przydatne dane, takie jak program elisp lub arkusz kalkulacyjny rozdzielany przecinkami.
Napisałem stronę o IDE, na przykład o rzeczach, które można zrobić z emacsem
http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html
Nauka elisp to kolejny świetny sposób, aby odpowiedzieć sobie na pytanie, co jeszcze emacs może zrobić poza tym, co może zrobić typowe IDE.
Na przykład pisałem na blogu o pisaniu funkcji pomocniczych Perforce, takich jak obwinianie (pisanie własnych oznacza, że możesz sprawić, by zachowywały się dokładnie tak, jak chcesz) ...
http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-working-on-last.html
Napisałem również kod, który dynamicznie tworzy komentarze dla funkcji w punkcie, który jest zgodny ze standardami kodowania, z którymi pracuję.
Żaden z moich kodów elisp nie jest szczególnie świetny, a większość z nich istnieje już w bibliotekach, ale naprawdę przydatna jest możliwość tworzenia niestandardowych rzeczy w emacsie, które pojawiają się w ciągu dnia roboczego.
źródło
Możesz znaleźć szczegółowy opis integracji emacsa i kontroli wersji na mojej stronie . Pracuję również nad artykułem o używaniu Emacsa jako środowiska programistycznego dla wielu języków - C / C ++, Java, Perl, Lisp / Scheme, Erlang itp ...
źródło
W przypadku kontroli wersji jest kilka rzeczy, których możesz użyć, w zależności od używanego systemu kontroli wersji. Ale niektóre funkcje są wspólne dla wszystkich.
vc.el to wbudowany sposób obsługi kontroli wersji na poziomie pliku. Posiada zaplecze dla większości systemów kontroli wersji. Na przykład backend Subversion jest dostarczany z Emacsem, a istnieją backendy git i inne dostępne z innych źródeł.
Najbardziej użytecznym poleceniem jest Cx vv (vc-next-action), które wykonuje odpowiednią następną akcję dla odwiedzanego pliku. Może to oznaczać aktualizację z repozytorium lub zatwierdzenie zmian, vc.el również ponownie wiąże Cx Cq, aby pobierać i pobierać pliki, jeśli używasz systemu, który tego potrzebuje (np. RCS).
Innymi bardzo przydatnymi poleceniami są Cx vl i Cx v =, które pokazują dziennik i bieżące różnice dla używanego pliku.
Jednak dla prawdziwej produktywności należy unikać używania jednoplikowych poleceń vc.el innych niż do prostych rzeczy. Istnieje kilka pakietów, które mogą dać ci przegląd stanu całego twojego drzewa i dać ci więcej możliwości, nie wspominając o możliwości tworzenia spójnych zatwierdzeń obejmujących kilka plików.
Większość z nich ma duży wpływ lub jest oparta na oryginalnych pcl-cvs / pcvs dla CVS. Są nawet dwa z nich, że pochodzi z Subversion, psvn.el i dsvn.el . Istnieją pakiety dla git itp.
źródło
Okay, wszyscy tutaj dają doskonałe wskazówki, jak uczynić emacs świetnym IDE.
Ale każdy powinien pamiętać, że kiedy dostosujesz emacsa z wieloma rozszerzeniami (szczególnie z tymi do sprawdzania typu w locie, wyszukiwania definicji funkcji itp.), Twój emacs będzie ładował się bardzo, bardzo wolno dla edytora.
Aby obejść ten problem, bardzo polecam używanie emacsa w
server mode
.Jest dość prosty w użyciu, nie ma potrzeby dostosowywania pliku init. Wystarczy uruchomić emacsa w trybie demona;
Spowoduje to utworzenie serwera emacs, który możesz podłączyć z terminala lub z gui. Polecam również utworzenie aliasów, aby ułatwić dzwonienie.
W ten sposób emacs uruchomi się szybciej niż gedit, obietnica.
Jedynym możliwym problemem jest to, że jeśli używasz demona emacsa od zwykłego użytkownika, prawdopodobnie nie możesz połączyć się z serwerem emacs jako
root
.Tak więc, jeśli chcesz otworzyć plik, który ma uprawnienia administratora; użyj
tramp
zamiast tego. Po prostu uruchom klienta emacs z normalnym użytkownikiem i otwórz pliki w ten sposób;Ułatwiło mi to życie. W ten sposób mogę otworzyć moje ciężkie, dostosowane środowisko Python w ciągu milisekund. Możesz także dodać emacs --daemon do uruchamiania systemu lub utworzyć plik pulpitu dla emacsclient. To zależy od Ciebie.
Więcej na temat demona emacsa i klienta emacsa można znaleźć na wiki;
http://www.emacswiki.org/emacs/EmacsAsDaemon
http://www.emacswiki.org/emacs/EmacsClient
źródło
EDITOR="emacsclient -t" VISUAL="emacsclient -c"
, możesz edytować w sudo za pomocąsudo -e
lubsudoedit
, co jest czasami lepsze niż użycie TRAMP (zwykle ze względów audytowych). Możesz również wywołać emacsclient z--alternate-editor=
( potrzebuje spacji na końcu) i uruchomi demona, jeśli nie jest uruchomiony, co eliminuje potrzebę umieszczania demona w uruchomieniu systemu, jeśli chcesz czekać na to za pierwszym razem uruchom edytor przy każdym uruchomieniu.Zgadzam się, że powinieneś dowiedzieć się o kompilacji Mx (powiązanie tego i następnego błędu Mx z krótką sekwencją klawiszy).
Dowiedz się o powiązaniach do kontroli wersji (np. Vc-diff, vc-next-action itp.)
Zajrzyj do rejestrów. Możesz nie tylko zapamiętać lokalizacje w buforach, ale konfiguracje całych okien (Cx rw - window-configuration-to-register).
źródło
Punktem wyjścia (co może być nieoczywiste) do zbadania cech VC Emacsa jest Mx vc-next-action .
Wykonuje „następną logiczną operację kontroli wersji” na bieżącym pliku, w zależności od stanu pliku i zaplecza VC. Więc jeśli plik nie jest pod kontrolą wersji, rejestruje go, jeśli plik został zmieniony, zmiany zostały przesłane itp.
Trochę się do tego przyzwyczaiłem, ale uważam to za bardzo przydatne.
Domyślne przypisanie klawiszy to Cx vv
źródło
Istnieje TFS.el do integracji emacsa z Microsoft TFS . Działa z każdym TFS, w tym TFS, na którym działa Codeplex.com.
Podstawowe kroki konfiguracji:
Umieść plik tfs.el w ścieżce ładowania.
W pliku .emacs:
również w swoim pliku .emacs, ustaw lokalne lub globalne przypisania klawiszy dla poleceń tfs. tak:
źródło
compile, next-error i previous-error są bardzo ważnymi poleceniami dla programowania C ++ w Emacsie (działa też świetnie na wyjściu grepa). Etykiety, tablica-tagów-wizyt i tag-znalezienia są również ważne. Complete.el to jeden z największych niedocenianych hacków XX wieku, który może przyspieszyć twoje hakowanie C ++ o rząd wielkości. Aha, nie zapominajmy o Ediff.
Jeszcze się nie nauczyłem, jak używać kontroli wersji bez odwiedzania powłoki, ale teraz, gdy korzystam z commits znacznie częściej (z git), prawdopodobnie będę musiał.
źródło
Przydatny może być również pasek kart . Emuluje jedyne zachowanie, którego przegapiłem podczas przechodzenia z Eclipse do Emacsa. Powiązane z „,” i „”. aby przejść do poprzedniego i następnego paska kart, przywraca ci to ciągłe przełączanie bufora przez Ctrl-x b.
Niestety wspomniana strona internetowa nie zapewnia odpowiedniej wersji do pobrania. Większość wersji Ubuntu dostarcza go jednak w swoich pakietach emacs-goodies.
źródło
Używam emacsa w systemie Windows. moduł kompilacji jest fajny, ale chciałem, aby kompilacja była mądrzejsza w kwestii wiersza poleceń kompilacji, który sugeruje. Do określenia można użyć „zmiennych plików”
compile-command
, ale chciałem czegoś bardziej inteligentnego. Więc napisałem małą funkcję, aby pomóc. Odgaduje polecenie kompilacji, które ma zostać użyte, aby monitować użytkownika podczas działaniacompile
.Funkcja zgadywania szuka pliku vbproj, csproj lub sln, a jeśli zostanie znaleziona, sugeruje msbuild. Następnie sprawdza nazwę pliku bufora iw zależności od tego sugeruje różne rzeczy. Plik .wxs oznacza, że jest to projekt WIX i prawdopodobnie chcesz zbudować plik MSI, więc logika domysłów sugeruje polecenie nmake dla MSI. Jeśli jest to moduł JavaScript, sugeruje się uruchomienie jslint-for-wsh.js, aby lintować plik .js. Jako rozwiązanie alternatywne sugeruje nmake.
Kod, którego używam, wygląda następująco:
Próbowałem to zrobić jako „przed poradą” dla funkcji kompilacji, ale nie mogłem sprawić, by działała zadowalająco. Zdefiniowałem więc nową funkcję i powiązałem ją z tą samą kombinacją klawiszy, której używałem
compile
.źródło
O wyszukiwaniu dokumentacji: zależy to od języka (języków) programowania.
Biblioteki C i wywołania systemowe są zwykle udokumentowane na stronach podręcznika. Do tego możesz użyć
M-x man
. Niektóre rzeczy mogą być lepiej udokumentowane na stronach informacyjnych; używaćM-x info
.W przypadku samego elisp użyj
C-h f
. W przypadku języka Python użyj>>> help(<function, class, module>)
w interpretatorze.Uważam, że większość innych języków oferuje dokumentację w formacie html. W tym celu wypróbuj wbudowaną przeglądarkę (używam w3m). Ustaw swoją
BROWSER
zmienną środowiskową na skrypt opakowującyemacsclient -e "(w3m-goto-url-new-session \"$@\")"
(na * nix), na wypadek gdyby coś mogło otworzyć przeglądarkę i chcesz ją otworzyć w emacsie.źródło
Wiem, że to bardzo stary post. Ale to pytanie jest ważne dla początkujących emacsa.
IMO Najlepszym sposobem wykorzystania emacsa jako ide jest użycie protokołu serwera języka z emacsem. Wszystkie informacje o serwerach językowych można znaleźć na połączonej stronie internetowej.
W celu szybkiej konfiguracji zachęcam do przejścia do tej strony eglot . IMO eglot wykonuje swoją pracę całkiem dobrze. Dobrze integruje się z pakietami automatycznego uzupełniania, takimi jak firma. Zawiera odniesienia i nie tylko.
Również w przypadku debugera mogą być potrzebne specjalne debugery dla określonych języków. Możesz używać gdb z poziomu emacsa. Po prostu wpisz
M-x gdb
.Do kompilowania kodu najlepiej jest używać poleceń powłoki. Pracuję nad tym projektem eproj . Ukończenie tego zajmie trochę czasu. Ale wszystko, co robi, to odwzorowuje polecenie powłoki na typ projektu. I tworzy Twój projekt za pomocą powłoki. Robi to samo, aby wykonać polecenie. Być może będę potrzebować pomocy przy ukończeniu tego projektu. Nie jest gotowy do użycia, ale jeśli znasz trochę elisp, możesz przejść przez kod.
Pomijając to, zawsze najlepiej jest używać polecenia kompilacji emacsa.
Jeśli chodzi o kontrolę wersji, nie widziałem jeszcze żadnego innego pakietu, który mógłby dorównać mocom magit . To specyficzne dla git. Również dla git istnieje inny pakiet git-timemachine, który jest bardzo przydatny.
Wyszukiwanie obiektów i przeglądanie klas jest zapewniane przez protokół serwera języka.
Drzewo projektu może służyć jako interfejs typu IDE z treemacami .
Istnieje również biblioteka interakcji projektu o nazwie pocisk .
W przypadku automatycznego uzupełniania bardzo przydatny jest tryb firmowy .
Naprawdę można zmusić emacsa do zrobienia wszystkiego.
źródło
W ostatnich latach Clang stał się ważną częścią wsparcia Emacsa C ++. Atila Neves wygłosił referat na temat CppCon 2015: „Emacs as a C ++ IDE”
Jest to 16-minutowa rozmowa, podczas której przedstawia rozwiązania dotyczące następujących tematów:
Slajdy można znaleźć tutaj .
źródło
W stylu systemu Unix lub X windows nie wiem, czy istnieje zintegrowane IDE, które działa na wszystko.
Do interakcji z debuggerami wystarczy jeden składnik IDE, rozważ realgud . Inną rzeczą, która wydaje mi się przydatna, są parsery dla komunikatów o lokalizacji, więc jeśli masz ślad stosu wywołań i chcesz edytować w określonym miejscu stosu wywołań, ten interfejs front-end może to zrobić.
Jak dotąd ten program przydałoby się ulepszenie. Ale wtedy mógłby również wykorzystać ludzi pracujących nad tym, aby go ulepszyć.
Zastrzeżenie: pracuję na realgud
źródło
Wypróbuj tryb lsp. Teraz możesz używać innych funkcji IDE wewnątrz emacsa łączącego się z serwerem. Poszukaj więcej informacji: tryb lsp
źródło