Towards a Vim-like Emacs
nathantypanski.com
nathantypanski.com
"Any time you are pressing two keys at once, with the same hand, hundreds of times per day, you are setting yourself up for repetitive stress injury"
People: learn to type. One hand for the modifier key, and the other hand for the other key. This is why there are two sets of modifier keys. This is typing 101
You can do something similar with AutoHotKey on Windows, though I don't have a config for it.
Very likely from Steve Losh (I did this too, and it helped a lot): http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shif....
For me, when recently trying to remap the left-shift key I found out that it was not a problem for the supposed best practice of using it for C-g/x/c etc, but that instead I had been using a worse practice for typing ":" or """ when the wrong characters turned up al over the place.
Anyway, I suppose the left option key would be pretty good to map to control for emacs, since it's rarely more needed than the right option key.
You have no idea what I am doing with the esc, capslock, and control keys on the left side of my keyboard, but none of them are default.
On the right however I'm just trying to make sure I get a forward delete somewhere. In fact using Karabiner or Seil, the right shift is now shift if pressed as a modifier, but forward delete if pressed alone.
[1] - https://www.kickstarter.com/projects/70308014/kings-assembly...
Looking forward to reading some reviews once they are available. They look very promising.
Seriously, I know this won't appeal to everyone, but there is a solution to worrying about key combos causing RSI. Just don't touch type. Do embarrassing hunt-and-peck typing. I'm a professional programmer and long-time emacs user and I can't touch type for shit and it doesn't affect my career and my hands and wrists have been completely free of any trouble whatsoever (to current age of 36). If hunt-and-peck leaves you typing slower than you can design software solutions in your head then find a more challenging job.
Edit: Not you, particularly. But I have met bad typists, and that is how many of them behaved. Don't be that guy.
I can't touch type but my code reads:
def snmp_command(session, oid, media_servers):
result = list()
for host_name in media_servers:
snmp = SNMP_CMD.format(host=host_name, oid=oid)
snmp_reply = [x for x in session.cmditer(snmp)]
if len(snmp_reply) == 0:
log.warning("No data for EMS Media Server SNMP cmd {0} for host {1}".format(snmp, host_name))
continue
# add the Media Server host from which we got this reply to the list of snmp reply
snmp_reply.append(host_name)
result.append(snmp_reply)
return resultThat said, where's your docstring? Why are your lines longer than 80 chars? Why is your indent 2 chars instead of 4? What does `oid` mean? http://legacy.python.org/dev/peps/pep-0008/
In addition, the life of a programmer is much more than programming. You have to type documentation, you have to type e-mails, etc. I agree that typing speed is not a key for programming "interesting stuffs", but for everything else, touch-typing is an important skill.
I also find touch typists introduce less typos, because they're looking all the time at the screen and mistakes are noticed immediately.
Also as a Unix/terminal/VIM user, touch typing is a must. VIM is not worth it if one isn't able to touch-type, period.
What if it has an effect on your career and you don't realise it? Sounds way more likely to me.
(Also: sticky modifiers)
Examples: Prettier status line? Don't need it. Tree view of my project? Don't need it, or I use the shell command called tree. Autocomplete? I started learning the APIs of the tools I use because it makes my writing code better and much, much faster. Therefore I don't need that anymore. Git integration? Why would I want that? ":!git" is fine. The sorround plugin would be an idea, but it's key usage is strange in my eyes.
Not spending this time into individualization and instead using this time to learn more about vim has significantly increased my code generation and allows me more easily to work on other systems with the same efficiency as on my own.
If you have some real arguments for plugins I am really, really curious to learn what they are. But please consider before writing if spending the same time into learning how to solve your problem with vim capabilities would not be the better and faster approach.
Emacs' ability to open REPLs and work with those, with a neat workflow (e.g. you edit text in your file, then press a shortcut to reload the REPL or maybe just send the expression under the cursor, is definitely nice, since it's very interactive).
It's also nice to have good Git integration. I can select any fragment (like a function) and quickly go through its history. I cannot do that easily with ":!git".
Emacs can also do a lot of things related to editing text. For example I use Org Mode for managing my tasks / TODO lists, whereas other people use Trello, or Google Keep, or EverNote or other apps that lock you in and that never do what they are supposed to do. A TODO list is a freaking text file and having the ability to manage that from within my favorite text editor is surely a win and hey, I can also synchronize that in the cloud. Because really - here it isn't Vim vs Emacs anymore, but Emacs versus your browser's TextArea. Get it?
Starting repls is a great thing, I have to admit. I can do that partly by e.g. ':!python -i -c "whatever"' but it's not really integrated.
I also love to do "other" things in text files instead of websites, because text files allow you to do anything with it. Automated tasks, reformatting, compiling to other formats like diagrams, storing in the cloud, or a repo, or simply adding it to an email. I don't see why I need plugins or special modes for it, though. I think that's more an argument for learning text editors in general. No matter if you use vim, emacs, sublime, or maybe atom, in any case you gain a huge advantage over people who can only be efficient inside a huge IDE or their web browsers.
The other things like debugging, documentation generation, etc are in my eyes not tasks for a text editor. I expect to do that in the shell and it works there. Jumping to definitions is possible in Vim btw. Under the hood it integrates with ctags which is a typical tool to index code definitions, I think (or does it only exist for vim?).
The git example, in my eyes, is perfect for what I meant, though. You can't do some things as directly or easily with ":!git" but that also works the other way around. No plugin enables you to do everything you can do with ":!git" and I bet if you write git aliases for what you want to do, you can nearly be as efficient in the things the plugin can do. The added cost is that you need to write them yourself. The added gain is, that you learn to use git better and you can even use the aliases when you are not in vim.
For example it can track the time it takes to work on a task and it can easily hide/show descriptions. So it goes beyond simple text editing. Of course, I believe it has been ported to other text editors. At least I know there is a port for Sublime Text, but it's incomplete and much less capable. Vim probably has a port too, but then if you end up customizing Vim, you might want to take a look at Emacs :-)
CTags is a pain, since you have to reindex your files periodically and it doesn't work well for other people's libraries. In IntelliJ IDEA it simply works, you can just click on a class / function definition and if it doesn't have the sources available for that JAR (say it's a library you depend on), it downloads those sources automatically and takes you to the definition. For Emacs it works if you have the right plugin installed - works for Clojure and for Scala / Java for example (though for Scala / Java, we are talking about an Eclipse-based engine running in the background :))
I do get the mentality of Vim users, I've been there and I even use Vim sometimes, but depending on the problems you're working on and the platform you're using, I lean towards the IDE approach nowadays. And Emacs is like a general purpose and non-bloated IDE.
You should look at my guides if you want an IDE-like experience: http://tuhdo.github.io/
I find writing code in C/C++ with Emacs much faster than typical IDE: http://tuhdo.github.io/c-ide.html
For writing Lisp code, maybe except the commercial IDEs, none other tool matches.
Breaking Emacs to make it more like Vi is cargo culting.
I donated to NeoVim few months ago and I'll donate again. Really wishing them success.
You're welcome.
You kids and your fancy new stuff. :)
I'll check it out.
I'm using a package called use-package, which gets installed via MELPA if it isn't found on first run, then goes and installs and configures a bunch of other packages which will also download if needed. You can see how this works in the init-packages file: https://github.com/stafu/.emacs.d/blob/master/init/init-pack...
Some of my favourite packages are magit (incredible interface to git - http://magit.github.io/), multiple-cursors (nice demo here: http://emacsrocks.com/e13.html), expand-region (another nice demo: http://emacsrocks.com/e09.html), and projectile (https://github.com/bbatsov/projectile).
For example, you should take a look at Projectile and Helm Projectile: http://tuhdo.github.io/helm-projectile.html
I also use evil-mode.