2009-03-23 13 views

Odpowiedz

14

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).

+2

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

+0

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? –

+25

Ale to nie jest refaktoryzacja. To ręcznie przechodzi i edytuje cały program. – vy32

6

Mój przyjaciel grał z xrefactory i powiedział, że zadziałało całkiem dobrze. To nie jest tanie.

+10

To nie jest bezpłatne i nie jest bezpłatne. :( – ashawley

+0

To prawda, ale OP nie wymagał darmowego rozwiązania. :) Mówiąc to, xrefactory nie widział aktualizacji od 2007 roku, więc może mieć problem z refaktoryzacją współczesnego C++ 11 i jego aplikacji . – mzuther

25

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

+2

Po prostu patrząc na stronę CEDET, wydaje się, że jest to o wiele lepsza odpowiedź niż wybrana ... –

+2

(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 ... –

8

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.

+0

Wow. To całkowicie kołysze. Używam emacs od tak dawna, nigdy nie zdawałem sobie sprawy, że dodali to. –

+6

Tak, ale to nie jest refaktoryzacja. – vy32

2

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ń.

4

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

27

W ostatnich wersjach Emacsa (24), semantyczna jest w stanie się do tego.

  1. Ewentualnie włączenia trybu semantycznej M x semantycznej trybu RET.
  2. Wyświetl bufor Symref z C-c, g.
  3. Naciśnij klawisz C-c C-e, aby otworzyć wszystkie odwołania.
  4. Zmień nazwę na R.
+6

Wierzę, że jest to "C-c, g" zamiast tego, co masz. – lfxgroove

+1

Ładne rozwiązanie !!! – Amumu

+0

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' –

Powiązane problemy