Emacs desteği bir projenin tamamında işlev beyanına gidebilir mi?


12

Emacs, kullanıcının başka bir dosyada tanımlanmış olsa bile işlev bildirimine gitmesine izin verebilecek bir işlevi veya kitaplığı var mı?

Eğer öyleyse, hangi diller için destek var?

Bu soru için ilham, emacların IDE'lerle asla rekabet edememesinin nedenlerinden bazılarını anlatan aşağıdaki makaleden geliyor.

http://henrikwarne.com/2012/06/17/programmer-productivity-emacs-versus-intellij-idea/


Emacs'in bunu genel olarak ele alma biçimi, kaynak kodunu hızlı bir şekilde anlamak ve komut satırı üzerinden iletilen sorgulara yanıt vermek için harici, derlenmiş programlara (clang gibi) dayanmaktır. irony-clangBu amaçla göz atın . Makaledeki yorumları okudun mu?
Sean Allred

1
Her ikisi de navigasyon / refactoring / ide-ish şeyler için harici programlara dayanan alchemist.el, iksir için veya C # için omnisharp tarafından sağlanan işlevsellik, çoğu IDE'ye oldukça benzer. (en azından çoğu kullanım durumunda). Emacs, IDE'lerle aynı işte değil, bu yüzden asla rakip bir şansı olmayacağını söylemenin makul olduğunu düşünmüyorum .
Renan Ranelli

@RananRanelli IDE aynı şekilde, ancak zaten birisinin yaptığı ve "IDE" olarak adlandırdığı yerine manuel olarak entegrasyon yapmak zorundayız.
Tu Do

2019 yılında bence dikkate almanız gereken tek bir çözüm var. Ve bu şirketin tamamlanmasıyla ilgili rtags. Etags veya şişirilmiş, kararsız CEDET'i unutun. rtags, projenizin kullandığı CANLI bir yapı sağlamak için derleme zamanı bilgilerini kullanır. küresel ve diğerleri korkunç - onlar bir sürü tahmin ve sık sık yanlış yere götüren "greps" yüceltilir. Github.com/Andersbakken/rtags
RichieHH

Yanıtlar:


14

Linux çekirdeği kaynak ağacı (36k'den fazla) kadar büyük olan tüm projenin herhangi bir tanımına / referansına hemen atlayabilirsiniz. Ayrıntılar için C / C ++ rehberime bakın. C / C ++ için, C, C ++, Yacc, Java, PHP4 ve montajı destekleyen GNU Global kullanmanızı öneririm .

Anahtar, bir dilin IDE özelliklerine sahip olmak istiyorsanız, o dilin eklentisini yüklemeniz gerekir. İşte bildiğim dinamik diller için bazı paketler:

  • Canlı web geliştirme: şiş modu .
  • Javascript: Sumru . Ancak bundan önce js2 modunu kurmayı unutmayın . Ne js2-modeişe gelince , açıklamaya bakın ; ancak özünde, js2-modedoğru IDE özelliklerini yapmak için bir AST üreten tam bir Javascript ayrıştırıcısıdır. Eğer yüklerseniz , varsayılan olarak skewer-modesahip olacağınızdan , buna bağlıdır.js2-modeskewer-mode
  • Python: elpy , IDE özelliklerine bakın
  • Ruby: robe şu özellikleri sağlar:
  • Yöntem tanımına atla
  • Super'e veya noktada çağrılan bir kurucuya atla
  • Bir modüle veya sınıfa atlayın (en az bir tanımlı yöntem olması koşuluyla)
  • Görüntüleme yöntemi belgeleri
  • ElDoc kullanarak noktada çağrılan yöntem hakkında bilgi görüntüleme
  • Yöntem ve sabit ad tamamlama

ctagsKabuk betiği veya Tcl gibi çok sayıda dili desteklemek için de kullanabilirsiniz ...


Javascript için herhangi bir paket öneriniz var mı?
user2522280

@BarryG Tern var ve cevabımda j2-modedüzenledim.
Tu Do

2
anacondaPython'da tanım atlama için daha spesifik bir çözüm olabileceğimizi belirtmek isterim .
PythonNut

@TuDo Robe'ın özellik listesini ESS altına koydunuz.
Dmitry

C ++ için rtags ve ycmd de vardır . Python, C #, Go ve diğer dillerle de çalışan ycmd kullanıyorum. Kullandığım dilsiz-jump ve avukat-rg düşme-back olarak veya kullanımlarını ya yorumladı / doc bir sembolün bahseder göstermek için.
17:43

20

Emacs ile benzer bir sorunla karşılaştım, bu yüzden Aptal Atlama yaptım . Kabul edilen cevapta bahsedilen çözümlerin çoğunu denedim, ancak her zaman aşağıdaki sorunlardan bir veya daha fazlasıyla karşılaştım:

  • Çözüm yalnızca tek bir programlama dili için çalıştı
  • Çözüm bir dizin (TAG) dosyası veya kalıcı işlem gerektiriyordu

Kötü bir şekilde "yeni çalıştı" ve özelleştirme veya kurulum gerektirmeyen bir çözüm istedim. Yani, Github'da rastgele bir repoyu klonlamak ve kendi projelerimdeki gibi dolaşmak istedim.

Şu anda Dumb Jump için temel destek var:

  • JavaScript
  • Emacs Lisp
  • piton
  • Git
  • PHP
  • Yakut
  • Faust
  • R,
  • Lua
  • Pas, paslanma
  • ...ve dahası

Bu var MELPA yoluyla ulaşılabilir ve GitHub sorunları ve PRs daha fazla kabul edilir.


4

Emacs'ta bunun için birincil çözüm, etags veya gtags gibi programlar tarafından oluşturulan TAGS dosyalarını kullanmaktır. Kendim coşkulu ctags ve etags-select.el kullanıyorum (ve tavsiye ederim). Desteklenen diller oldukça fazladır, tek tek araçların kılavuzlarına bakın. Kendi dilinizi eklemeniz için destek bile vardır, böylece ctags'a ilgilendiğiniz etiketleri nasıl izole edeceğinizi bildiren düzenli bir ifade sağlayabilirsiniz.


1
Ah! Tagsfiles dosyalarını nasıl unutabilirim? ctags -e -R *kök dizinden sizin için ayarlayacaktır.
Sean Allred

Projenizin birçok bağımlılığı olduğunda (daha yeni javascript web dev projeleri gibi) bu kabul edilebilir bir çözüm müdür?
Rudolf Olah

Bağımlılıkların sayısı bir engel değildir. Birçok farklı kütüphaneyi toplayan bir büyük etiketler dosyanız olabilir; Bunu yıllarca yaptım, ctags çağrımı önemsizce emrediyor. Ya da şimdi önerdiğim bağımlılık başına ayrı bir etiket dosyasına sahip olmak; emacs birden fazla etiket dosyası yükleyecek kadar akıllıdır. Bunu kolaylaştırmak için, proje başına etiket dosyası gruplarının yüklenmesine yardımcı olan etags-table.el dosyasını arayın.
InHarmsWay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.