How I boosted my Vim
nvie.com
nvie.com
set nobackup set noswapfile
backup files are one thing, but turning off swap files is a terrible idea. vim can crash, you can accidentally close the window, your ssh session can die, etc. if you exit vim cleanly then the swap files will be transparent, so i don't see the point in disabling them.
What really ends up happening is I try to edit a file and something annoying pops up telling me about something requiring my attention (swap file already exists .. read only mode .. bla bla). In other words, it's just a distraction, most of the time.
You can configure it to put your swap files in a canonical dir, instead of polluting the directory you're editing files in:
set backupdir=/var/tmp,/tmp
set directory=/var/tmp,/tmp
Now you can just nuke the swap files in one swoop:
rm -rf /var/tmp/*.swp
set backupdir=./.backup,.,/tmp
set directory=.,./.backup,/tmp
This way, if you want your backups to be neatly grouped, just create a directory called '.backup' in your working directory. Vim will stash backups there. The 'directory' option controls where swap files go. If your working directory is not writable, Vim will put the swap file in one of the specified places.
(http://vim.wikia.com/wiki/Remove_swap_and_backup_files_from_...)
set backupdir=~/.vim/backup//
set directory=~/.vim/swp//
The double tailing slash will store files using full paths so if you edit two different models.py files you won't clobber your swap or backups.It can?
Vim: Caught deadly signal SEGV
But, I soon realized that noswapfile has another problem which caused me to disable it after all: it will allow you to open same file in more then one vim editor instance. And this is really asking for troubles.
It is less of a problem with graphical vim as you can use "autoread" to sync changes between instances, but it is a disaster on console.
Binding the <Esc> key to capslock has been really useful for me. http://vim.wikia.com/wiki/Map_caps_lock_to_escape_in_XWindow... explains how you can do this, although it's done externally and not in Vim. Just include the script in your shell rc file and you're good to go.
Experienced users can hide the menu and tool bars with:
set guioptions-=m "remove menu bar
set guioptions-=T "remove toolbar
Extra screen space for your code is always nice!
Another amazingly useful plugin is MiniBufExplorer (http://www.vim.org/scripts/script.php?script_id=159). This allows you to open multiple buffers in the same vim window, and with the key binds given in the plugin page you can switch between buffers just like you switch between tabs in Firefox. It's really useful when you follow tags in a large source directory.
And for people who can't seem to find just the right colour scheme: Color Scheme Pack plugin (http://www.vim.org/scripts/script.php?script_id=625). It has over a 100 different themes, nicely categorized.
Customization is way easier than in Emacs, you just unzip an archive in your .vim dir and (99% of the time) it works. I have plugins that do everything I've seen in Emacs that has to do with code, and then some.
Vim is no more the tiny start-quick-edit-close editor that it used to be.
Edit: I don't want to start a holy war here. Emacs is great, and I in fact have it opened right now. It's just that it's supposed to be able to do amazing stuff that Vim can't, I'm saying that that's probably still true, but to a way lesser level than before.
(from the doc, [I: Display all lines that contain the keyword under the cursor. Filenames and line numbers are displayed for the found lines. The search starts at the beginning of the file.)
sweet!)
I can _highly_ recommend this plugin, even if it's a bit harder to install than most other Vim plugins.
Check out https://wincent.com/products/command-t and http://amix.dk/blog/post/19501#Command-T-for-Vim-an-awesome-...
Navigating you project in this way feels a lot quicker than actually browsing the hierarchy with something like NERDTree. Don't worry about where things actually are, just type some junk and the file you want will almost always come to the top.
One big productivity boost for me was remapping the Escape key to something a little more convenient. I just remapped the ESC key altogether, but this can throw you off if you find yourself working at lots of different computers. If you prefer something less permanent, you can map a key sequence to ESC. I like this one, which maps 'sdf' to ESC if you're in insert mode:
imap sdf <ESC>
jkjk is also a sequence I've seen used.My combination is just kj.
inoremap <C-c> <Esc>
I use <C-j> in insert mode (not to be confused with <C-j> in command mode, which jumps to the buffer below).
Obviously, these are only my personal opinions.
The problem is, IDEs are amazing for everything other than editing text. This includes editing source code, mind you. I find it much easier and funner to edit code in vim, since it has so many small things that make editing code much faster.
IDEs are generally much slower for the actual act of editing code than things like vim. They're just better because of everything else they do, which (sometimes) makes up for it.
Also, most people care a lot more about all the other things like code completion than they do about the small improvement you can get by editing in vim/emacs.
P.S. I have code completion, jump to file etc all working just fine in vim. On a codebase with 15000+ files, this is a hell of a lot faster in vim than it is in say, Eclipse.
What features do you think Emacs is missing?
But the biggest problem with emacs is the "project management" functionality. Emacs is designed to be "just an editor". To do the most simple thing, which is to define a project consisting of a few directories, and be able to move between those files, is very hard. Pick up many modern editors, and you can, with one command, point to a directory and have a project tree, a "jump to file", etc, all built for you. Not to mention the way they create makefiles automatically, do code-completion, create tag files so you can jump to a function by name, etc.
I can just list the number of things I didn't have to know about before starting emacs: makefiles, tag files, etc. Not having to worry about these kinds of things is the biggest feature emacs is lacking.
You can: IntellJ.
Considering how trivial it is to write an ant file to do the same thing, it's appalling that the IDEs don't just do this by default. How can you write a good application if you don't even know how to compile it?
But the biggest problem with Emacs is the "project management" functionality. Pick up many modern editors, and you can, with one command, point to a directory and have a project tree, a "jump to file", etc, all built for you.
Emacs does this too: http://github.com/jrockway/eproject.
Of course, Emacs' version is a lot more flexible. The user can hook it, so he gets a fresh project REPL the first time he visits a new project. Or, he can hook the eproject-after-save hook, and commit the changes to a "backup" git branch, so that he never has to worry about not being able to undo.
The idea behind Emacs is that it can do things that nobody else has ever done before, and it continually lives up to this expectation.
(Also, "this is too hard for beginners". OK. Then how did I learn Emacs?)
s/available/trapped/
s/integrated/monolithic/
;-)
I think IDEs are useful, yet they always make me think what a bad example of code reuse they are. Code reuse? Are you kidding? Much better rewriting each plugin with each IDE ;-)
EDIT: By "monolithic" I don't mean that IDEs are not modular; I mean you can't use their modules elsewhere.
There is a lot of wheel reinventing in the Emacs and Vim's camps too, however. I just wanted to say that no matter how much code reuse is valued by developers, the tools they use the most are made with the less reusable pieces of software around.
Actually, it does work over SSH if your X connection is forwarded properly.
Cheers, Vincent