Here are some of my favorite Emacs things:
Helm + Projectile. Helm will fuzzy complete almost anything in Emacs. Projectile is project management. Together get to any Git repo and file there in very quick. Helm is an option to compare to IDO. I rarely use IDO due to Helm.
Magit, widely regarded as a good Git UI. Using is believing. Better than command line or most GUIs for me.
Various editing nodes are good enough (Python, Lisp of course, Markdown).
Org mode is it's own beast, but if you like outlines and productivity tools Org is very nice. I use it, not extensively. It holds my todos and meeting notes and makes it easy to ha e very complex notes in one doc.
Basic text editing. I think Vi has some things it does better than Emacs here, but it is still very powerful and rewards learning the finer details.
Realizing you are in a Lisp machine. A calculator is no further than your Emacs window. Learning to hack Lisp and elisp is its own reward.
I think the time spent learning it is worth it. I think the math checks out in terms of efficiency. I also know Emacs is not going anywhere. Same with Vi.
There is much more to it all, but these are things off the top of my head. There are many smaller things that connect up how I work via Emacs... But there is a lot to it.
The moment you start editing files containing more than one language you're pushed to use a dedicated IDE. And then you discover the joy of "good enough". No need to tinker with config files to get the perfect setup: it works good enough to give you a productivity boost out of the box.
which-key being integrated everywhere has made discovery the easiest of ANY editor/IDE I've used. Imagine if there was a consistent place where the menu would pop up if you faltered any key combination. If I'm trying to go a git command in Android Studio (InteliJ) and I forget the command, I don't get part way through and see a popup list of contextual actions. I'm left to move my mouse to the right place, click, and then hope to find my git action in the menu I picked.
More common is the unified way that helm makes dealing with files (you can find similar things in Sublime / Atom / Vim distributions using Unite (or whatever they used these days)). Even though the better editors have this, it's not universal and still a differentiating factor for usability and consistency.
Spacemacs integrates Magit by default. Magit is the first version control interface complete enough that doesn't make me immediately nope out into a terminal for proper git commands.
In my primary projects, I need to edit XML, Clojure, YAML, SQL, Java, Makefiles, and Python files. Spacemacs handles syntax highlighting, autocomplete, refactoring, repl connection and evaluation (where available), project management (makefiles and maven support), and documentation lookups.
All of those text editors above have some excellent and unique redeeming qualities. But at the end of the day their actual language support tends to be weak.
Now I do Python work in Pycharm, R work in Rstudio, and SQL work in whatever IDE goes with my database engine. I use Nvim as my system $EDITOR but at work I'm using it less and less often. I love it and I'll never give it up, but it's becoming more of a hobby tool than something that helps me get things done.
It's still fairly new so most solutions I've seen that use it still have some sharp edges.
I've gone pretty deep into both vim and emacs over the years, and so it always hurts a little when something like PyCharm comes along, and it works better, and does more out of the box than any finely tuned emacs/vim setup (which often take significant time investments).
I use vim for everything, but Intellij (because we have the licenses; I mainly use it for Python at the moment) has my attention. Wish I had more time to learn it; it has been a couple of months and I still don't feel really comfortable. But the capabilities actually make a difference.
Vim is never going away for me; muscle memory, if nothing else, ensures it will always be the most efficient way for me to type text and I spend most of my time in the terminal anyway. And as nice as it was when it was my go-to for everything, there are times when a special purpose editor has a place.
The trick is the setup, but I've only had problems with minor edge cases (like coffeescript 2). Either way I'll spend an hour and use Elisp to fix it. Really nothing I've found is even close to as robust
Spacemacs by extension integrates evil mode entirely, so keyboard macros are available.
I didn't get any strange bugs or slowdowns, but then I am using the `develop` branch which is going to be the upcoming .3 release. I also have a few dozen layers installed.
I would miss Spacemacs' layers way too much if I reverted to vanilla. Its integration of evil-mode is also fantastic, something I don't want or need to recreate.
On FreeBSD the syscons driver lets you edit the keyboard maps in a text file. I don't know how to do it in newcons. I forget how to do it in Linux. If all you care about is X, you can also use xmodmap (IIRC).
Now it's done by simply going to System-Preferences=>Keyboard=>Modifier Keys
Avy Mode, which I suppose is the successor to Jump Mode. Letters light up across the buffer and you can quickly navigate to where you want.
Multi-cursor mode. A Sublime killer feature. Wasn't exclusive very long.
Not sure what it's called, but it binds window changing to shift arrow. Probably my best time-saver.
I've aliased magit-status in my shell and it spawns a new Emacs instance (no demon) and magit in a few seconds.
Combined it’s quite noticeable.
I still use Magit though, because it’s clearly the best git-porcelain around.
It makes everything trivial to do, even rebases become safe and friendly. Its definitely a git client on a league of its own.
It's useful if you don't have an emacs at hand and quickly want to explore a git repository, but that's about it.
I used to use Spacemacs, then switched to vim (better C++ support without ctags, multimodes, easier to get running on remote boxes) -- however I still always use magit as a separate git client, I haven't seen any other git client, GUI or terminal, that gets even close.
I got it all wrong. It's not an editor, it's a text-mode virtual Lisp machine.
The Emacs ecosystem has matured a lot lately. It has two applications I adore. Org, something impossible to describe in a few words, and Magit, the perfect Git porcelain.
Plus it has 3 pretty darn good email clients (Notmuch, Gnus and Mu4e). And some great extras: Dired, Calc, Eshell, Erc, PDF Tools...
Everything is really well integrated. And if something doesn't suit your needs, changing it is a few ELisp lines away.
My computer setup has become very simple: a tiling WM (XMonad), Emacs, Firefox, and a terminal (Urxvt).
I don't use it for much else than programming, so my must-haves are for that purpose. Just the various built-in interpreters make it worth the price of learning.
The reason I loved it was the indentation logic underneath, it was solid and meaningful. Other IDEs would only do very local logic while in emacs, if something doesn't indent where it should, you know you grammared wrong. It was deeply magical and reassuring to me.
I'm an emacs user (in case it matters).
In particular all the little modes that try to emulate emacs functionality (simple things like rainbow-delimiters or slightly more complex things like undo-tree-mode) are always broken in subtle ways in the "modern" applications. Not to mention all the text navigation features: ace-jump & friends, helm-swoop, etc...!
I guess a large part of this is that emacs has had 40 years to mature and that it was originally written at a time where software was judged on different criteria than it is today.
Comparatively, the text editing power of vim/emacs, while nice, just doesn't provide that much value to me anymore, *most of the time.
That being said, it varies by language. If I were working in C, I'd probably use emacs. Working in Go, I still do use emacs (the side effect of the language's simplicity is that solid tooling is a snap to integrate in both vim and emacs). Java or scala? Not a chance in hell I'm going to do anything serious with those two in vim/emacs.
I would like to add helm.
I know the people behind Emacs like to think the system as usable out-of-the-box but I think selling it like that is ultimately a disservice b/c people end up underwhelmed and frustrated - never taking the time to learn ELisp. (the Emacs intro/tutorial is just a "welcome to this nano with annoying keybindings") I actually would challenge anyone to find someone who loves emacs and doesn't know a bit of ELisp :)
Ultimately ELisp is really not that much work to learn - but the root issue seems to me that ELisp isn't really a general purpose programming language and who wants to invest in learning a language you can't use outside of your editor? It's basically a DSL for a managing text and buffers.. It'd be way sexier to learn if it was a Racket or something
I also wrote a little annotated config intro (these are kinda more personal notes for my org/git/C++ workflow). It's a little terse and to the point and isn't trying to sell Emacs, but unlike most guides I tried to document what each lines in the config really means and help the reader learn how Emacs helps you discover more of Elisp as you go. https://geokon-gh.github.io/.emacs.d/ Maybe someone will find it useful! (I'm by no means an emacs expert or Lisp guru.. so if there are problems, let me know please :) )
Which then became my to go editor in UNIX systems, until IDEs finally became a thing on UNIX.
A lisper not leveraging sexp ala paredit/parinfer is odd.
Mind, I do use Evil so I'm getting some 'structured editing'-lite from that already.
I use ivy-mode instead of ido-mode, and avy instead of ace-jump. My setup includes yasnippet, flycheck, company, and ggtags mostly.
I have issues using the number keys. So I use a custom vi like mode, but heavily customized: Pressing spacebar results in "_" ("-" in #include), but intelligently. Double space results in "->", ".." results in (|) (where | is the cursor or point) and ",," results in "=".
Pressing spacebar after "(" results in "&", then "*" (also "!" if just after "if" or "while"). And my capslock key is just another control key.
All the examples above are to be assumed without quotes.
And this is why I love Emacs. There are other editors out there that are good, too. Very good. But to me, Emacs takes the prize because it is so much more than an editor.
That said, I too have developed a renewed appreciation for Emacs these past few years.
Hehe, in retrospect it is so obvious, but I really did not see that coming.
It's an interesting two sides of the same coin. Emacs, as lisp legacy, is centric, everything as layers around a lisp core (and C bits). Vi is more island like, complex logic is delegated to external programs most of the time.
It's interesting to compare the two, how to decouple/modularize a system.
I recently gave spacemacs a try and it’s been my daily editor for the past few months. There is a lot to learn, but spacemacs solves the main pain points I had with off the shelf emacs and I’ve found it to be very productive for me.
I decided to try Spacemacs hoping I might find their vim imitation to be 90% of what I was using in vim, such that I could take advantage of the excellent CIDER mode for Clojure development rather than hacking an analogue in vimscript + a user.clj file. I found Spacemacs to cover everything I had been doing in vim, almost universally better out of the box than I had before.
most people that cite vi-vs-emacs diatribes these days have never actually even used "real" vi -
vim has just about all the "bloat" of emacs but without the real extensibility/programmability..
and just about any emacs session will likely be an order of magnitude smaller than any ide, while on the topic of bloat.
- someone who uses emacs and vi (but not vim)
ps: BSD is Unix
Even if I were to get everything working, then if I were to ever switch jobs suddenly I'm back at square one again.
Emacs and org-mode are perfect, _if_ you don't have to collaborate with anybody.
As I was reading this piece I was imagining that is what the author had done, as it is what I did too:
Here's are couple of examples: https://github.com/howardabrams/dot-files/blob/master/emacs....
Also see: http://howardism.org/Technical/Emacs/literate-programming-tu...
Here's one: http://endlessparentheses.com/init-org-Without-org-mode.html
;; set up ido mode
(setq ido-enable-flex-matching t)
(setq ido-everywhere t)
Where do we put in (add-to-list 'load-path "~/.emacs.d/lisp/") ?
I've got the `(add-to-list 'load-path "~/.emacs.d/lisp/")` pretty early in the file. You can put the `(require `ido) (setq ido-enable-flex-matching t) (setq ido-everywhere t) (ido-mode 1)` where you like. Basically, you just need the lines in your .emacs file - if you add the reference prior to creating the directory and populating it, you'll get an error, but nothing will break. Add the directory and do a `M-x eval-buffer` and it'll pick it up without restarting emacs. Or just restart emacs. Hope this helps. Someone will tell you a better way.
But I'm sure there are similar implementations out there you could copy from too.
I like to say gnu+emacs is my OS, and linux is simply my kernel.
Org-mode alone would be worth it.
I use it fairly regularly and the lack of any distracting UI is a fresh breeze compared to the overloaded editors out there.
It's a preconfigured Emacs configuration (a bit of an overhaul, but not too intrusive if you run it in Emacs or Hybrid mode).
You can just open source files in languages you haven't touched before and the editor will offer to configure itself for that language.
Go to definition works out of the box for more than a dozen languages. :)
1. Install the ggtags.el package in Emacs and install GnuGlobal outside.
2. Make sure /GnuGlobal/bin is in the path environment variable, so that the global and gtags executables can be launched from Emacs.
3. Build the initial index database outside of Emacs. Emacs will update the index as you add new code. I usually just run the following commands on the root of the source directory. You can modify find to include or exclude certain files.
find . -type f >> filelist
gtags -f filelist
I would like to get it working; Apple Mail client is a bit slow on my laptop with a high volume, and I'm all about plaintext and keyboards. I'd happily use Emacs.
Guys like Gary Bernhardt does the same using bash / vi / ruby or python.
I believe the idea is to just be able to use any for of programmatic tooling to cut right through your tasks as quick and as clean as possible.
Is there any equivalent for emacs? I'd love to get it another shot.
There's even more to emacs than to vim, if you start using emacs for more than just editing, doing things that have no equivalent in vim (like reading email, browsing the web, using IRC, or reading RSS news feeds, etc). For every one of these extra things, there's new stuff to learn, and more time to spend configuring emacs first to just work with those things and then to customize it the way you like.
For me the time investment is well worth it, but there's no denying that it takes a lot of time. A lot of time.
but that said, emacs practically is a video game.
I suggest developing a lisp habit, this will just about force you to learn some emacs and from there you will get over the learning curve.
That's an old bike.
(add-to-list 'default-frame-alist '(fullscreen . maximized))
(defun w32-maximize-frame ()
"Maximize the current frame (windows only)"
(defun w32-restore-frame ()
"Restore a minimized/maximized frame (windows only)"
Regarding organization, I don't have much of a system, other than the filesystem under ~/org with a handful of directories. Works just fine for me. It's more about not-caring than caring, regarding organization of information. We really shouldn't have to organize this stuff. Emacs + org-mode allows me to not care. I love that.
No affiliation, I just think it's really neat.
So is there somthing inherent in org mode that just makes a pile of concurrent projects in a directory usable? eg do you just have project plans and mind maps for each "idea" or "product" in your org directory named by idea or is there just one file? or it doesn't matter and you just basically grep to find where you need to be?
And I do have basically the giant tv screens at my desk filling 120 degrees of vision except they're called monitors and there are 7 of them, almost entirely filled with text... except the one that plays baseball all day.
My main problem with learning emacs is usually any explanation from people tries to describe it in words and it's hard to grok, or they do videos but have customized the keyboards bindings so I have no clue how to repeat or translate their magic into operations on my machine. Every time I give it a good go, about once a year for a week, I get going pretty good but then have to really jump back into an urgent task and go back to the tools I know because at the end of the day what I need to do is get work done, not learn emacs. And so I forget. As a counter example I picked up Visual Studio 2017 in about a day having not used anything newer than 2008 in years. VS Code or Sublime were mere minutes. Emacs and vim, I've got basic proficency in them but even after multiple months of total trying with each over 20 year career, they haven't stuck beyond basic git commit editing.
Finally, what a lot of devs don't get, is your logical assertion that emacs or vim or what have you "Is just better" doesn't really resonate with people, even other engineers (who are born skeptics). What resonates with them are examples of WHY it's good, ones they can innately understand. It, like any Don Draper ad, is about translating the fundamentals to another person as succinctly as possible. Like any sales funnel, any friction is going to turn people off. So if you really want to sell Emacs or Vim or any other gospel, have a good sales pitch and don't get mad at people when they give feedback because "they're too much of a mouth breather like those folks in Farenheit 451 to realize what they're not getting".
On server i use vim (took me a while to understand the commands, but now i found it insanely clever on some comands)
Meh. To use his bicycle analogy, this is like someone putting Campagnolo components on a Trek CF frame.
Once you feel comfortable with those, then you can think about adding other stuff on, and can add things one at a time.
I've been using Emacs since 2000 or so, and that's how I started. It's also how I still often use Emacs today; I don't particularly care for IDE-like features, and I don't use a lot of packages. And I'm still quite productive with it because the base stuff Emacs is good at is already pretty darned good!
Also have a look at this blog post. https://sites.google.com/site/steveyegge2/effective-emacs
Or perhaps elephant-sized yaks with small shaving blades next to each. (I kid! I kid!)
neither point stands in these cases.
that said, you don't have to like them.
Core tools like a text editor need to be rock solid and depending on volunteer packages is generally not going to cut it vs. paying a small amount towards a supported product.
Full disclosure I recently gave up on Emacs/Spacemacs after several years of using it for Python development (use Pycharm now), Org-mode (Use taskwarrior), and Magit (just use git + some aliases).