views:

989

answers:

10

Background

I'm building an application where it detects what documents you're using from the file system. To do this it must access the AXDocument attribute of the active window. MacVim provides this. Running Vim in the Terminal wouldn't provide this.

I've just put out a survey to ask what editor coders who are interested in my app use. A significant number of the folk using Vim used it directly from the command line.

Why not use a GUI Vim?

Why do some people prefer to run Vim this way versus a GUI implementation like MacVim?

What advantages does this offer? As I understand it, you can send files to MacVim from the command line just as easily as command line Vim.

+13  A: 

One might not have access to a gui (think ssh) or simply force of habit.

doron
I work in vim via ssh+screen all day, every day.
Lucas Oman
You *can* run `gvim` over `ssh` if you enable X11 forwarding:`ssh -X user@host gvim`
Jabir Ali Ouassou
+2  A: 

To avoid (or at least minimize) the use of the mouse.

Aito
I use gvim, macvim and regular old vim and don't use the mouse with any of them...
thenduks
+11  A: 

These reason my be different for each specific developer but my guess would be:

  1. vim is pretty much vim on any platform. GUI implementations can vary.
  2. Familiarity - being familiar with vim does not nessecarily mean being familar with vim wrapped ina GUI - espectially given #1.
  3. "Elite Complex" ;-)
  4. No definite avantages to the users over cli vim.
prodigitalson
I love the Elite Complex. There's little more satisfying than performing a nifty search and replace to the amazement of your bemused colleagues. +1 :)
Paul Alan Taylor
@Paul: haha i agree. Watching a pro use vi/vim (or even emacs hehe), or Quicksilver is like seeing magic being worked before your eyes.
prodigitalson
A: 

As a big vim user myself, although I know about GUI vims, I don't use them just out of habit.

I've been using vi since 1990, switched to vim a few years ago but still call it through an alias (alias vi=vim).

For me its just habit. vim works well as it is. Perhaps the gui offers more and I should explore it, but vim works just the way I expect it to and want it to.

rayd09
+7  A: 

Although I don't use any feature exclusive to the GUI version (never touch the mouse while editing) I find GVIM more pleasing to the eye for fonts rendering and color management. So the only reason to use the cli version is not having access to a graphic environment (like when accessing a remote machine via ssh). Using GVIM also allows reuse of the terminal it was called from without having to use screen.

kemp
Exactly. Same reasons here.
Konrad Rudolph
+3  A: 
  • some gvim variations can't handle some of my hotkeys

  • some spawn separate window when i try to compile program

  • sometimes they simply can't use fonts like fixed or terminus correctly (think about "terminus bold" - some gvim variations simply stretch "terminus normal" instead of rendering with the separate font)

  • cli generally works faster than gui, especially if running in real textmode console (not possible on a mac though)

  • there are almost no benefits in using GUI version, and i'd loose ability to run in screen, ssh, to suspend process with ctrl+z, and many more.

Alexey Yakovenko
Couldn't you just use a different font?
intuited
yes, you can use any font you like.
Alexey Yakovenko
A: 

The main reason I use the command line is that I spend most of my day in a terminal already, and my use of vim reflects this. I do not open up vim for a long while just editing different files then opening others without closing it; I usually open a file or two do a few edits then do some command line tasks, maybe change a directory, and open up vim somewhere else. When using the a gui there is substantial lag when opening the editor. This wouldn't bother me if I opened it once and left it open but I tend to not work that way. So the command line works better for my workflow. Furthermore since there is no real benefit feature-wise of the GUI over the command line and vise-versa, I've always just stuck with the command line since it suited me better.

Neg_EV
+2  A: 

vim is way more performant with huge files (100-500MB .csv or .xml files in my case).

gvim beats vim hands-down when used to compare files (gvimdiff): setting the font (want more content on the screen?), dragging the window split line (want to see more of one file rather than the other) etc.

Other than that, I haven't seen other mayor differences and use gvim except when working with large files because I find it more handy in a graphical environment (gnome).

