

Extreme Productivity with Screen and Vim - feydr
http://airodig.com/2010/08/27/extreme-productivity-with-screen-and-vim/

======
spudlyo
I didn't care for this video. I thought it was light on content and the
narrator had some pretty annoying mannerisms.

 _"...cuz you know, like back in the day we didn't have fancy X-windows where
we could you-know move around and play on the web and look at porn and shit...
so it was uh...you know, I mean... screen... but screen is still definitely,
you know.. something that is really good to use."_

I do however agree with him that screen and vim are both pretty kickass, I
just think he could have done a better job showing why.

~~~
mcantor
I was surprised at how much the swearing and hesitating grated on me. I'm
usually the first guy who wishes presenters would lighten up and joke around a
little, but for some reason I couldn't stomach more than 3 minutes of this
video. I just kept thinking, "Man... this is really unprofessional." I hope
they don't revoke my sarcastic hippy license...

I'm actually kind of jealous that it's got _26_ upvotes on the frontpage.
That's a lot! I love vim and screen with all my heart; maybe I should make a
video like this, too. I feel like I could do them justice better.

~~~
thesnark
I would watch such a video if you made one.

------
cedsav
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?

~~~
koenigdavidmj
In Vim, FuzzyFinder (<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
And NERDtree. <http://www.vim.org/scripts/script.php?script_id=1658>

~~~
jarin
And PeepOpen if you're on a Mac and using MacVim
<http://peepcode.com/products/peepopen>

------
pyre
I use a screen session w/ multiple windows at work on the server, which I
attach to every morning. Then I have all of the setup that I was working on
the previous day right there in front of me.

Some screen hacks:

* I use grabssh[1] so that I can get ssh-agent forwarding working again when I reattach. ssh into the server, run grabssh, then reattach the screen session. Now all of my shells in the session can source fixssh to update their environment.

* I also use a wrapper for ssh within a screen session:
    
    
      function screen_ssh_wrapper()                                                                                                                                             
      {                                                                                                                                                                         
          if [ -n "$STY" ]; then                                                                                                                                                
              HOST=$(echo "$1" | sed -e 's,[a-zA-Z0-9],,g')                                                                                                                     
              if [ -z "$HOST" ]; then                                                                                                                                           
                  # Note: We need all of these vars b/c we want the ssh command to                                                                                              
                  # inherit them from the current shell, and *not* from screen (for                                                                                             
                  # long-running screen sessions, those values may be out of date)                                                                                              
                  screen -t "$1" \                                                                                                                                              
                      env \                                                                                                                                                     
                          SSH_CLIENT="$SSH_CLIENT" \                                                                                                                            
                          SSH_TTY="$SSH_TTY" \                                                                                                                                  
                          SSH_AUTH_SOCK="$SSH_AUTH_SOCK" \                                                                                                                      
                          SSH_CONNECTION="SSH_CONNECTION" \                                                                                                                     
                          DISPLAY="$DISPLAY" \                                                                                                                                  
                          ssh "$@"                                                                                                                                              
                  return                                                                                                                                                        
              fi                                                                                                                                                                
          fi                                                                                                                                                                    
          ssh "$@"                                                                                                                                                              
      }                                                                                                                                                                         
      alias ssh='screen_ssh_wrapper'
    

[1] <http://samrowe.com/wordpress/ssh-agent-and-gnu-screen/>

~~~
feydr
interesting fix to this problem!

------
seancron
It looks like the server just died. The post is mostly this video:

<http://vimeo.com/14481789>

Cache:
[http://webcache.googleusercontent.com/search?q=cache:http://...](http://webcache.googleusercontent.com/search?q=cache:http://airodig.com/2010/08/27/extreme-
productivity-with-screen-and-vim/)

------
xbryanx
If you want to learn some extremely useful tips for real productivity in Vim,
I'd suggest the detailed videos on <http://vimcasts.org/> over this frenetic
if enthusiastic video.

------
itodd
I've been using tmux instead of screen lately. It's nice to have window
splitting built in. <http://tmux.sourceforge.net/>

~~~
digitallogic
I use emacs for splitting so I don't generally need this feature. Actually
most of my screen sessions only have a single window with emacs in it. I use
screen mainly to attach and detach sessions.

~~~
stevelosh
You might like dtach -- it's a program that just lets you detach/attach
sessions. It's simpler than screen, so if that's all you use screen for you
might like it.

<http://dtach.sourceforge.net/>

------
kevincolyar
If you're a vim user on a mac, try out ViKing. <http://vikingapp.com>

------
actf
To those suggesting Vim/Emacs require less mouse usage than an IDE: I see
little more than anecdotal evidence to support this. I personally use Visual
Studio extensively in combination with the ViEmu pluggin, and I'd like to
think that doing so is both more productive and utilizes the mouse less than a
combination of screen/vim would. After configuring keyboard shortcuts, there
is almost nothing I need to use the mouse for in Visual Studio. I get the
benefits of using Vim plus I get the additional benefits of code completion,
project management facilities, debugging utilities, and much more.

Honestly, I fail to see the advantage to this approach.

------
Xurinos
I didn't watch the video, based on some of the other responses here (I do not
have time for the presentation fluff), but I hope he made mention of
slime.vim. If not, I will toss in a quick plug for it --

