4 ms·
I use Eclipse as my main development environment. I'm familiar with vi, I use it regularly for sys-admin stuff, and used it extensively a while back in college
by cedsav 16y ago
I use Eclipse as my main development environment. I'm familiar with vi, I use it regularly for sys-admin stuff, and used it extensively a while back in college.
As far a text-editor goes, I'm 100% sure that vim/emacs power users are extremely productive (And I'll wage that this video isn't the best example of productivity vs. a GUI).
What I haven't been able to figure out though is the workflow of vim users when working on real projects, not a single source file.
I rarely spend a lot of time writing code in a single file. I often have to navigate the project folder structure to look for stuff, I need to compare files, work with the source control and so on.. all of this I feel I can do pretty efficiently from within Eclipse.
So how do vim/emacs users do? I presume it's all command line and a lot of typing. Am i wrong?
- ominous_prime 16y ago> So how do vim/emacs users do? I presume it's all command line and a lot of typing. Am i wrong? It's not much typing, and it's definitely faster than switching to a mouse. Both vim and emacs have plugins for easily browsing file systems, and through trees of source code. I personally use a separate terminal window for source control, but that can easily be integrated as well. It's probably a similar workflow to what you're doing now, just without a mouse, and with different key bindings.
- aerique 16y agoWe generally use Unix as our IDE, yes, but it doesn't involve a lot of typing. Emacs users can also do everything from within Emacs.
- koenigdavidmj 16y agoIn Vim, FuzzyFinder (http://www.vim.org/scripts/script.php?script_id=1984 http://www.vim.org/scripts/script.php?script_id=1984) makes it really easy to flip between files. That, and once you learn Vim frame management, you become a lot more productive on multiple files.
- swombat 16y agoAnd NERDtree. http://www.vim.org/scripts/script.php?script_id=1658 http://www.vim.org/scripts/script.php?script_id=1658
- jarin 16y agoAnd PeepOpen if you're on a Mac and using MacVim http://peepcode.com/products/peepopen http://peepcode.com/products/peepopen
- pyre 16y agoI prefer LustyExplorer. The only downside is that they both require ruby support in Vim (some some of our work servers vim only has perl and python scripting support).
- thyrsus 16y agoBoth vim and emacs can split (either horizontally or vertically) to show as many files as your typeface can usefully cram in. As a greybeard, I learned the vim predecessor vi, which didn't have that ability, then learned emacs, which at the time (1984) did, so my calcified reflexes use vi first (because there aren't any more Unix boxes that don't have it) but switch to emacs as soon as I'm going to want more than one file on the screen - since (in my environments) emacs is everywhere that vim is, and I haven't taken the time to learn the Vim way to do things. In my opinion, emacs and vim are both superb editors, but both need time spent to get reflexes into your fingers to operate - i.e., they're both "expert friendly", and perhaps "casual hostile".
- slmbrhrt 16y agoset wmh=0 set winheight=1000 map <C-j> <C-W>j<C-W>_ map <C-k> <C-W>k<C-W>_ map <C-h> <C-W>h<C-W>_ map <C-l> <C-W>l<C-W>_ This is the first stanza of my vimrc. I use :sp and :vsp a lot. My capslock key is mapped to behave like left control. The result is moving between files is a matter of holding capslock and pressing hjk or l. I argue it's a lot faster than using a mouse or even control and pageup/down in a tab-based IDE. For opening new files, tab completion is a godsend, and then there's other bonuses to using vim, like :!grep "def functionImLookingFor" lib/*.py and, when I'm sifting through logfiles for patterns, :%!grep has become one of my most often used tools.
- tlack 16y agoAny reason you're using :!grep rather than the built in ctags support? I've found the latter to be very useful but maybe I'm missing some functionality.
- slmbrhrt 16y agoMost of the time I'm not searching for function definitions across the whole base. This is just an example. That, and I haven't really fooled around with ctags much, though I've been meaning to for the longest time. No time like the present, I guess.
- dan00 16y ago"So how do vim/emacs users do?" vim - ctags for class/method navigation - fuzzyfinder for buffer/file system navigation
- gilgad13 16y agoThis is pretty effective, ctrl-] takes me to the definition of any symbol. And with the appropriate plugin I get the same quality tab-complete I'd get with an IDE. If you need even deeper exploration, cscope will allow you to find files which include this one, all calls to a given function, etc. But never underestimate a simple `find | xargs grep`. I'm currently learning a ~4m line code base using these methods and haven't had real problems yet. I will agree that out of the box vim/emacs aren't set up as an IDE replacement. But since you're investing so much time in learning vim modal concept or emacs bindings, the added effort to customize your editor for what you do is a drop in the bucket.
- kroger 16y agoEmacs probably doesn't have the best support out-of-the-box to navigate a project, but it can be done with speedbar and ECB [4]. Alternative ways to get around source code include using dired, the directory editor, the various grep commands [5], and some form of tags (I like to use exuberant ctags [6]). To give examples for the things you mention, emacs has an interface for version control that works consistently with CVS, Subversion, bzr, git, hg, and others. And if you need something more powerful you can use a mode for your specific version control system, like magit for git [1] (I suggest you check this magit screencast [2]). Emacs has a built-in mode to compare files (ediff) [3], to compile programs, run interpreters inside emacs, and so on. You can see a good overview of these features at [7]. I'm sure you can have a similar setup with vim. [1] http://philjackson.github.com/magit/ http://philjackson.github.com/magit/ [2] http://vimeo.com/2871241 http://vimeo.com/2871241 [3] http://tech-rantings.blogspot.com/2008/12/emacs-diff-ediff-tutorial.html http://tech-rantings.blogspot.com/2008/12/emacs-diff-ediff-t... [4] http://ecb.sourceforge.net/screenshots/index.html http://ecb.sourceforge.net/screenshots/index.html [5] http://www.gnu.org/software/emacs/manual/html_node/emacs/Grep-Searching.html http://www.gnu.org/software/emacs/manual/html_node/emacs/Gre... [6] http://ctags.sourceforge.net/ http://ctags.sourceforge.net/ [7] http://www.gnu.org/software/emacs/tour/ http://www.gnu.org/software/emacs/tour/
- Aykroyd 16y agoI've been hot and cold on emacs over the years. I've used it enough that there is a lot that I really like about it and that I'm annoyed by not having in other editors. But that list of links is the reason why ultimately I have decided to spend my time in a different editor. Yes anything is possible and people have done work that probably intersects with what you're looking to do. But rarely does anything just work. I spend too much time try to make things work and re-implementing features that exist in other environments. I tend to use Textmate and Intellij -- although extending Intellij is such a heavy process that I pretty don't do it.
- kroger 16y ago"But that list of links is the reason why ultimately I have decided to spend my time in a different editor." Actually most of the functionalities I mentioned are available out-of-the-box. Ediff just works. Version control just works. I sent a long list of links so people could have a better idea how these features work. It's true, though, that emacs doesn't have everything out-of-the-box and you need to download and install and configure things, but the same is true for every single editor and IDE out there.
- briancarper 16y ago> I often have to navigate the project folder structure to look for stuff, I need to compare files, work with the source control and so on.. all of this I feel I can do pretty efficiently from within Eclipse. For Vim, there are a lot of plugins to deal with source trees, but I get along fine with Vim's built-in wildmenu and tab completion. Both options are nicely configurable. For emacs, I like ido-mode. I find it much faster to browse a directory and open a file with the keyboard and tab-completed filenames than to use a mouse. There are also commands to jump to other files to find the definitions of functions and such. It depends which programming language you're using. Vim has `gd` and friends to do the same. And then there's ctags, which integrates with Vim wonderfully. Editing Lisp code in Emacs with SLIME (for example), `M-.` will jump you to a function definition in another file. For comparing files, it'd be hard to beat vimdiff, which provides built-in, cross-platform colored diffs of buffers. Emacs has a diff mode as well. For source control, Vim and Emacs both integrate well with Git and others. You can stage and commit files and such via a keystroke or two. But personally I use the command line for git. (Of course you can embed a shell right in Emacs too.) Vim and Emacs let you use "windows" (panes) instead of tabs for editing multiple files; don't overlook how awesome this is. You can view files side-by-side without having to close or hide one to open another. It frees short-term memory for other things. Once you set up keybindings for opening, closing, resizing and moving between windows, you're set. I haven't found anything faster or easier to use. Finding and viewing a buffer that isn't currently visible again uses tab-completion and is very fast. So yes, a lot of typing. But typing is more efficient than mousing, I find. That's part of the point of Vim and Emacs to begin with. I often work on Ruby on Rails projects in Vim with 2 dozen files open, or more, and have a very easy time.
- stevelosh 16y agoOne quick, small tip about Vim's panes(/windows) that most people don't notice right away: not only can you view two parts of the same file at the same time, but you can fold/unfold the code in them independently.
- parbo 16y agoI can have a bazillion files open in emacs and still switch between them easily with ido-switch-buffer (C-x b), which does fuzzy matching on the buffer name.
- oscarduignan 16y agoSomething like the vim command-t plugin (https://wincent.com/products/command-t/ https://wincent.com/products/command-t/) can make filenavigation very fast. That, the already mentioned C-j, C-k, C-h, C-l bindings, nerdtree, and bufexplorer (http://www.vim.org/scripts/script.php?script_id=42 http://www.vim.org/scripts/script.php?script_id=42) and you're set for speedy file navigation. Then when you're comfortable with that there are things like taglist.vim to take advantage of ctags to kick it up a notch further!
- thezilch 16y agoYou may want to try http://eclim.org http://eclim.org -- http://eclim.org/vim/cheatsheet.html http://eclim.org/vim/cheatsheet.html * Eclipse projects integration * Ant Integration * Dozens of language / markup integrations -- validation (at minimum) * VCS integration * and more... enhancements of vim built-ins
- njharman 16y agoI tend to have 3-4 vims open (I hate tabs/overlapping windows, I want everything I'm working on visible!) I type very, very little and use the mouse even less (which is more important IMO) though because: Tab completion both in vim and bash shell. History both in vim and bash shell. Things like CDPATH are great.
- pyre 16y agoAt our company, there are a lot of internal bindings for vim and emacs. You can hit a key combo, and have vim/emacs determine the base class of the perl module you're working on, and open in up in a new buffer. You can hit a key combo to open up the test module for the current module. You can hit a key combo to run the unit test that you're working on, etc. Vim also has the 'gf' (go-to-file) keybinding while goes to the file under the cursor. It does a good job of being language specific when it needs to be. For example, if the 'file' is a perl module or java package/class it will convert "Text::Utils" or "text.utils" to text/utils{.pm,.java} and search for it in the comma separated list of paths in the &path variable (i.e. :set path). Vim auto-magically imports the perl path @INC or java path into &path (though weird local configurations aren't auto-detected, and you'll just have to write something to inject those paths into &path). Vim also has things like NERDTree and LustyExplorer that make navigating a dev tree pretty easy.