Tomislav Nakic-Alfirevic
I don't agree with your second paragraph. The font size can be set in any terminal I've ever used via CTRL-MINUS and CTRL-PLUS; resizing windows is accomplished via, for example, `CTRL-W_10_<` to reduce the current window's width by 10 characters. It takes a bit of practice but this ends up being more efficient for the majority of, if not every, use case.
intuited
I appreciate the info and stand corrected...although I'd say that for most people, dragging the window separator with a mouse is so much more intuitive and faster than Ctrl-w_10_< that I'm going to leave my answer unchanged for them and let people read the comments for more info.
Tomislav Nakic-Alfirevic
If you run vim in a gui you can still drag the split line.
Daenyth
@Daenyth: might have something to do with your environment, but on my machine, the split line can't be dragged running vimdiff in gnome-terminal.
Tomislav Nakic-Alfirevic
Ah, I'm using urxvt
Daenyth
+2  A: 
  • being able to run vim under screen provides

    • reliability: it will stay alive if X or the terminal app crashes. not sure how applicable this is to the Mac.
    • the option to multiplex sessions within terminal tabs. I actually end up rarely using terminal tabs because of this. It's possible (albeit a bit confusing) to set up heirarchical screen sessions and move branches of them around. screen is super awesome. This also provides an additional layer of text buffering in which you can search by regexp — this is useful if you spawn a shell command that is pages long and you're looking for a particular word in there.
    • the ability to connect to an existing session from another computer or reconnect after a network outage
    • and friends
  • in addition to making it possible to use screen, the console vim provides better shell integration. Although it's possible to run shell commands from within gvim (again, I'm not sure how this applies to the Mac, I'm a linux guy), there are limitations. I rarely use a gui vim so I'm not sure about the exact limits. For example, ANSI color codes are removed. I find this annoying because I tend to interact with SCM that way, for example running :!git diff --cached to check the changes in the index before committing. It makes for a somewhat quicker and more satisfying (mmm, diffy!) read if it's colourized.

  • I used to feel that gvim was a big improvement for viewing diffs, but I've changed the background colour of my terminal to a dark non-black shade, and set

    :highlight DiffAdd ctermbg=Black
    :highlight DiffChange ctermbg=Black
    :highlight DiffDelete ctermbg=Black
    :highlight DiffText cterm=Bold ctermbg=None
    

    The result of this is that in diff mode, differing text shows up with a black background, and unchanged text is coloured with the terminal background colour. For side-by-side diffs, this works wonderfully, since you can tell immediately based on the other side whether a given line is a change or add; for non-side-by-side you will be able to see an unchanged part in a changed line.

    This means that you can leave syntax colouring on and still be able to see diffs. Again, you do need to be able to set the background colour of the terminal to a unique, dark, non-black shade. This facility is available in the terminal emulators that I use (yakuake/konsole and roxterm) and many others.^[?Mac^M"mya)^O^Op

    This also assumes that you're using a colourscheme meant for use with a dark background colour; I use a modified delek.

  • Although I haven't tried this, there is also the option to run console vim in 256-colour mode on terminals which support that mode — which I believe includes most or all modern ones. This can serve to make much of the subtlety of GUI colorschemes available to console vim.^["mp

  • I also like it that it lives in the place where it was started, and starts up quick. So if I'm navigating around in the shell, as per my wont, I can edit a file without interrupting that flow or having to farm that operation out to a different piece of conceptual real estate. Having less things to keep track of is a big plus. Being able to background it is helpful, too, for example if I need to grab the contents of an unexported shell variable via xclip. If I'd spawned a GUI window instead I might have some trouble remembering where that shell was, or might have already closed it.

  • My main reason for using a gui vim at all is that it makes somewhat more sense as something spawned from a gui app, eg a browser. In practice I never do this, and I suspect that it's fairly equivalent to just have a new terminal window pop up with a new console vim in it. Though there is likely some (window manager) window management functionality that is exclusive to gui implementations. This is pretty similar to the use case you're discussing.

intuited
Wait, you’re using `vim` **without** 256 colours? Now that’s just weird …. I weep for crappy syntax highlighting.
Konrad Rudolph
ha ha... I don't find it a problem at all, but maybe I just don't know what I'm missing? I did tune my terminal colours a bit to improve contrast, but I'm still using 8/16.
intuited
A: 

gvim is actually just a basic terminal emulator with vim running in it, and some menus and toolbar buttons up the top.

So if you have a good, full-featured terminal emulator already, you may as well use that instead, since you'll be using the same type of terminal window that you are familiar with across all your terminal sessions.

Another benefit is that it makes it easy to switch to a shell inside vim and then switch out seamlessly.

On Windows I prefer gvim. On Linux it's vim inside gnome-terminal, which is nice and configurable thankyou.

thomasrutter