Want to quickly send blocks or lines of code to REPLs (and sometimes the
command line) in your other screen windows? slime.vim is a vim extension that
copies text from your vim session and pastes it into the screen window of your
choice.

------
njharman
I use screen sparingly (when it matters (remote long running process that I
need to not die just cause Comcast Cable sucks ass and drops my internet) but
would never use it "all the time" Fucking with Ctrl-A and my scroll back
constantly pisses me off. And the advantages aren't worth learning how to
remap Ctrl-A which I'm told is possible.

~~~
pyre
Most things that are worthwhile have an up-front cost/learning curve. To
dismiss something just because you have to take the time to learn about it
first is a ridiculous concept.

Personally I have the 'escape' mapped to the back-tick (`), and if I need to
send an _actual_ back-tick then I just hit it twice (``). I ripped this setup
off from someone on StackOverflow.

------
fortes
I'm currently into vim/screen, but actually thinking of jumping ship to
emacs/tmux [mostly due to orgmode]. Anyone ever done the same?

From the looks of it, the screen to tmux transition will be the easy part :)

~~~
hesitz
I started in basic Vim and migrated to using the Vimoutliner plugin,
especially for non-code text. Orgmode is a hell of a lot more fully featured
than Vimoutliner, has a much larger user base, and a much more active
development team. I'm able to stomach Emacs by using the Viper and Vimpulse
plugins that emulate a nice subset of Vim keybindings, but it still doesn't
feel as good. If you need the extra features of Orgmode it's well worth it,
though. Still, Vimoutliner probably has Orgmode beat when you consider just
the outliner functionality (but of course Orgmode offers much more than that).

Lately I've been witing LaTeX documents using the Vim Latex-Suite plugin. What
I really should do is configure Orgmode to work with my LaTeX preamble and/or
revise the LatexSuite so its outlining works more like Vimoutliner.

Either way you can't lose.

------
qusiba
The problem of VIM is that, you need to do a lot of configuration yourself.
While this is fan for me, I never recommend it to anyone who has less patience
than I have. Any IDE would be much easier for them.

~~~
mcantor
I found vim's configuration to be pretty natural, in that the bare editor
worked fine for me, but as I became better-versed in its use, I would run into
small things that made me think, "Hmm, I wish I could do this," or "Hmm, I
wish this feature worked that way." Engraving each small thing into my .vimrc
was a lesson in of itself that helped me learn more about vim each time; I
rarely felt overwhelmed or like I had to figure everything out at once.

------
hubb
what's with the "big booty bitches" in the background? haha

~~~
feydr
eh... yeh. that accidently slipped by -- just random testing of the webapp I
was working on.. ;)

~~~
mcantor
Sounds like a badass webapp, dude! ;-P

------
markjuh
hmm, :u to undo... who would do that?

------
clyfe
what is "Screen"?, link please!

EDIT, ty hubb

~~~
junkbit
The main selling point of screen is not actually the way he uses it in the
video, to manage multiple windows, but the way you can disconnect and
reconnect to any screen session from any computer using the screen daemon and
ssh.

For example start a bittorrent download running in screen at home and then
monitor it from work, reload X without loosing your work, or the canonical
example: idle in irc all day without being disconnected.

~~~
feydr
yeh this is useful detach/re-attach, however, I usually have a screen session
opened locally so when I'm doing remote work I typically open several ssh
connections since they are cheap -- anything I want to put into the background
I do so the typical way and not through screen -- good point though

------
eegilbert
I love it when old becomes new again.

------
korch
Vim + Screen has been my "IDE" of choice for 5+ years. At this point I
probably could not hack on code using any other toolset—it's so ingrained. And
compiling Vim with Ruby bindings has also allowed me to whip up some very
useful scripts to performs routine tasks like you'd see in Eclipse.

Vim ftw!

~~~
Dornkirk
I actually don't really understand using this as an "IDE" - part of the reason
I don't think I'd be able to leave Eclipse is because it's "fully loaded" so
to speak - such as navigating my project's directory/structure, debugging,
etc, and I don't think I could live without auto-complete (maybe I'm lazy, but
I didn't see it in this video and I don't see how it'd be possible in a Vim
environment?), not just auto-complete for the time saving but also for the
inspection - I (unfortunately) work with a convoluted piece of technology
where every instance of a class seems to inherit a gazillion properties &
methods and I sometimes don't know what I'm looking for unless I can scroll
down the list that auto-complete gives me.

~~~
dan00
".. and I don't think I could live without auto-complete (maybe I'm lazy, but
I didn't see it in this video and I don't see how it'd be possible in a Vim
environment?) .."

In insert mode the keys CTRL-P, CTRL-N complete the previous/next matching
word. Instead of these keys you can use the supertab plugin, to complete a
word by hiting tab in insert mode.

You can choose where vim searches for matching words with the variable
'complete'.

There's also the omnicompletion, which does language specific completes, like
method names of an object, by using ctags.

Search for 'omnicomplete <language>' to find the language specific plugin.

