Interesuje mnie głównie C++ oraz metody/nazwa klasy/podpis automatycznych zmian.Jak mogę refaktoryzować kod źródłowy C++ za pomocą emacs?
Odpowiedz
Robię to bardzo często, więc oczekuję również innych odpowiedzi.
Jedyne dostępne mi sztuczki są naprawdę podstawowe. Oto moi najlepsi przyjaciele w Emacs gdy refactoring kod:
M-x query-replace
Pozwala to zrobić wyszukiwania globalnego i zastąpić. Będziesz robić to tonę, gdy przenosisz metody i powszechnie dostępne dane do innych klas lub przestrzeni nazw.
C-x 3
To daje wyświetlacz z dwoma buforami obok siebie. Możesz następnie załadować do nich różne pliki i przesunąć kursor z jednego na drugi za pomocą C-x o
. To dość podstawowe rzeczy, ale wspominam o tym ze względu na to, jak potężny sprawia, że następny ...
C-x (
(type any amount of stuff and/or emacs commands here)
C-x)
W ten sposób definiujesz makro w emacs. Za każdym razem, gdy będziesz musiał robić to samo w kółko, aby utworzyć pakiet kodu (i jest to zbyt skomplikowane, aby zastąpić zapytanie), jest to ratownik. Jeśli się zepsułeś, możesz nacisnąć C-g
, aby zatrzymać definicję makra, a następnie cofnąć (C-_
), aż powrócisz do miejsca, w którym zacząłeś. Kluczami do wywołania makra są C-x e
. Jeśli chcesz zrobić to kilka razy, możesz nacisnąć Esc
i najpierw wpisać numer. Np .: Esc 100 C-x e
spróbuje wywołać twoje makro 100 razy.
(Uwaga: W systemie Windows można uzyskać "Meta" poprzez naciśnięcie klawisza Esc lub przytrzymanie klawisza Alt).
Mój przyjaciel grał z xrefactory i powiedział, że zadziałało całkiem dobrze. To nie jest tanie.
Jeśli możesz programować w elispie, możesz sprawdzić kombinację cedetu + srecode od CEDET libraries - zapewnia on wszystkie instrumenty do tego zadania - znajdź wywołujących funkcje, zdobądź podpis, itp. Ale musisz samodzielnie stworzyć narzędzie do sprawdzania, przy użyciu tych instrumentów
Po prostu patrząc na stronę CEDET, wydaje się, że jest to o wiele lepsza odpowiedź niż wybrana ... –
(Edytowana w celu dodania linku do strony CEDET). Nie jestem pewien, czy nie zgadzam się z Jaredem, ale musiałbym to wypróbować. "Musisz samemu stworzyć narzędzie do refak- cji" trochę wygląda na omnious ... –
Dla gdzieś pomiędzy narzędziami refaktoryzacji i prostym regexem, ponieważ Emacs 22 można osadzić dowolne wyrażenia elisp w tekście zastępczym, co pozwala na niesamowicie potężną manipulację tekstem. Steve Yegge napisał jakiś czas temu na good article.
Wow. To całkowicie kołysze. Używam emacs od tak dawna, nigdy nie zdawałem sobie sprawy, że dodali to. –
Tak, ale to nie jest refaktoryzacja. – vy32
Całkowicie zgadzam się, że praca "znajdź i zamień" działa dobrze. Jednak naprawdę miłą cechą cedetu jest "semantic-symref-list".
Za pomocą kursora na metodzie uruchom tę komendę, a otrzymasz bufor zawierający listę wszystkich miejsc kodu, które odwołują się do tego znacznika.
Nadal można skorzystać z trików typu znajdź i zamień, co potwierdzi zmianę wszystkich odniesień.
Zbuduj symbole cscope.
wyszukać symbol, który chcesz naprawić.
dostać się do okna Cscope i uruchomić makro po umieszczeniu kursora na pierwszego wystąpienia
- ret
- cf Twój symbol rozpocząć
- Przejdź do początku swojego symbolu
- modyfikować słowo
- cx o (z powrotem do cscope)
- n (następny symbol cscope)
trzeba tylko c-x C-e teraz
W ostatnich wersjach Emacsa (24), semantyczna jest w stanie się do tego.
- Ewentualnie włączenia trybu semantycznej M x semantycznej trybu RET.
- Wyświetl bufor Symref z C-c, g.
- Naciśnij klawisz C-c C-e, aby otworzyć wszystkie odwołania.
- Zmień nazwę na R.
Wierzę, że jest to "C-c, g" zamiast tego, co masz. – lfxgroove
Ładne rozwiązanie !!! – Amumu
Niestety, wymaga środowiska POSIX. Próbując go użyć na MS Windows 7 (bez zainstalowanego Cygwin lub minGw) otrzymuję "semantic-symref-tool-grep: Wyszukiwanie programu: brak takiego pliku lub katalogu, sh" po uruchomieniu 'Cc, g' –
Jest to nowe narzędzie, które sprawia, że korzystanie z emacs ramach semantyczny-mode:
Wypasione demos: https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos.org
Pobierz go z M-x pakiet zainstalować z MELPA lub https://github.com/tuhdo/semantic-refactor/.
- 1. Jak zmodyfikować kod źródłowy za pomocą Roslyn?
- 2. Kod źródłowy biblioteki C
- 3. Jak mogę automatycznie uporządkować kod źródłowy Perla?
- 4. Jak mogę indeksować nasz wewnętrzny kod źródłowy?
- 5. Jak analizować kod źródłowy Blendera
- 6. Co oznacza kod źródłowy^L w (Emacs Lisp)?
- 7. Jak pobrać kod źródłowy Eclipse?
- 8. Przechodzenie przez kod źródłowy za pomocą rozszerzenia Windbg SOS
- 9. Korzystanie z Unicode w C++ kod źródłowy
- 10. Gdzie mogę pobrać kod źródłowy do Biblioteki Standardowej GNU C++?
- 11. Jak automatycznie wcięcić kod źródłowy?
- 12. Gdzie mogę znaleźć kod źródłowy gitk?
- 13. Gdzie mogę znaleźć kod źródłowy dla WebMatrix.WebData.WebSecurity
- 14. Gdzie mogę pobrać kod źródłowy "OpenGL"?
- 15. Skąd mogę znaleźć kod źródłowy polecenia cp?
- 16. Jak tokenizować kod źródłowy Perla?
- 17. Ruby, kod źródłowy Splat?
- 18. Latex + kod źródłowy importu
- 19. Jak wyświetlić kod źródłowy R (przetwarzanie wstępne)
- 20. gdzie jest kod źródłowy C++ filt?
- 21. Kod źródłowy beautifier dla C++ (vC++)?
- 22. C Kod źródłowy w dokumencie Latex
- 23. Jak wygenerować nagłówek źródłowy za pomocą cmake?
- 24. Kod źródłowy API Java
- 25. SyntaxHighlighter v3.0.83 kod źródłowy
- 26. Naprawdę użyteczny kod źródłowy VB6
- 27. Organizowanie R Kod źródłowy
- 28. Jak zaimportować kod źródłowy GWT do zaćmienia?
- 29. Jak mogę uzyskać kod źródłowy HTML z TWebBrowser
- 30. Jak mogę uzyskać kod źródłowy biblioteki standardowej Idris?
Istnieje również wiele innych dobrych narzędzi. Zobacz odpowiedź zawierającą CEDET. Ponadto często używam tagów TAGS i M-x-query-replace, aby zmienić nazwy wszystkich dopasowań na wyszukiwanie znaczników, które mogą obejmować pliki źródłowe. Zobacz także M-x grep-find, co ułatwia znalezienie wszystkich wystąpień symbolu do zastąpienia. – slacy
Próbowałem wcześniej miksować z tagami. Wydawało się, że to więcej kłopotów, niż było warto. Być może podczas refaktoryzacji byłoby warto? –
Ale to nie jest refaktoryzacja. To ręcznie przechodzi i edytuje cały program. – vy32