<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6637736252081011583</id><updated>2012-01-26T08:32:23.375-08:00</updated><category term='flash'/><category term='maatkit'/><category term='control'/><category term='literal'/><category term='autocompletion'/><category term='cookbook'/><category term='registers'/><category term='truncate'/><category term='mmm'/><category term='daily'/><category term='awk'/><category term='mouse'/><category term='quick'/><category term='drag'/><category term='multimaster'/><category term='unicode'/><category term='the'/><category term='compatible'/><category term='line'/><category term='next'/><category term='substitution'/><category term='sort'/><category term='patch'/><category term='x.org'/><category term='names'/><category term='uncomment'/><category term='tao'/><category term='rightleft'/><category term='commits'/><category term='paste'/><category term='recent'/><category term='procedure'/><category term='s-exp'/><category term='formatting'/><category term='stripping'/><category term='apt'/><category term='more'/><category term='normal'/><category term='vimperator'/><category term='substring'/><category term='brace'/><category term='large'/><category term='posts'/><category term='mp3'/><category term='fix'/><category term='ubuntu'/><category term='disable'/><category term='toothpick'/><category term='syndrome'/><category term='svn'/><category term='google'/><category term='ruby'/><category term='blackhole'/><category term='best'/><category term='add'/><category term='fuser'/><category term='blank'/><category term='os x'/><category term='ctime'/><category term='meter'/><category term='twisten.fm'/><category term='recover'/><category term='ctrl-m'/><category term='rows'/><category term='blocking'/><category term='agents'/><category term='buffer'/><category term='easier'/><category term='mccain'/><category term='plugin'/><category term='start'/><category term='uppercase'/><category term='slave'/><category term='dailyvim'/><category term='alias'/><category term='driver'/><category term='hack'/><category term='tricks'/><category term='last'/><category term='check'/><category term='levels'/><category term='howto'/><category term='reduce'/><category term='files'/><category term='implementation'/><category term='ssh'/><category term='size'/><category term='autocomplete'/><category term='substition'/><category term='question'/><category term='tar'/><category term='transfer'/><category term='untar'/><category term='same'/><category term='words'/><category term='trick'/><category term='ownership'/><category term='xubuntu'/><category term='subdir'/><category term='management'/><category term='replication'/><category term='grail'/><category term='master'/><category term='horizontally'/><category term='block'/><category term='clear'/><category term='display'/><category term='apt-file'/><category term='clojure'/><category term='characters'/><category term='finding'/><category term='good'/><category term='mk-table-checksum'/><category term='disk'/><category term='survival'/><category term='stdin'/><category term='flag'/><category term='shift'/><category term='attributes'/><category term='clicking'/><category term='vim'/><category term='digraph'/><category term='modeline'/><category term='reverse'/><category term='hashing'/><category term='backup'/><category term='broken'/><category term='centos'/><category term='rebuild'/><category term='scala'/><category term='select'/><category term='ctrl-o'/><category term='ignore'/><category term='mysql'/><category term='toggle'/><category term='os'/><category term='reload vimrc'/><category term='i&apos;ve'/><category term='scope'/><category term='quickly'/><category term='language'/><category term='textmate'/><category term='offtopic'/><category term='on-the-fly'/><category term='rule recursion'/><category term='filter'/><category term='below'/><category term='pushd'/><category term='autoplay'/><category term='leaning'/><category term='global'/><category term='speech'/><category term='editing'/><category term='regular expressions'/><category term='close window'/><category term='agent'/><category term='remove'/><category term='motion'/><category term='alternate'/><category term='previous'/><category term='unhighlight'/><category term='connection'/><category term='change'/><category term='map'/><category term='directory'/><category term='gnu'/><category term='gzip'/><category term='swapcase'/><category term='repeat'/><category term='help'/><category term='deleted'/><category term='console'/><category term='each'/><category term='mark'/><category term='duplicate'/><category term='register'/><category term='esc'/><category term='percentage'/><category term='changed'/><category term='analysis'/><category term='keyword'/><category term='script'/><category term='atime'/><category term='range'/><category term='windows'/><category term='eclim'/><category term='open'/><category term='chmod'/><category term='postscript'/><category term='count'/><category term='file'/><category term='vimclojure'/><category term='man'/><category term='crash'/><category term='grooveshark'/><category term='sharing'/><category term='key'/><category term='tabs'/><category term='php'/><category term='redraw'/><category term='execute'/><category term='under'/><category term='effective'/><category term='remap'/><category term='source'/><category term='jump'/><category term='mkfifo'/><category term='tags'/><category term='quickfix'/><category term='manpage'/><category term='blogger'/><category term='shared'/><category term='history'/><category term='search'/><category term='features'/><category term='pattern'/><category term='scrollbind'/><category term='colorscheme'/><category term='resize'/><category term='populate'/><category term='package'/><category term='pager'/><category term='self'/><category term='instance method'/><category term='schebang'/><category term='s3virge'/><category term='sessions'/><category term='end'/><category term='restore'/><category term='audio'/><category term='set'/><category term='popd'/><category term='copy'/><category term='tac'/><category term='rails'/><category term='bootlogd'/><category term='video'/><category term='backtick'/><category term='above'/><category term='5.2'/><category term='special'/><category term='tab'/><category term='table'/><category term='authentication'/><category term='earlier'/><category term='dbd'/><category term='where'/><category term='putty'/><category term='Perl'/><category term='diff'/><category term='unsplit'/><category term='pdf'/><category term='obama'/><category term='subtract'/><category term='echo'/><category term='tidy'/><category term='reformat'/><category term='text'/><category term='practices'/><category term='grab'/><category term='external'/><category term='character'/><category term='project'/><category term='tree'/><category term='beginning'/><category term='holy'/><category term='comment'/><category term='support'/><category term='temp'/><category term='lines'/><category term='states'/><category term='manipulation'/><category term='efficiency'/><category term='song'/><category term='xargs'/><category term='explorer'/><category term='shameless'/><category term='detect'/><category term='paragraph'/><category term='command'/><category term='schemes'/><category term='filesystems'/><category term='apocalypse'/><category term='shell'/><category term='filetype'/><category term='expanding'/><category term='lite'/><category term='mapleader'/><category term='promotion'/><category term='share'/><category term='append'/><category term='screen'/><category term='basic'/><category term='golf'/><category term='number'/><category term='highlight'/><category term='awesome'/><category term='remote'/><category term='version'/><category term='scrolling'/><category term='replace'/><category term='kernel'/><category term='swap'/><category term='zsh'/><category term='browsing'/><category term='clipboard'/><category term='alternatives'/><category term='hardcopy'/><category term='recursively'/><category term='completion'/><category term='install'/><category term='suggestions'/><category term='visual'/><category term='vimgrep'/><category term='ex'/><category term='erlang'/><category term='keys'/><category term='snippit'/><category term='inside'/><category term='non-printable'/><category term='yank'/><category term='later'/><category term='de-dupe'/><category term='word'/><category term='column'/><category term='syntax'/><category term='autowrite'/><category term='insert'/><category term='binary'/><category term='home'/><category term='firefox'/><category term='test'/><category term='location'/><category term='yum'/><category term='cursor'/><category term='favorite'/><category term='window'/><category term='tips'/><category term='grep'/><category term='haskell'/><category term='maxclients'/><category term='spaces'/><category term='forwarding'/><category term='macro'/><category term='piping'/><category term='scp'/><category term='eclipse'/><category term='buffers'/><category term='ext3'/><category term='interactive'/><category term='of'/><category term='undo'/><category term='alternating'/><category term='preserve'/><category term='usage'/><category term='bash'/><category term='goto'/><category term='oracle'/><category term='split'/><category term='editor'/><category term='hidden'/><category term='filesystem'/><category term='directories'/><category term='color'/><category term='reference'/><category term='numpad'/><category term='nautilus'/><category term='sandbox'/><category term='week'/><category term='enable'/><category term='proxy'/><category term='golden'/><category term='equal'/><category term='auto'/><category term='fuse'/><category term='cache'/><category term='indent'/><category term='fedora'/><category term='all'/><category term='manager'/><category term='been'/><category term='dot'/><category term='match'/><category term='dbi'/><category term='gnome'/><category term='modified'/><category term='find'/><category term='commands'/><category term='lowercase'/><category term='comparison'/><category term='whatprovides'/><category term='functional'/><category term='debian'/><category term='port'/><category term='spell'/><category term='apache'/><category term='linux'/><category term='emacs'/><category term='beep'/><category term='cygwin'/><category term='level'/><category term='convert'/><category term='programming'/><category term='objects'/><category term='lisp'/><category term='single'/><category term='star'/><category term='blog'/><category term='ascii'/><category term='config'/><category term='position'/><category term='ruler'/><category term='options'/><category term='expansion'/><category term='items'/><category term='mode'/><category term='hello world'/><category term='terminal'/><category term='mtime'/><category term='suffixing'/><category term='exit'/><category term='less'/><category term='progress'/><category term='reader'/><category term='middle'/><title type='text'>Daily Vim: Text Editor Tips, Tricks, Tutorials, and HOWTOs</title><subtitle type='html'>A blog dedicated to text editing and general exploration of computing knowledge</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default?start-index=101&amp;max-results=100'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>238</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1373961397339163409</id><published>2009-12-09T05:58:00.000-08:00</published><updated>2009-12-09T11:31:20.000-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='vimgrep'/><category scheme='http://www.blogger.com/atom/ns#' term='grep'/><title type='text'>Vimgrep Tips</title><content type='html'>I've mentioned vimgrep &lt;a href="http://dailyvim.blogspot.com/2007/12/quickfix.html"&gt;in a previous post&lt;/a&gt;, but I neglected to mention a few useful flags that can be used in conjunction with it.&lt;br /&gt;&lt;br /&gt;If you apply the 'g' flag to your vimgrep, it will return all matches instead of just one match per line.&lt;br /&gt;&lt;br /&gt;:vimgrep /foo/g **/*&lt;br /&gt;&lt;br /&gt;If you apply the 'j' flag, Vim will not automatically jump to the first match.&lt;br /&gt;&lt;br /&gt;:vimgrep /foo/j **/*&lt;br /&gt;&lt;br /&gt;Thanks to Chanel for pointing these out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1373961397339163409?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1373961397339163409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1373961397339163409' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1373961397339163409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1373961397339163409'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/12/vimgrep-tips.html' title='Vimgrep Tips'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-2874525894243602169</id><published>2009-12-03T06:38:00.000-08:00</published><updated>2009-12-03T06:42:24.532-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='text'/><category scheme='http://www.blogger.com/atom/ns#' term='states'/><title type='text'>More on Text States</title><content type='html'>A few people have asked me for more information on text states. An anonymous reader contributed the following in the comments of my previous post on the topic.&lt;br /&gt;&lt;br /&gt;Using g+ and g- is very different than using u and ^r.&lt;br /&gt;&lt;br /&gt;Try following:&lt;br /&gt;* Create new file&lt;br /&gt;* (in normal mode) Type iOne - Esc&lt;br /&gt;* Type oTwo - Esc&lt;br /&gt;* Type oThree - Esc&lt;br /&gt;* Type oFour - Esc&lt;br /&gt;* Type oFive - Esc&lt;br /&gt;* Type 2u&lt;br /&gt;* Type oSix - Esc&lt;br /&gt;* Type oSeven - Esc&lt;br /&gt;&lt;br /&gt;Now you have an undo tree with 2 branches. Typing u only goes up the last branch. Using g- goes up by time - branch doesn't matter here.&lt;br /&gt;&lt;br /&gt;Have a look in :help usr_32.txt for good explanation of using the undo tree.&lt;br /&gt;&lt;br /&gt;Thanks to whomever contributed the tip!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-2874525894243602169?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/2874525894243602169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=2874525894243602169' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2874525894243602169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2874525894243602169'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/12/more-on-text-states.html' title='More on Text States'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7244034162717361375</id><published>2009-12-02T05:12:00.000-08:00</published><updated>2009-12-02T05:12:00.167-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='normal'/><category scheme='http://www.blogger.com/atom/ns#' term='mode'/><category scheme='http://www.blogger.com/atom/ns#' term='indent'/><title type='text'>Indent From Normal Mode</title><content type='html'>From normal mode, pressing == will indent the current line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7244034162717361375?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7244034162717361375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7244034162717361375' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7244034162717361375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7244034162717361375'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/12/indent-from-normal-mode.html' title='Indent From Normal Mode'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7904428777806018328</id><published>2009-12-01T06:55:00.000-08:00</published><updated>2009-12-01T06:57:04.822-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='number'/><category scheme='http://www.blogger.com/atom/ns#' term='line'/><title type='text'>Starting on a Specific Line</title><content type='html'>An anonymous reader writes:&lt;br /&gt;&lt;br /&gt;You can open a file on the command line and automatically put the cursor on the last line by typing:&lt;br /&gt;&lt;br /&gt;vim + file&lt;br /&gt;&lt;br /&gt;If you want vim to start at a specific line you can do the following instead:&lt;br /&gt;&lt;br /&gt;vim +LINENUMBER file&lt;br /&gt;&lt;br /&gt;Thanks for the tip!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7904428777806018328?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7904428777806018328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7904428777806018328' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7904428777806018328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7904428777806018328'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/12/starting-on-specific-line.html' title='Starting on a Specific Line'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4808137762045998423</id><published>2009-11-30T06:21:00.000-08:00</published><updated>2009-11-30T06:23:23.842-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='text'/><category scheme='http://www.blogger.com/atom/ns#' term='states'/><title type='text'>Text States</title><content type='html'>If you're using Vim 7+, you can use g- and g+ to go between text states. For a more advanced usage see the :help earlier and :help later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4808137762045998423?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4808137762045998423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4808137762045998423' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4808137762045998423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4808137762045998423'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/text-states.html' title='Text States'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-575989271490281803</id><published>2009-11-24T06:11:00.000-08:00</published><updated>2009-11-24T17:12:52.400-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='buffer'/><category scheme='http://www.blogger.com/atom/ns#' term='jump'/><title type='text'>Jumping to a Buffer</title><content type='html'>If you have split windows open with multiple buffers, you can jump directly to a specific buffer number by doing the following:&lt;br /&gt;&lt;br /&gt;N&amp;lt;C-w&amp;gt;&amp;lt;C-w&amp;gt;&lt;br /&gt;&lt;br /&gt;N is the window number you want to move the cursor to.&lt;br /&gt;&lt;br /&gt;Thanks to Duff for the coffee!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-575989271490281803?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/575989271490281803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=575989271490281803' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/575989271490281803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/575989271490281803'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/jumping-to-buffer.html' title='Jumping to a Buffer'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4394650710624501027</id><published>2009-11-23T06:52:00.000-08:00</published><updated>2009-11-23T06:55:57.293-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='level'/><category scheme='http://www.blogger.com/atom/ns#' term='indent'/><title type='text'>Indent From Insert</title><content type='html'>In the comments of my last post, graywh left a great tip that I didn't know about. If you're working in insert mode, you can change the indent level of the current line using &amp;lt;C-t&amp;gt; and &amp;lt;C-d&amp;gt;. These commands work no matter where your cursor is positioned on the current line and adjust the indent level based on your shiftwidth setting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4394650710624501027?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4394650710624501027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4394650710624501027' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4394650710624501027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4394650710624501027'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/indent-from-insert.html' title='Indent From Insert'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1824155623932735546</id><published>2009-11-19T06:04:00.000-08:00</published><updated>2009-11-19T08:44:50.672-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='tab'/><category scheme='http://www.blogger.com/atom/ns#' term='shift'/><title type='text'>Shift-Tab'ing</title><content type='html'>I have the following in my vimrc:&lt;br /&gt;&lt;br /&gt;set sts=4&lt;br /&gt;set et&lt;br /&gt;&lt;br /&gt;This allows me to take advantage of the convenience of the tab key when editing while actually inserting spaces into the current buffer. Intuitively I've always wished I could shift-tab to unindent the current line one tab stop. After a minute of fiddling with my vimrc, I found a solution.&lt;br /&gt;&lt;br /&gt;imap &amp;lt;S-Tab&amp;gt; &amp;lt;C-o&amp;gt;&amp;lt;&amp;lt;&lt;br /&gt;&lt;br /&gt;I should also mention that &amp;lt;&amp;lt; and &amp;gt;&amp;gt; shifts the provided text based on your shiftwidth setting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1824155623932735546?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1824155623932735546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1824155623932735546' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1824155623932735546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1824155623932735546'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/shift-tabing.html' title='Shift-Tab&apos;ing'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-2880992475679078843</id><published>2009-11-17T07:34:00.000-08:00</published><updated>2009-11-17T07:34:00.627-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='tao'/><title type='text'>The Tao of Programming</title><content type='html'>I stumbled onto this quip recently and found it particularly poignant.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-2880992475679078843?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/2880992475679078843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=2880992475679078843' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2880992475679078843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2880992475679078843'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/tao-of-programming.html' title='The Tao of Programming'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7398660447065960013</id><published>2009-11-16T06:00:00.000-08:00</published><updated>2009-11-16T06:00:00.183-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='insert'/><category scheme='http://www.blogger.com/atom/ns#' term='last'/><title type='text'>Last Insert</title><content type='html'>Hitting gi in normal mode will take you to the last location where you were in insert mode. This is great for bouncing back to where you were editing after browsing the current buffer from normal mode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7398660447065960013?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7398660447065960013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7398660447065960013' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7398660447065960013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7398660447065960013'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/last-insert.html' title='Last Insert'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-9068998070031385053</id><published>2009-11-13T06:57:00.000-08:00</published><updated>2009-11-13T06:57:00.433-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='directory'/><category scheme='http://www.blogger.com/atom/ns#' term='last'/><title type='text'>Last Directory Visited</title><content type='html'>From the shell, typing "cd -" will take you to the last directory visited. This is useful from a command-line navigation perspective and from inside of shell scripts as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-9068998070031385053?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/9068998070031385053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=9068998070031385053' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/9068998070031385053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/9068998070031385053'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/last-directory-visited.html' title='Last Directory Visited'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6816693649752990663</id><published>2009-11-12T06:53:00.000-08:00</published><updated>2009-11-12T08:05:17.828-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='command'/><category scheme='http://www.blogger.com/atom/ns#' term='last'/><title type='text'>Last Command</title><content type='html'>Hitting "fc" from a Bash shell invokes your default editor (hopefully Vim) on your last shell command and executes it after Vim exits. This is great for command-line history editing after the fact.&lt;br /&gt;&lt;br /&gt;-e ENAME selects which editor to use. Default is FCEDIT, then EDITOR, then vi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6816693649752990663?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6816693649752990663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6816693649752990663' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6816693649752990663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6816693649752990663'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/last-command.html' title='Last Command'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7074998997200694918</id><published>2009-11-11T06:48:00.000-08:00</published><updated>2009-11-11T06:48:00.350-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scrolling'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='window'/><title type='text'>Window Scrolling</title><content type='html'>Hit ctrl-e to scroll the current window down. Hit ctrl-y to scroll the current window up. An advantage of using these commands is that the cursor stays in the current location. Try it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7074998997200694918?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7074998997200694918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7074998997200694918' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7074998997200694918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7074998997200694918'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/window-scrolling.html' title='Window Scrolling'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4847460848871312946</id><published>2009-11-11T06:12:00.000-08:00</published><updated>2009-11-11T06:12:00.176-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tags'/><category scheme='http://www.blogger.com/atom/ns#' term='reader'/><category scheme='http://www.blogger.com/atom/ns#' term='question'/><title type='text'>Reader Question: Tags?</title><content type='html'>Daniel Näslund writes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"I use tags a lot. But I'm annoyed by all those open files it leaves&lt;br /&gt;behind. It would be great if the file opened with g] or Ctrl-] would be&lt;br /&gt;closed with Ctrl-T. If the file had been previously opened it would&lt;br /&gt;remain open.&lt;br /&gt;&lt;br /&gt;Another thing is a way to close all files except those currently viewed."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I don't use tags too often, so perhaps another reader can answer that question, but if you want to make all buffers except for the current buffer hidden, you can type in the :on ex-command. If you want to hide modified buffers as well, you can do :on!.&lt;br /&gt;&lt;br /&gt;If the desired behavior is to actually delete the buffer, and you know it's buffer # or filename, you can do the following:&lt;br /&gt;&lt;br /&gt;:bdelete file1 file2 file3&lt;br /&gt;&lt;br /&gt;or something like&lt;br /&gt;&lt;br /&gt;:1,3bdelete&lt;br /&gt;&lt;br /&gt;Lastly, if you want to use a script to accomplish this, there's the BufOnly.vim which provides a single command to unload all buffers except the current one.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.vim.org/scripts/script.php?script_id=1071"&gt;http://www.vim.org/scripts/script.php?script_id=1071&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4847460848871312946?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4847460848871312946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4847460848871312946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4847460848871312946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4847460848871312946'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/reader-question-tags.html' title='Reader Question: Tags?'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-3188577281065711739</id><published>2009-11-11T06:09:00.000-08:00</published><updated>2009-11-11T06:09:00.506-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mmm'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='mode'/><title type='text'>Reader Question: MMM Mode?</title><content type='html'>Chris Keating writes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"Could you ask your readership if there's a vim equivalent for emacs MMM mode:&lt;br /&gt;http://mmm-mode.sourceforge.net/&lt;br /&gt;&lt;br /&gt;mmm mode basically allows you to have different syntax highlighting for different parts of your document. This is really handy when you have SQL embedded in strings, etc."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Anybody have any ideas?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-3188577281065711739?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/3188577281065711739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=3188577281065711739' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3188577281065711739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3188577281065711739'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/reader-question-mmm-mode.html' title='Reader Question: MMM Mode?'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1480506085328614506</id><published>2009-11-10T06:45:00.000-08:00</published><updated>2009-11-10T06:45:00.880-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='options'/><title type='text'>Setting Options</title><content type='html'>Typing :options will allow you to set options interactively from inside of Vim. Just choose a command set to edit, and edit from there. This is a nice way to discover new settings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1480506085328614506?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1480506085328614506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1480506085328614506' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1480506085328614506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1480506085328614506'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/setting-options.html' title='Setting Options'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-8971416812546206248</id><published>2009-11-09T06:42:00.000-08:00</published><updated>2009-11-09T06:42:00.831-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='undo'/><category scheme='http://www.blogger.com/atom/ns#' term='levels'/><title type='text'>Undo Levels</title><content type='html'>You can set the number of desired undo levels by issuing a :set undolevels=N ex command.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-8971416812546206248?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/8971416812546206248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=8971416812546206248' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8971416812546206248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8971416812546206248'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/undo-levels.html' title='Undo Levels'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-8918105390029515087</id><published>2009-11-06T06:50:00.000-08:00</published><updated>2009-11-06T06:50:00.232-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='autowrite'/><title type='text'>Autowrite</title><content type='html'>If you're tired of Vim asking you if you want to save the current buffer, you can :set autowrite to avoid this. Be careful if you enable this settings as it relies on your own prudence to prevent accidents from happening.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-8918105390029515087?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/8918105390029515087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=8918105390029515087' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8918105390029515087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8918105390029515087'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/autowrite.html' title='Autowrite'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-2932647420627145815</id><published>2009-11-05T06:35:00.000-08:00</published><updated>2009-11-05T06:35:00.108-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='previous'/><category scheme='http://www.blogger.com/atom/ns#' term='character'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='next'/><title type='text'>Next and Previous Characters</title><content type='html'>Hitting "^" will take you to the first non-blank character on the current line. Hitting the Enter key will take you to the first non-blank character on the next line. Hitting "-" will take you to the first non-blank character on the previous line. All these should be executed from normal mode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-2932647420627145815?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/2932647420627145815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=2932647420627145815' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2932647420627145815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2932647420627145815'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/next-and-previous-characters.html' title='Next and Previous Characters'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1671382047497485754</id><published>2009-11-04T06:32:00.000-08:00</published><updated>2009-11-04T06:32:00.546-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='end'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='buffers'/><category scheme='http://www.blogger.com/atom/ns#' term='beginning'/><title type='text'>Beginning and End of a Buffer</title><content type='html'>Hitting "gg" in normal mode will take you to the first line of the current buffer. Hitting "G" will take you to the end of the current buffer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1671382047497485754?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1671382047497485754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1671382047497485754' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1671382047497485754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1671382047497485754'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/beginning-and-end-of-buffer.html' title='Beginning and End of a Buffer'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6697983300726798562</id><published>2009-11-03T06:30:00.000-08:00</published><updated>2009-11-03T06:30:00.124-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='ruler'/><title type='text'>Grab A Ruler</title><content type='html'>If you :set ruler in your vimrc, you'll retain a constant ruler at the bottom of your editing window. It contains the same statistics as provided by ctrl-g and allows valuable information to be gleaned with a quick glance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6697983300726798562?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6697983300726798562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6697983300726798562' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6697983300726798562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6697983300726798562'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/grab-ruler.html' title='Grab A Ruler'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1867648045888696512</id><published>2009-11-02T06:27:00.000-08:00</published><updated>2009-11-02T07:05:36.556-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='file'/><category scheme='http://www.blogger.com/atom/ns#' term='percentage'/><category scheme='http://www.blogger.com/atom/ns#' term='position'/><title type='text'>Knowing Where You Are</title><content type='html'>If you want to know the current filename, what percentage of the current file you're editing, whether the current file has been modified, or the character or line position, all you have to do is hit ctrl-g from normal mode inside Vim.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1867648045888696512?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1867648045888696512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1867648045888696512' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1867648045888696512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1867648045888696512'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/11/knowing-where-you-are.html' title='Knowing Where You Are'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1088908242250454852</id><published>2009-10-30T22:02:00.001-07:00</published><updated>2009-10-30T22:04:46.730-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='posts'/><category scheme='http://www.blogger.com/atom/ns#' term='daily'/><title type='text'>More Posts Coming</title><content type='html'>I know Daily Vim hasn't exactly been "daily". I've got a bunch of posts prepared for the next few weeks. If the response continues to be good, I'm going to try and increase the post frequency on this blog. I appreciate the feedback and contributions you guys and gals have offered so far. If anyone wants to contact me directly with suggestions for posts, please send an email to tinymountain at gmail dot com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1088908242250454852?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1088908242250454852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1088908242250454852' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1088908242250454852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1088908242250454852'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/10/more-posts-coming.html' title='More Posts Coming'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-582059906518343212</id><published>2009-10-30T21:40:00.000-07:00</published><updated>2009-10-31T06:44:43.965-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='substition'/><category scheme='http://www.blogger.com/atom/ns#' term='repeat'/><title type='text'>Repeat Last Substitution</title><content type='html'>If you want to repeat your last substitution on the current line hit the "&amp;" character from normal mode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-582059906518343212?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/582059906518343212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=582059906518343212' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/582059906518343212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/582059906518343212'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/10/repeat-last-substitution.html' title='Repeat Last Substitution'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-5971796221023179663</id><published>2009-10-30T21:25:00.001-07:00</published><updated>2009-10-31T06:47:14.122-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quick'/><category scheme='http://www.blogger.com/atom/ns#' term='exit'/><category scheme='http://www.blogger.com/atom/ns#' term='reload vimrc'/><title type='text'>Quick Exits</title><content type='html'>Hitting ZZ in normal mode will exit and save the current file. Hitting ZQ will exit without saving.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-5971796221023179663?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/5971796221023179663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=5971796221023179663' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/5971796221023179663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/5971796221023179663'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/10/quick-exits.html' title='Quick Exits'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4545496138700508804</id><published>2009-10-30T08:41:00.000-07:00</published><updated>2009-10-30T09:26:53.200-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Handy Shell Pattern</title><content type='html'>When piping commands, you can often benefit from breaking your data into multiple lines. A combination of sed and xargs can make this very easy to do. Take the following commands for example:&lt;br /&gt;&lt;br /&gt;cd /tmp &amp;&amp; mkdir blah &amp;&amp; cd blah;&lt;br /&gt;touch file-1 file-2 file-3;&lt;br /&gt;ls | sed 'p; s/-//' | xargs -n2&lt;br /&gt;&lt;br /&gt;Breaking this down, we create a directory and touch three empty files. From there, we use sed to print two lines. The first line is the original file name, the second line is the filename without the dash. From here, we can use the -n argument in conjunction with xargs to merge the two lines back into a single line. The resulting output would be:&lt;br /&gt;&lt;br /&gt;file-1 file1&lt;br /&gt;file-2 file2&lt;br /&gt;file-3 file3&lt;br /&gt;&lt;br /&gt;Once you have the lines joined, you could do something like:&lt;br /&gt;&lt;br /&gt;... | while read a b; do mv $a $b; done&lt;br /&gt;&lt;br /&gt;Bonus tip: the "read" bash builtin takes a line and associates each word with a given variable. Type "help read" from the shell for the complete documentation.&lt;br /&gt;&lt;br /&gt;In summary the full command-chain for this tip would be:&lt;br /&gt;&lt;br /&gt;cd /tmp &amp;&amp; mkdir blah &amp;&amp; cd blah;&lt;br /&gt;touch file-1 file-2 file-3;&lt;br /&gt;ls | sed 'p; s/-//' | xargs -n2 | while read a b; do mv $a $b; done&lt;br /&gt;&lt;br /&gt;Thanks to Chris Sutter for contributing this handy shell pattern, and thanks to Andeers for the coffee!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4545496138700508804?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4545496138700508804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4545496138700508804' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4545496138700508804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4545496138700508804'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/10/handy-shell-pattern.html' title='Handy Shell Pattern'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-3536216893445795022</id><published>2009-10-23T05:57:00.000-07:00</published><updated>2009-10-23T06:26:33.200-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='unicode'/><title type='text'>Fun With Unicode ٩(●̮̮̃•̃)۶</title><content type='html'>Following up on the last post, you can also use CTRL-V to enter unicode characters. All you have to do is the following:&lt;br /&gt;&lt;br /&gt;CTRL-V u (unicode character hex code)&lt;br /&gt;&lt;br /&gt;Note that you can also combine multi-byte characters as demonstrated in the title of this post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-3536216893445795022?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/3536216893445795022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=3536216893445795022' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3536216893445795022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3536216893445795022'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/10/fun-with-unicode.html' title='Fun With Unicode ٩(●̮̮̃•̃)۶'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-653325047787349805</id><published>2009-10-21T07:35:00.000-07:00</published><updated>2009-10-23T05:56:25.877-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='digraph'/><category scheme='http://www.blogger.com/atom/ns#' term='characters'/><category scheme='http://www.blogger.com/atom/ns#' term='binary'/><category scheme='http://www.blogger.com/atom/ns#' term='literal'/><title type='text'>CTRL-V for Literal Characters</title><content type='html'>When typing in insert or ex mode, hiting CTRL-V allows you to enter a literal character. Some examples:&lt;br /&gt;&lt;br /&gt;CTRL-V CTRL-M # enters a literal carriage-return \r&lt;br /&gt;CTRL-V 10 &amp;lt;enter&amp;gt; # enters a null character&lt;br /&gt;&lt;br /&gt;After entering the CTRL-V, you can either enter the character explicitly or type in its decimal code. A list of decimal codes is available through the :digraph ex command. If you're curious why this might be useful, I've used it on a number of occasions in conjunction with a substitution to remove binary characters from a file. An example might be:&lt;br /&gt;&lt;br /&gt;:%s/CTRL-V CTRL-M//g # remove erroneous CTRL-M from the current file&lt;br /&gt;&lt;br /&gt;You can find out the code for any character by putting it under the cursor and hitting "ga" in normal mode. For entering digraphs, you can also hit CTRL-K from insert mode and type the two letter character code preceeding the desired character.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-653325047787349805?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/653325047787349805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=653325047787349805' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/653325047787349805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/653325047787349805'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/10/ctrl-v-for-literal-characters.html' title='CTRL-V for Literal Characters'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6338538998047131502</id><published>2009-09-18T08:08:00.001-07:00</published><updated>2009-09-18T08:16:34.698-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='screen'/><category scheme='http://www.blogger.com/atom/ns#' term='resize'/><title type='text'>Resizing with GNU Screen</title><content type='html'>I know a lot of you use screen frequently. My friend Chris gave me a tip recently related to resizing split windows in a screen session.&lt;br /&gt;&lt;br /&gt;In screen, you can do &amp;lt;C-a&amp;gt;:resize [+-]N&amp;lt;CR&amp;gt; to resize a window +/- N lines&lt;br /&gt;&lt;br /&gt;This is handy if you've got a cmd running and want to see when it's done. You can split the screen, load it in one window, and resize it to be small; thereby, preventing it from occupying valuable real estate on your monitor.&lt;br /&gt;&lt;br /&gt;Screen has a handful of : commands such as :number N to change the numeric position of the current window. Take a look at the DEFAULT KEY BINDINGS section of man(1) screen for the the full list (parenthesized next to each key binding).&lt;br /&gt;&lt;br /&gt;For more screen tips, check out the &lt;a href="http://dailyvim.blogspot.com/2008/03/screen-tips.html"&gt;screen extravaganza&lt;/a&gt; posted back in 2008.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6338538998047131502?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6338538998047131502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6338538998047131502' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6338538998047131502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6338538998047131502'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/09/resizing-with-gnu-screen.html' title='Resizing with GNU Screen'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-9036519774718013380</id><published>2009-09-18T08:00:00.001-07:00</published><updated>2009-09-18T08:07:39.568-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scrolling'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='mouse'/><title type='text'>Mouse Tips</title><content type='html'>This has been mentioned on the blog &lt;a href="http://dailyvim.blogspot.com/2008/08/window-manipulation.html"&gt;in the past&lt;/a&gt;, but readers email me about it often enough that it deserves a formal tip. You can use the mouse to resize windows in Vim if you set your mouse as follows.&lt;br /&gt;&lt;br /&gt;:set mouse=a&lt;br /&gt;&lt;br /&gt;This will even work over a remote ssh session if you also set your term appropriately.&lt;br /&gt;&lt;br /&gt;:set term=[the appropriate setting]&lt;br /&gt;&lt;br /&gt;Options for term settings are as follows:&lt;br /&gt;&lt;br /&gt;in the GUI: "builtin_gui"&lt;br /&gt;on Amiga: "amiga"&lt;br /&gt;on BeOS: "beos-ansi"&lt;br /&gt;on Mac: "mac-ansi"&lt;br /&gt;on MiNT: "vt52"&lt;br /&gt;on MS-DOS: "pcterm"&lt;br /&gt;on OS/2: "os2ansi"&lt;br /&gt;on Unix: "ansi"&lt;br /&gt;on VMS: "ansi"&lt;br /&gt;on Win 32: "win32"&lt;br /&gt;&lt;br /&gt;If the mouse setting interferes with your operating system's copy and paste ability such as the select to copy feature under X windows, you can revert to the standard behavior by holding shift while selecting text.&lt;br /&gt;&lt;br /&gt;Setting your mouse as described also prevents accidental terminal scrolling with the mouse wheel when editing a file remotely and causes Vim to scroll within the current buffer instead.&lt;br /&gt;&lt;br /&gt;Thanks to mmmattos for emailing me and providing the motivation for this tip.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-9036519774718013380?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/9036519774718013380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=9036519774718013380' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/9036519774718013380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/9036519774718013380'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/09/mouse-tips.html' title='Mouse Tips'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4460496613377339678</id><published>2009-09-14T07:39:00.000-07:00</published><updated>2009-09-14T07:42:41.583-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='diff'/><title type='text'>Diffing From Inside Vim</title><content type='html'>To compare two files without resorting to launching vidiff from the command-line, you can do the following.&lt;br /&gt;&lt;br /&gt;1) open one of the two files in a standard buffer&lt;br /&gt;2) type in :vert diffsplit filename&lt;br /&gt;&lt;br /&gt;Put the name of the file you'll be comparing in place of filename. Prefixing the command with vert gives you a vertical split. If you'd prefer a horizontal split, simply omit the vert.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4460496613377339678?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4460496613377339678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4460496613377339678' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4460496613377339678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4460496613377339678'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/09/diffing-from-inside-vim.html' title='Diffing From Inside Vim'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-5091950847524603250</id><published>2009-07-29T08:13:00.000-07:00</published><updated>2009-07-29T08:15:18.379-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='registers'/><title type='text'>Types of Registers</title><content type='html'>There was some mention of the special registers in Vim in the comments on my last post. Here's a list of all available registers in Vim (copied directly from the docs). For more info on what these registers do, please see :help registers.&lt;br /&gt;&lt;br /&gt;There are nine types of registers:&lt;br /&gt;1. The unnamed register ""&lt;br /&gt;2. 10 numbered registers "0 to "9&lt;br /&gt;3. The small delete register "-&lt;br /&gt;4. 26 named registers "a to "z or "A to "Z&lt;br /&gt;5. four read-only registers ":, "., "% and "#&lt;br /&gt;6. the expression register "=&lt;br /&gt;7. The selection and drop registers "*, "+ and "~ &lt;br /&gt;8. The black hole register "_&lt;br /&gt;9. Last search pattern register "/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-5091950847524603250?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/5091950847524603250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=5091950847524603250' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/5091950847524603250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/5091950847524603250'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/07/types-of-registers.html' title='Types of Registers'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7431228018161300195</id><published>2009-07-28T08:20:00.000-07:00</published><updated>2009-07-28T08:23:07.168-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='register'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='mode'/><category scheme='http://www.blogger.com/atom/ns#' term='insert'/><title type='text'>Insert Register Contents</title><content type='html'>If you're in insert mode and would like to insert the contents of a given register without going into normal mode, you can hit ctrl-r and then input the desired register. Between typing ctrl-r and the second character, a '"' will be displayed to indicate that you are expected to enter a register.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7431228018161300195?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7431228018161300195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7431228018161300195' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7431228018161300195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7431228018161300195'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/07/insert-register-contents.html' title='Insert Register Contents'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4034075920016360087</id><published>2009-06-19T05:40:00.000-07:00</published><updated>2009-06-19T05:51:03.500-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='agents'/><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><category scheme='http://www.blogger.com/atom/ns#' term='vimclojure'/><title type='text'>An Introduction to Clojure's Agents</title><content type='html'>For anyone that's interested in alternative programming languages, I've written a &lt;a href="http://travis-whitton.blogspot.com/2009/06/clojures-agents-scientists-monkeys-and_18.html"&gt;lengthy introduction&lt;/a&gt; to &lt;a href="http://clojure.org/"&gt;Clojure's&lt;/a&gt; agents.&lt;br /&gt;&lt;br /&gt;For those unfamiliar with Clojure, it's a modern Lisp running on the JVM with excellent support for concurrency. It allows excellent interoperability with Java, so essentially you get a dynamic and clean programming language with a huge standard library. On the performance front, it's often on par with Java. I've spent a good deal of time learning the language lately, and I have to say that it's very enjoyable to work with.&lt;br /&gt;&lt;br /&gt;One huge bonus of working with Clojure inside Vim is the &lt;a href="http://kotka.de/projects/clojure/vimclojure.html"&gt;VimClojure&lt;/a&gt; project. It allows interactive programming from inside of Vim and proxies code between a stateful &lt;a href="http://martiansoftware.com/nailgun/background.html"&gt;NailGun&lt;/a&gt; server and the editor. To be honest, I wasn't aware that an interactive &lt;a href="http://en.wikipedia.org/wiki/REPL"&gt;REPL&lt;/a&gt; was possible inside of Vim until I installed this, and I'm wondering if there are any other projects out there using similar techniques with different languages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4034075920016360087?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4034075920016360087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4034075920016360087' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4034075920016360087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4034075920016360087'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/06/introduction-to-clojures-agents.html' title='An Introduction to Clojure&apos;s Agents'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1253711542059093933</id><published>2009-06-17T07:22:00.000-07:00</published><updated>2009-06-17T07:27:10.218-07:00</updated><title type='text'>Switching from Horizontal to Vertical Split</title><content type='html'>If you have two windows which are horizontally split, and you'd like to make them vertically split instead, the following command sequence works well:&lt;br /&gt;&lt;br /&gt;&amp;lt;ctrl-w&amp;gt;t&amp;lt;ctrl-w&amp;gt;H&lt;br /&gt;&lt;br /&gt;To orient them back to a horizontal split do this:&lt;br /&gt;&lt;br /&gt;&amp;lt;ctrl-w&amp;gt;t&amp;lt;ctrl-w&amp;gt;K&lt;br /&gt;&lt;br /&gt;Note that if the top (or left) window is already current you can omit the &amp;lt;ctrl-w&amp;gt;t and simply do &amp;lt;ctrl-w&amp;gt;H or &amp;lt;ctrl-w&amp;gt;K.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1253711542059093933?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1253711542059093933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1253711542059093933' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1253711542059093933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1253711542059093933'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/06/switching-from-horizontal-to-vertical.html' title='Switching from Horizontal to Vertical Split'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4049577878252278630</id><published>2009-06-15T05:51:00.000-07:00</published><updated>2009-06-15T05:51:01.200-07:00</updated><title type='text'>Vi Mode in Readline Applications</title><content type='html'>Mike Pea submitted this comment in a recent tip, and I thought it deserved it's own post.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;If you find that you do like using vi editing mode (and what's not to love about it :), add 'set editing-mode vi' to your .inputrc, and vi mode will work in any readline based client, eg psql, irb.&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;Thanks Mike!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4049577878252278630?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4049577878252278630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4049577878252278630' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4049577878252278630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4049577878252278630'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/06/vi-mode-in-readline-applications.html' title='Vi Mode in Readline Applications'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4339311603632896387</id><published>2009-06-12T07:40:00.000-07:00</published><updated>2009-06-12T09:34:39.096-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='macro'/><category scheme='http://www.blogger.com/atom/ns#' term='recursively'/><title type='text'>Recursive Macros</title><content type='html'>A friend at work pointed out to me yesterday that he had accidentally written a recursive macro in Vim. I had never thought about the fact that this was possible, but I'd imagine there could be some potential usefulness for these somewhere. As a trivial (and useless) example, here's a recursive macro to move the cursor to the end of the current line one step at a time: qal@aq&lt;br /&gt;&lt;br /&gt;Edit: A little research has shown that this is an excellent way to repeat a macro to the end of the file. Say that you have a file containing one number per line from top to bottom:&lt;br /&gt;&lt;br /&gt;123&lt;br /&gt;234&lt;br /&gt;345&lt;br /&gt;456&lt;br /&gt;&lt;br /&gt;Put the cursor on the first line and type the following:&lt;br /&gt;&lt;br /&gt;qaq (clears register "a" of any previous macros)&lt;br /&gt;qa&amp;lt;ctrl-a&amp;gt;&amp;lt;enter&amp;gt;@aq&lt;br /&gt;&lt;br /&gt;Now type @a once more, and the macro will run to the bottom of the file incrementing the value on each line by one leaving you with the following:&lt;br /&gt;&lt;br /&gt;124&lt;br /&gt;235&lt;br /&gt;346&lt;br /&gt;457&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4339311603632896387?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4339311603632896387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4339311603632896387' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4339311603632896387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4339311603632896387'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/06/recursive-macros.html' title='Recursive Macros'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-8627646555396742504</id><published>2009-06-05T06:46:00.000-07:00</published><updated>2009-06-05T06:46:00.738-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='screen'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='os x'/><title type='text'>Screen in OS X Leopard</title><content type='html'>Sorry for the horribly platform specific tip, but this has been annoying me, and I thought it might help someone. If you're running OS X 10.5, you may have noticed that screen destroys your path when you start it. This can easily be remedied by putting the following in your ~/.screenrc.&lt;br /&gt;&lt;br /&gt;shell -/bin/bash&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-8627646555396742504?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/8627646555396742504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=8627646555396742504' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8627646555396742504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8627646555396742504'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/06/screen-in-os-x-leopard.html' title='Screen in OS X Leopard'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-3183613288909500065</id><published>2009-06-04T06:20:00.000-07:00</published><updated>2009-06-04T06:20:01.379-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclim'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Vim + Eclipse = Eclim</title><content type='html'>I know some of you may consider this to sacrilegious, but a lot of programmers are subjected to using Eclipse from time to time for various reasons. For those of you that need Eclipse for a given plugin, debugging session, or what have you, the &lt;a href="http://eclim.sourceforge.net/"&gt;Eclim project&lt;/a&gt; provides a flexible solution for integrating Vim with Eclipse.&lt;br /&gt;&lt;br /&gt;Using Eclim gives you three options for how you'd like to integrate Vim and Eclipse. The least intrusive allows you to run a headless Eclipse and control it via Vim. This makes Eclipse act as sort of an app server, which Vim can pipe to and from.&lt;br /&gt;&lt;br /&gt;The second option allows you to run both programs side by side. This way, Vim is still running standalone, but you can control Eclipse directly should you need to.&lt;br /&gt;&lt;br /&gt;The final option allows you to embed Vim directly into Eclipse. You'll lose some screen real estate when using this option, but it may suit certain people's needs.&lt;br /&gt;&lt;br /&gt;I'm not really a fan of Eclipse by any stretch of the imagination, but for things like Java debugging, it does offer some utility, so if you're in the same boat, you should give Eclim a try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-3183613288909500065?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/3183613288909500065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=3183613288909500065' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3183613288909500065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3183613288909500065'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/06/vim-eclipse-eclim.html' title='Vim + Eclipse = Eclim'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4010432299766017484</id><published>2009-06-03T12:37:00.000-07:00</published><updated>2009-06-03T12:41:28.859-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ctrl-m'/><category scheme='http://www.blogger.com/atom/ns#' term='replace'/><category scheme='http://www.blogger.com/atom/ns#' term='recursively'/><title type='text'>Recursively Replace Ctrl-M</title><content type='html'>Ctrl-M's are a plague inflicted upon programmers everywhere. I've mentioned a number of ways to deal with them in the past, and some readers have also contributed helpful advice as well. Today I ran into a situation where I needed to do a huge source diff on two different directory trees. My preprocessor happened to strip out all Ctrl-M leading to a bunch of false positives on files that differed. Some Google'ing around lead me to find this gem, which recursively strips Ctrl-M on all files within a given directory.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;for file in $(find /path/to/dir -type f); do&lt;br /&gt;   tr -d '\r' &lt;$file &gt;temp.$$ &amp;&amp; mv temp.$$ $file&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In order to give credit where it's due, a user named blowtorch gave the tip at &lt;a href="http://www.unix.com/shell-programming-scripting/38992-how-replace-control-m-all-files-folder.html"&gt;the following forum&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4010432299766017484?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4010432299766017484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4010432299766017484' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4010432299766017484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4010432299766017484'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/06/recursively-replace-ctrl-m.html' title='Recursively Replace Ctrl-M'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-541857499431146174</id><published>2009-06-03T06:18:00.000-07:00</published><updated>2009-06-03T06:18:00.905-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='comment'/><category scheme='http://www.blogger.com/atom/ns#' term='disable'/><category scheme='http://www.blogger.com/atom/ns#' term='autocomplete'/><title type='text'>Disable Comment Autocompletion</title><content type='html'>There are times when Vim's autocompletion of comments gets in my way more than it helps me. Fortunately, disabling comment autocomplete is easy. Just add the following to your vimrc.&lt;br /&gt;&lt;br /&gt;au FileType * setl fo-=cro&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-541857499431146174?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/541857499431146174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=541857499431146174' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/541857499431146174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/541857499431146174'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/06/disable-comment-autocompletion.html' title='Disable Comment Autocompletion'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-410898530269053698</id><published>2009-06-02T06:14:00.000-07:00</published><updated>2009-06-03T07:09:59.844-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='snippit'/><category scheme='http://www.blogger.com/atom/ns#' term='textmate'/><title type='text'>Snippit Support</title><content type='html'>Next time someone who uses TextMate starts blabbering on about how awesome snippits are, politely remind them that Vim supports snippits as well. You can download the snippitsEmu plugin &lt;a href="http://www.vim.org/scripts/script.php?script_id=1318"&gt;here&lt;/a&gt;, and it works quite well. For those unfamilar with snippits, they allow tab-style completion of boilerplate code. For example, you might type class, hit tab, and then a template for a class will be expanded based on the current filetype Vim is set to.&lt;br /&gt;&lt;br /&gt;Update: Several readers have cited &lt;a href="http://www.vim.org/scripts/script.php?script_id=2540"&gt;snipMate&lt;/a&gt; as a preferred alternative to snippitsEmu. Thanks guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-410898530269053698?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/410898530269053698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=410898530269053698' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/410898530269053698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/410898530269053698'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/06/snippit-support.html' title='Snippit Support'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-8633413603337034710</id><published>2009-06-01T11:11:00.000-07:00</published><updated>2009-06-01T11:13:19.717-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='easier'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='line'/><category scheme='http://www.blogger.com/atom/ns#' term='command'/><category scheme='http://www.blogger.com/atom/ns#' term='editing'/><title type='text'>Easier Command Line Editing</title><content type='html'>Assuming you're using the bash shell, the following can be helpful when composing long command lines.&lt;br /&gt;&lt;br /&gt;Start typing on the command line and then type Ctrl-x Ctrl-e, it should drop you into your system's default editor (hopefully Vim) and allow you to edit the command line from there. Once finished, save the command line, and bash will run the command.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-8633413603337034710?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/8633413603337034710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=8633413603337034710' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8633413603337034710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8633413603337034710'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/06/easier-command-line-editing.html' title='Easier Command Line Editing'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1681443200964403386</id><published>2009-05-18T10:55:00.000-07:00</published><updated>2009-05-18T11:00:19.220-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='cookbook'/><title type='text'>Vim Cookbook</title><content type='html'>Run Paint Run Run has contacted me to share a Vim Cookbook he has been working on. It's a creative commons work, and although it's a work in progress, it appears that it's already chock full of useful information. The cookbook is forumulated in a Problem/Solution type format, and I highly recommend giving it a look.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://vim.runpaint.org/"&gt;Vim Recipes - Free cookbook for the Vim text editor&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1681443200964403386?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1681443200964403386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1681443200964403386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1681443200964403386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1681443200964403386'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/05/vim-cookbook.html' title='Vim Cookbook'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-2999791700587835306</id><published>2009-04-29T07:31:00.000-07:00</published><updated>2009-04-30T11:06:41.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='schebang'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><title type='text'>Vim Sugar</title><content type='html'>Chris Sutter writes:&lt;br /&gt;&lt;br /&gt;I have a script and mapping in my ~/.vimrc:&lt;br /&gt;&lt;br /&gt;&lt;font face="monospace" color="#ccc"&gt;&lt;br /&gt;function! CheckForShebang()&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; if (match( getline(1) , '^\#!') == 0)&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map &amp;lt;F5&amp;gt; :!./%&amp;lt;CR&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unmap &amp;lt;F%&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; end&lt;br&gt;&lt;br /&gt;endfunction&lt;br&gt;&lt;br /&gt;map &amp;lt;F5&amp;gt; :call CheckForShebang()&lt;br&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;This way, if i'm editing a script with a shebang at the top and i hit &amp;lt;F5&amp;gt;, it maps &amp;lt;F5&amp;gt; to run the script (if not, &amp;lt;F5&amp;gt; is unmapped, so that it doesn't keep checking if I hit it again). I always found myself mapping &amp;lt;F5&amp;gt; by hand to run the current script while i was editting/debugging and I'd frequently lose track of whether I had mapped it or not. You could, of course, replace &amp;lt;F5&amp;gt; with your favorite run/compile/debug/etc key, it just happens to be my standard (from my QBasic days hehe).&lt;br /&gt;&lt;br /&gt;Thanks for the tip Chris!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-2999791700587835306?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/2999791700587835306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=2999791700587835306' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2999791700587835306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2999791700587835306'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/04/chris-sutter-writes-i-have-script-and.html' title='Vim Sugar'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-276367138029667130</id><published>2009-04-15T07:30:00.000-07:00</published><updated>2009-04-15T10:49:39.638-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='mode'/><category scheme='http://www.blogger.com/atom/ns#' term='ctrl-o'/><category scheme='http://www.blogger.com/atom/ns#' term='insert'/><title type='text'>i_Ctrl-O</title><content type='html'>Derek Wyatt shared this in a recent comment, and I thought it deserved it's own tip.&lt;br /&gt;&lt;br /&gt;If you're in insert mode, and you hit ctrl-o, Vim will accept one normal mode command and then return you to insert mode. Two examples given showed some typical usage:&lt;br /&gt;&lt;br /&gt;&amp;lt;C-o&amp;gt;ma - Mark the current position and then keep typing.&lt;br /&gt;&lt;br /&gt;&amp;lt;C-o&amp;gt;gql - Format the current line and keep typing&lt;br /&gt;&lt;br /&gt;A final blurb from the comment:&lt;br /&gt;&lt;br /&gt;"The next type you do &amp;lt;Esc&amp;gt;(thing)a you might remember that you could have done that with &amp;lt;C-o&amp;gt;".&lt;br /&gt;&lt;br /&gt;Thanks Derek!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-276367138029667130?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/276367138029667130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=276367138029667130' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/276367138029667130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/276367138029667130'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/04/ictrl-o.html' title='i_Ctrl-O'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-15094929858983417</id><published>2009-04-14T08:36:00.000-07:00</published><updated>2009-04-14T08:41:45.818-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hidden'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='set'/><title type='text'>Set  Hidden</title><content type='html'>If you've ever tried to type :only and had Vim refuse to hide existing buffers because they contain changes, you can use :set hidden to override this behavior. Just remember to keep the possibility of hidden modified buffers in mind when you're doing a :q!.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-15094929858983417?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/15094929858983417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=15094929858983417' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/15094929858983417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/15094929858983417'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/04/set-hidden.html' title='Set  Hidden'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-3153475527816488787</id><published>2009-04-13T06:41:00.001-07:00</published><updated>2009-04-13T06:42:58.678-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yank'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='s-exp'/><title type='text'>Yank S-Exp</title><content type='html'>If you're hacking a Lisp dialect in Vim, you can do type ya( to yank the current s-exp into the default buffer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-3153475527816488787?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/3153475527816488787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=3153475527816488787' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3153475527816488787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3153475527816488787'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/04/yank-s-exp.html' title='Yank S-Exp'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6453699244100703712</id><published>2009-04-10T12:57:00.000-07:00</published><updated>2009-04-10T13:00:04.326-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yank'/><category scheme='http://www.blogger.com/atom/ns#' term='ex'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='line'/><category scheme='http://www.blogger.com/atom/ns#' term='command'/><title type='text'>Pull Into Ex</title><content type='html'>If you position your cursor over a given word and type :&amp;lt;ctrl-r&amp;gt;&amp;lt;ctrl-w&amp;gt; it will pull the value into your current ex mode command line. This is great for yanking long values into substitutions among other things.&lt;br /&gt;&lt;br /&gt;Thanks to Nate for the tip!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6453699244100703712?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6453699244100703712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6453699244100703712' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6453699244100703712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6453699244100703712'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/04/pull-into-ex.html' title='Pull Into Ex'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-787072975002314096</id><published>2009-04-08T08:15:00.000-07:00</published><updated>2009-04-08T08:19:23.757-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='reduce'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>bashreduce</title><content type='html'>I stumbled across this project recently. It's a program that allows you to apply standard shell tools in a map reduce style fashion. Large memory hungry tasks like sorting can be distributed across machines to maximize throughput. As a bonus, it's written in bash, so it's highly portable and works with a combination of vanilla shell utilities and ssh shared-key authentication.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/erikfrey/bashreduce/tree/master"&gt;The bashreduce project&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-787072975002314096?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/787072975002314096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=787072975002314096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/787072975002314096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/787072975002314096'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/04/bashreduce.html' title='bashreduce'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6710597987727247279</id><published>2009-04-08T08:02:00.001-07:00</published><updated>2009-04-08T08:03:39.767-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='mode'/><category scheme='http://www.blogger.com/atom/ns#' term='insert'/><title type='text'>Insert Mode Shortcuts</title><content type='html'>Here are some handy shortcuts that you can utilize while you're in insert mode.&lt;br /&gt;&lt;br /&gt;ctrl-t - adjust current line one indent right&lt;br /&gt;ctrl-d - adjust current line one indent left&lt;br /&gt;ctrl-w - backspace over a word&lt;br /&gt;ctrl-u - delete to beginning of indent&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6710597987727247279?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6710597987727247279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6710597987727247279' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6710597987727247279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6710597987727247279'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/04/insert-mode-shortcuts.html' title='Insert Mode Shortcuts'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4310895503790890176</id><published>2009-04-06T06:00:00.000-07:00</published><updated>2009-04-15T07:49:39.918-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='functional'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='clojure'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Why Functional Programming Matters</title><content type='html'>I'm always trying to sharpen my skills as a programmer. One approach I've been using to become a better programmer is to learn as many development methodologies as possible. In the past few years, I've become a big fan of functional programming. The basic idea behind functional programming is to compose your programs using functions that return a single value and avoid side effects whenever possible. A side effect is an action that is not required for a function to do it's work. An example of a function with a side effect would be:&lt;br /&gt;&lt;br /&gt;function sum(a, b) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print "a + b = " + (a + b)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return a + b&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;In this case, the print statement wouldn't be required to accurately calculate the sum, so it would be considered a side effect. A pure functional language prohibits side effects altogether; although, most functional languages allow some level of impurity for convenience.&lt;br /&gt;&lt;br /&gt;Another common feature of functional programming is the use of higher order functions. Higher order functions are functions that take functions as their arguments; thereby, providing an additional level of abstraction. An example of a higher order function included in most modern languages would be the map function.&lt;br /&gt;&lt;br /&gt;function square(x) { return x * x }&lt;br /&gt;numbers = [1, 2, 3, 4, 5]&lt;br /&gt;squares = map(square, numbers)&lt;br /&gt;print squares&lt;br /&gt;[1, 4, 9, 16, 25]&lt;br /&gt;&lt;br /&gt;Higher order functions can typically take anonymous functions as their arguments as well leading to increased flexibility.&lt;br /&gt;&lt;br /&gt;I can already hear you groaning as you read this article and saying, "yeah yeah, my language can do all that too... what's the point?" Well, in the typical zen fashion of functional languages, it's not always what you can do that matters; rather it's what you can't do. A striking difference between a number of functional languages and their imperative counterparts is how mutability is handled.&lt;br /&gt;&lt;br /&gt;A number of functional languages such as Haskell, Erlang, and Clojure address the majority of their built-in types as immutable. This means that once a value is assigned to a local variable, it cannot be changed. At face value, this may seem like a huge disadvantage and might even lead one to believe that certain types of programs might be impossible to write. The truth is that any imperative program can be rewritten in a functional style but doing so requires the adoption of a new set of tools. Specifically, recursion must be adopted in lieu of traditional iteration. Things like closures can be used to simulate state, and objects are generally thrown by the wayside.&lt;br /&gt;&lt;br /&gt;At this point, the resounding question in your mind is probably, "why bother?" Well, fortunately there's a very strong reason behind all this shifting of methodology, and that's concurrency. Anybody that's written a non-trivial multi-threaded program in an imperative language has dealt with the difficult issues of synchronization, locking, and sharing of state. The larger and more complex the program, the more difficult it becomes to avoid subtle errors and race conditions. For most programmers writing traditional multi-threaded applications, there are more things that can go wrong than right.&lt;br /&gt;&lt;br /&gt;Functional programs that operate on immutable data don't have to deal with any of these issues. Since nothing is shared, there's no potential for race conditions, multiple threads stomping on one another's data, or any of the other trappings one might traditionally succumb to. Freeing the programmer from worrying about such things allows focus to be shifted to solving the actual problem at hand instead of dealing with the fine grained details of threading semantics.&lt;br /&gt;&lt;br /&gt;Why should you care about threading? I believe the introduction to Java Concurrency in Practice puts it well when they say, "For the past 30 years, computer performance has been driven by Moore's Law; from now on, it will be driven by Amdahl's Law." Basically, processors aren't getting any faster. For many years, programmers have written code under the assumption that performance wasn't an issue because the next generation of processors would pick up the slack. We've reached the point where we'll never be able to assume this again. From this point on, things will become increasingly parallel, which means that learning to work with multi-core machines will become an increasingly marketable skill.&lt;br /&gt;&lt;br /&gt;Traditionally relegated to academia, theorem proving, and compiler writing, functional languages are finally becoming mainstream by filling the multi-core niche. Even if you don't adopt a functional language for your day job, taking the time to learn a different method of problem solving will make you a better programmer and provide valuable techniques you can use in your day to day work.&lt;br /&gt;&lt;br /&gt;This being said, there are some really nice languages out there to play around with. I will briefly highlight a handful of them for your perusal. Please take note, that not all of these adhere explicitly to the immutable state share nothing model previously mentioned; although, most provide exceptional facilities for multi-core programming.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt; - A modern Lisp running on the JVM. Clojure throws out all the cruft of old world Lisp and provides a lean and mean core with immutable data structures. One of Clojure's core features is excellent concurrency performance, and it also provides seamless access to Java libraries whenever desired.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; - Adpoted by Twitter to solve their initial concurrency issues that Ruby could not handle, Scala runs on the JVM, which makes deployment a breeze and provides a multi-paradigm approach to development.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://erlang.org/"&gt;Erlang&lt;/a&gt; - Initially developed as a proprietary language by Ericcson, Erlang was open sourced some years back. Erlang makes use of immutable state and sends data back and forth between managed processes using a built-in messaging system. The process model allows code to be seamlessly distributed across several cores, servers, or networks. Ericcson has successfully used Erlang to manage their telco switching on massive networks for many years.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt; - A purely functional language with an advanced type system. Haskell provides a robust feature set and an extremely advanced compiler. The ability to introduce arbitrary operators and a non-standard syntax can make Haskell intimidating at first glance, but it's concurrency peformance rivals any other language. Notable projects written in Haskell include the Xmonad window manager and Pugs, a Perl 6 compiler.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://caml.inria.fr/"&gt;OCaml&lt;/a&gt; - Numerous wins in the &lt;a href="http://en.wikipedia.org/wiki/ICFP_Programming_Contest"&gt;ICFP&lt;/a&gt; helped OCaml gain initial notoriety. Native code compilers allow OCaml programs to run at blazing speeds, and a sophisticated type system provides both safety and flexibility.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/"&gt;F#&lt;/a&gt; - Developed by Microsoft Research, F# is a variant of ML with a core that is similar to OCaml. It runs on .Net and will be a fully supported language in the .NET Framework and Visual Studio ecosystem as part of Visual Studio 2010.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.plt-scheme.org/"&gt;PLT Scheme&lt;/a&gt; - A functional language with a history in academia. The ubiquitious MIT book, &lt;a href="http://www.htdp.org/"&gt;how to design programs&lt;/a&gt;, uses PLT as it's host language. Excellent documentation makes PLT a great way to cut your teeth on functional programming, and it's concurrency features are actually pretty good as well. Threading in PLT is based on the mechanism used in &lt;a href="http://cml.cs.uchicago.edu/index.html"&gt;Concurrent ML&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.newlisp.org/"&gt;New Lisp&lt;/a&gt; - Although including the word "New" in the name of any product might not be the best idea, New Lisp fills a nice niche in the scripted functional language domain. It seems to be at least partially inspired by Paul Graham's &lt;a href="http://www.paulgraham.com/arc.html"&gt;Arc&lt;/a&gt;, and it provides a good number of modern features out of the box.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sbcl.sourceforge.net/index.html"&gt;SBCL&lt;/a&gt; - One of the de-facto standard Common Lisp implementations. I haven't done any concurrency stuff in Lisp, but I do know that SBCL provides a high quality Lisp implementation for your general Lisp-ing needs. If SBCL doesn't meet your needs, &lt;a href="http://clisp.cons.org/"&gt;Clisp&lt;/a&gt; is another very solid Lisp distribution.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mozilla.org/rhino/"&gt;Javascript&lt;/a&gt; - The ubiquitous Javascript language now has a JVM port and runs everywhere. It's one of the most widely deployed programming languages on earth and allows the application of higher order functions, lambdas, closures, currying, etc. Who would've thought there was a functional language right under your nose?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4310895503790890176?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4310895503790890176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4310895503790890176' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4310895503790890176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4310895503790890176'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/04/why-functional-programming-matters.html' title='Why Functional Programming Matters'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-2765764330831078251</id><published>2009-04-01T07:42:00.000-07:00</published><updated>2009-04-01T08:17:25.526-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='apocalypse'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Goodbye Daily Vim, Hello Emacs</title><content type='html'>After some careful consideration, I've come to realize that it's time to switch editors. Vim has been a good friend, but like an old horse with a broken leg, it's time to put it down. A few days ago, a strange thing happened. &lt;a href="http://en.wikipedia.org/wiki/Richard_Stallman"&gt;Richard Stallman&lt;/a&gt; caught wind of this blog and sent me a DMCA takedown notice for documenting patented proprietary Emacs features (copy and paste). I tried to explain that these features were part of Vim as well, but he insisted that Emacs had prior art (implemented in 1953) and that the blog must be taken down at once. Determined to fight back, I decided to take a hard look at the Emacs internals to find some hidden weakness. After days of wanding through the Elisp forest, it happened... I fell in LOVE! Who would've thought that I could send email, surf the web, and play tetris all inside of my text editor? ZOMFG! I'm sorry folks, but if I would've realized what we've been missing, I wouldn't have wasted your time with all these silly Vim tips. This being said, I'll be shutting down this blog in the next 24 hours and dedicating my life to the &lt;a href="http://www.dina.kvl.dk/%7Eabraham/religion/"&gt;Church of Emacs&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;.&lt;/span&gt; I feel so seriously about this that I'm quitting my job here at Grooveshark and focusing my professional career on writing Emacs kernel modules and improving Emacs boot time. To any earthings that might be reading this, I've enjoyed my time on your planet, but the spaceship has landed, and I must return home. Farewell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-2765764330831078251?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/2765764330831078251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=2765764330831078251' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2765764330831078251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2765764330831078251'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/04/goodbye-daily-vim-hello-emacs.html' title='Goodbye Daily Vim, Hello Emacs'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1272161914990309843</id><published>2009-03-31T09:35:00.000-07:00</published><updated>2009-03-31T09:43:41.468-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='remap'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='keys'/><title type='text'>Windows Key Re-maps</title><content type='html'>On Windows, Vim has slightly different behavior for a few basic keys. Namely, ctrl-v, ctrl-x, and ctrl-z are re-mapped to make them more familiar to Windows users. Ctrl-v, which is probably the most widely used of these, is re-mapped to ctrl-q. To get the equivalent of a ctrl-z (background process), you can issue the :suspend ex command. I don't believe there are re-mappings for ctrl-a (add) and ctrl-x (subtract); although, you can probably override them in mswin.vim.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1272161914990309843?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1272161914990309843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1272161914990309843' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1272161914990309843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1272161914990309843'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/03/windows-key-re-maps.html' title='Windows Key Re-maps'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4163566496898203708</id><published>2009-03-31T07:20:00.000-07:00</published><updated>2009-03-31T07:45:33.807-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><category scheme='http://www.blogger.com/atom/ns#' term='survival'/><title type='text'>Survival Hacks</title><content type='html'>Many years back when I was first starting to get savvy with Linux, a co-worker approached me with a problem. He had yanked the harddrive out of his old Linux router and placed it in a different machine. The old machine had on-board ethernet and used a different driver than the new machine's PCI ethernet card. His only other computer was a laptop, which was currently offline due to the router issue. Thinking it would be an easy job, I downloaded a binary copy of the PCI driver and copied it onto a floppy at work. When I got to his house, I realized there was a bigger issue. My friend didn't have a monitor of any sort for the machine we'd be working on. We could have just given up and borrowed one from work the next day, but we decided to see how far we could get without one. We hooked up a keyboard and booted the machine waiting a few extra minutes to be sure we had a login prompt. From there, we very carefully logged in as root and mounted the floppy. The light on the floppy drive gave us a good indication that we were good so far. Not being able to remember the name of the driver forced me to do a glob copy based on the file extension to the /tmp directory, but again, the light on the floppy drive showed things were working. From there, we had another problem. We weren't sure if modprobe, the command to load a kernel module, would accept wildcards, so the globbing was no good this time. Still totally blind, I typed the following into the command line:&lt;br /&gt;&lt;br /&gt;for I in *.ko; do modprobe ./$I; done&lt;br /&gt;&lt;br /&gt;Fingers crossed, I hoped for the best and typed:&lt;br /&gt;&lt;br /&gt;ifconfig eth0 192.168.0.1 netmask 255.255.255.0&lt;br /&gt;&lt;br /&gt;From there, we plugged in his laptop, and tried to ping the machine. Much to our surprise, it was up and responding. Feeling accomplished, we did an ssh login from there, and got everything setup as it should be. Now, I'm not saying this was totally elite or anything, but it does go to show that a little creative thinking can get you pretty far. Feel free to share your own survival hacks in the comments if you have a similar story.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4163566496898203708?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4163566496898203708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4163566496898203708' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4163566496898203708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4163566496898203708'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/03/survival-hacks.html' title='Survival Hacks'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-733177658403550764</id><published>2009-03-20T04:23:00.000-07:00</published><updated>2009-03-20T04:26:23.803-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='autocompletion'/><title type='text'>Out of the box Autocompletion</title><content type='html'>Thanks to Chris Sutter for contributing the following tip:&lt;br /&gt;&lt;br /&gt;(The following applies to versions of vim higher than 7.0)&lt;br /&gt;&lt;br /&gt;If you are editing a file in vim which ends with .php, .html, .css, .js, .sql, .rb, or .py, you can type (while in insert mode) ctrl-x followed by ctrl-o and vim's "omnifunc" feature combines with its built-in autocomplete feature to show autocomplete options specific to the corresponding language/markup. You can subsequently press ctrl-n and ctrl-p to browse through this list. In short, vim has autocomplete functionality for all common web development contexts (and probably some others) out of the box. But it's not just autocomplete.&lt;br /&gt;&lt;br /&gt;If you are editing php (or, i imagine, ruby/python but i didn't try) and the text on which you are autocompleting is the beginning of a valid (builtin) function name, a small window will open at the top of your vim screen showing the&lt;span style="font-style: italic;"&gt; method signature &lt;span style="font-weight: bold;"&gt;with argument names&lt;/span&gt;&lt;/span&gt;! No more jumping over to php.net to see if it's (needle, haystack) or (haystack, needle)...&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;Edit a file called foo.php, enter insert mode, type&lt;br /&gt;&lt;br /&gt;   &amp;lt;?php&lt;br /&gt;   str_r&lt;br /&gt;&lt;br /&gt;Now press ctrl-x ctrl-o and vim shows a box below the cursor containing the following, with the first entry highlighted:&lt;br /&gt;&lt;br /&gt;   str_repeat(    f&lt;br /&gt;   str_replace(  f&lt;br /&gt;   str_rot13(     f&lt;br /&gt;&lt;br /&gt;The "f"s indicate that each entry is a function. If you had entered $_ and pressed c-x c-o, the results would have been "$_COOKIE", "$_ENV", and so on, labeled with "v" for variable)&lt;br /&gt;&lt;br /&gt;The window opened above (since the selection is a function) shows:&lt;br /&gt;&lt;br /&gt;    str_repeat(string input, int multiplier | string&lt;br /&gt;&lt;br /&gt;telling you the full function name, the argument types and names and finally the return type.&lt;br /&gt;&lt;br /&gt;Admittedly, the c-x c-o and c-n/c-p stuff is awkward. I imagine you could remap to tab/shift-tab which is more common for autocompletion browsing in unix environments. The  SuperTab plugin for vim does this for normal file-wise autocompletion (otherwise done in insert mode with c-n and c-p). It could probably be hacked to incorporate omnifunc stuff, too. If I see anything like that out there, I'll send something about it.&lt;br /&gt;&lt;br /&gt;Please let me know if there's anything you think vim &lt;span style="font-style: italic;"&gt;can't&lt;/span&gt; do and I'll see to ensuring you that, in fact, it can and it's easier than you think!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-733177658403550764?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/733177658403550764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=733177658403550764' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/733177658403550764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/733177658403550764'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/03/out-of-box-autocompletion.html' title='Out of the box Autocompletion'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-8688337851630735850</id><published>2009-03-17T06:32:00.000-07:00</published><updated>2009-03-17T06:50:56.107-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='console'/><title type='text'>Vim + Cygwin Improvements</title><content type='html'>I've been stuck in a Windows environment at work for the last month or so doing Blackberry development. To try and make things more tolerable, I've been doing most of my work in a Cygwin environment; however, the Cygwin Vim build is sub-optimal compared to the native Windows build. This lead me to try and find a way to use Windows Vim seamlessly from inside Cygwin. The following alias worked out nicely:&lt;br /&gt;&lt;br /&gt;[bash-fu borrowed from this &lt;a href="http://vim.wikia.com/wiki/Run_native-Windows_Vim_from_cygwin_without_a_wrapper"&gt;tip&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;alias vim='VIM=`cygpath -d "$VIM"` HOME=`cygpath -d "$HOME"` "`cygpath -u "$VIM"`/vim72/vim.exe"'&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;In this case, the $VIM environment variable is initially set to C:\Program Files\Vim. It's also important to change the vim72 version number to whatever matches your install.&lt;br /&gt;&lt;br /&gt;The second thing I did, which is making life a lot easier, is switch to using &lt;a href="http://sourceforge.net/projects/console"&gt;Console2&lt;/a&gt; as a replacement for the standard Windows cmd.exe. The combo of Console2, Cygwin, and a decent Vim build is a good bet if you're committed to Windows for whatever reason.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-8688337851630735850?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/8688337851630735850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=8688337851630735850' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8688337851630735850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8688337851630735850'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/03/vim-cygwin-improvements.html' title='Vim + Cygwin Improvements'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-91522002224740044</id><published>2009-03-10T04:59:00.000-07:00</published><updated>2009-03-10T05:07:00.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='swap'/><category scheme='http://www.blogger.com/atom/ns#' term='items'/><title type='text'>Change Last, First to First Last</title><content type='html'>Here's a tip borrowed from the Vim help file. Say that you have a list of names like:&lt;br /&gt;&lt;br /&gt;Doe, John&lt;br /&gt;Smith, Peter&lt;br /&gt;&lt;br /&gt;and you want to change that to:&lt;br /&gt;&lt;br /&gt;John Doe&lt;br /&gt;Peter Smith&lt;br /&gt;&lt;br /&gt;You can use the following substitute pattern to easily do so:&lt;br /&gt;&lt;br /&gt;:%s/\([^,]*\), \(.*\)/\2 \1/&lt;br /&gt;&lt;br /&gt;Basically, you're capturing zero or more NOT commas followed by a comma and space and then capturing zero or more of anything. The comma and space are outside the parens, so they're not stored. The parens store the captured groups in the special variables \1, \2, \3, \N from left to right, so the replacement pattern is substituting in the groups in the reverse order they were captured.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-91522002224740044?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/91522002224740044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=91522002224740044' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/91522002224740044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/91522002224740044'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/03/change-last-first-to-first-last.html' title='Change Last, First to First Last'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6523110306470053431</id><published>2009-03-09T10:08:00.000-07:00</published><updated>2009-03-09T10:15:09.433-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='buffers'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Tab Buffer Browsing</title><content type='html'>Using the following mappings in normal mode provides a convenient way to easily switch between the next and previous buffers.&lt;br /&gt;&lt;br /&gt;nmap &amp;lt;tab&amp;gt; :bn&amp;lt;cr&amp;gt;&lt;br /&gt;nmap &amp;lt;s-tab&amp;gt; :bp&amp;lt;cr&amp;gt;&lt;br /&gt;&lt;br /&gt;Thanks to Chris for the tip!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6523110306470053431?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6523110306470053431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6523110306470053431' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6523110306470053431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6523110306470053431'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/03/tab-buffer-browsing.html' title='Tab Buffer Browsing'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1610182470646228195</id><published>2009-02-09T07:20:00.000-08:00</published><updated>2009-02-09T07:29:12.303-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twisten.fm'/><category scheme='http://www.blogger.com/atom/ns#' term='grooveshark'/><title type='text'>Twistem.FM</title><content type='html'>Ok, this is not Vim related, but it is something I'm very excited about. Here at &lt;a href="http://www.grooveshark.com/"&gt;Grooveshark&lt;/a&gt;, the startup company I work at, we've just launched a new service. It's called Twisten (a play on tweet + listen), and it uses the Twitter API to aggregate tweets about music. For any song it can identify, it adds the tweet to a public timeline and allows you to play the song.&lt;br /&gt;&lt;br /&gt;My primary role on the team was designing the parsers which identify meaningful bits of information inside a tweet and then converting them to actual songs. Fun stuff!&lt;br /&gt;&lt;br /&gt;If you're a fan of Twitter (or music), &lt;a href="http://www.twisten.fm/"&gt;check out Twisten.FM&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1610182470646228195?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1610182470646228195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1610182470646228195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1610182470646228195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1610182470646228195'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/02/twistemfm.html' title='Twistem.FM'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4535623785072321383</id><published>2009-02-09T07:09:00.000-08:00</published><updated>2009-02-09T07:12:57.577-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='execute'/><category scheme='http://www.blogger.com/atom/ns#' term='command'/><category scheme='http://www.blogger.com/atom/ns#' term='auto'/><title type='text'>Autocommands</title><content type='html'>You can add an auto command to your vimrc to have it automatically executed when a certain type of file is loaded. As an example, I use the following to convert tabs to spaces when a PHP file is loaded.&lt;br /&gt;&lt;br /&gt;auto BufReadPost *.php retab!&lt;br /&gt;&lt;br /&gt;See :help auto for the full info.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4535623785072321383?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4535623785072321383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4535623785072321383' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4535623785072321383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4535623785072321383'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/02/autocommands.html' title='Autocommands'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-3461550656275422805</id><published>2009-02-04T04:52:00.000-08:00</published><updated>2009-02-11T08:13:28.849-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='editor'/><title type='text'>Editor Comparison</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lca2srv30.epfl.ch/sathe/data/emacs_learning_curves.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 480px; height: 320px;" src="http://lca2srv30.epfl.ch/sathe/data/emacs_learning_curves.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A friend sent this to me, and I thought it was pretty funny. I'm not sure of the original source. Thanks Nate!&lt;br /&gt;&lt;br /&gt;UPDATE: The comic is from &lt;a href="http://blogs.msdn.com/steverowe/archive/2004/11/17/code-editor-learning-curves.aspx"&gt;this blog&lt;/a&gt;. Good stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-3461550656275422805?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/3461550656275422805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=3461550656275422805' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3461550656275422805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3461550656275422805'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/02/editor-comparison.html' title='Editor Comparison'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-8959650144800882990</id><published>2009-01-27T06:45:00.001-08:00</published><updated>2009-09-25T13:42:56.419-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='modified'/><category scheme='http://www.blogger.com/atom/ns#' term='flag'/><category scheme='http://www.blogger.com/atom/ns#' term='ignore'/><title type='text'>Ignore the Modified Flag</title><content type='html'>There are times when I'm working on a temporary buffer, and I want to do something like a `gf' (go to file), but Vim insists that the buffer is modified and refuses to abandon the file. You can get around this by telling Vim the file isn't modified.&lt;br /&gt;&lt;br /&gt;:set hidden&lt;br /&gt;&lt;br /&gt;This effectively makes Vim treat the file like it's already saved. Please avoid using this for any production files as it can make Vim think that the file on disk is different than it actually is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-8959650144800882990?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/8959650144800882990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=8959650144800882990' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8959650144800882990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8959650144800882990'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/ignore-modified-flag.html' title='Ignore the Modified Flag'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-3575473213858602384</id><published>2009-01-27T06:09:00.000-08:00</published><updated>2009-01-27T06:11:27.047-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='split'/><category scheme='http://www.blogger.com/atom/ns#' term='equal'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='size'/><title type='text'>Make Windows Equal Height</title><content type='html'>If you have a bunch of split windows of disproportionate sizes, you can make them all equal by doing a `ctrl-w =' in normal mode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-3575473213858602384?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/3575473213858602384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=3575473213858602384' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3575473213858602384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3575473213858602384'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/make-windows-equal-height.html' title='Make Windows Equal Height'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6697027527847104485</id><published>2009-01-20T07:48:00.000-08:00</published><updated>2009-01-20T07:49:47.693-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='spaces'/><category scheme='http://www.blogger.com/atom/ns#' term='table'/><category scheme='http://www.blogger.com/atom/ns#' term='convert'/><title type='text'>Converting Tabs to Spaces</title><content type='html'>Here's a quick way to convert a tab-stopped file to a space-formatted file.&lt;br /&gt;&lt;br /&gt;:set expandtab&lt;br /&gt;:retab!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6697027527847104485?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6697027527847104485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6697027527847104485' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6697027527847104485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6697027527847104485'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/converting-tabs-to-spaces.html' title='Converting Tabs to Spaces'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7113937959987225302</id><published>2009-01-15T06:47:00.000-08:00</published><updated>2009-01-15T06:48:58.757-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='text'/><category scheme='http://www.blogger.com/atom/ns#' term='changed'/><category scheme='http://www.blogger.com/atom/ns#' term='last'/><title type='text'>Last Changed Text</title><content type='html'>Here are two helpful commands to get to the last changed or yanked text.&lt;br /&gt;&lt;br /&gt;`[ - First character of previously changed or yanked text&lt;br /&gt;`] - Last character of previously changed or yanked text&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7113937959987225302?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7113937959987225302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7113937959987225302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7113937959987225302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7113937959987225302'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/last-changed-text.html' title='Last Changed Text'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-3845890620429709732</id><published>2009-01-14T07:29:00.000-08:00</published><updated>2009-01-14T07:31:11.707-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>Extending History</title><content type='html'>You can allow Vim to store more history than the default (last 20 commands) by setting history as follows.&lt;br /&gt;&lt;br /&gt;:set history=N (where N is how much history you want to keep)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-3845890620429709732?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/3845890620429709732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=3845890620429709732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3845890620429709732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3845890620429709732'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/extending-history.html' title='Extending History'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4435189090997272434</id><published>2009-01-13T08:33:00.000-08:00</published><updated>2009-01-13T08:35:53.535-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pager'/><category scheme='http://www.blogger.com/atom/ns#' term='end'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='deleted'/><title type='text'>Delete to End of Page</title><content type='html'>Typing `dL' in normal mode will delete to the end of the current page. In other words, everything visible to the bottom of the window.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4435189090997272434?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4435189090997272434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4435189090997272434' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4435189090997272434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4435189090997272434'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/delete-to-end-of-page.html' title='Delete to End of Page'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4206709931079534505</id><published>2009-01-12T05:00:00.000-08:00</published><updated>2009-01-12T05:03:29.217-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='remap'/><category scheme='http://www.blogger.com/atom/ns#' term='backtick'/><title type='text'>Remap Backtick</title><content type='html'>I find it convenient to remap the backtick key "`" to single-quote "'". Functionally, they are very similar. Backtick takes you to an exact mark location while single-quote simply takes you to the beginning of the marked line. I don't use the single-quote functionality much, and it's much easier to reach than backtick, so the following mapping saves some finger stretching.&lt;br /&gt;&lt;br /&gt;nnoremap ' `&lt;br /&gt;nnoremap ` '&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4206709931079534505?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4206709931079534505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4206709931079534505' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4206709931079534505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4206709931079534505'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/remap-backtick.html' title='Remap Backtick'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-8064419041716990661</id><published>2009-01-10T05:47:00.000-08:00</published><updated>2009-01-10T05:47:00.865-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='paragraph'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='reformat'/><title type='text'>Reformat a Paragraph</title><content type='html'>Say you have the following text:&lt;br /&gt;&lt;br /&gt;&amp;gt; someone said&lt;br /&gt;&amp;gt; &amp;gt; someone else said&lt;br /&gt;&amp;gt; &amp;gt; &amp;gt; long quoted message&lt;br /&gt;&amp;gt; &amp;gt; blah blah&lt;br /&gt;&amp;gt; blah&lt;br /&gt;&lt;br /&gt;Place the cursor on the first line and do `gqip'. I often use this combo to conveniently reformat paragraphs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-8064419041716990661?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/8064419041716990661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=8064419041716990661' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8064419041716990661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8064419041716990661'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/reformat-paragraph.html' title='Reformat a Paragraph'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7212389007138147201</id><published>2009-01-09T04:22:00.000-08:00</published><updated>2009-01-09T04:22:00.580-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='modeline'/><title type='text'>Modelines</title><content type='html'>Vim allows you to insert modelines to specify options you'd like for a specific file. For example, you could have a perl script as follows:&lt;br /&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;# vim: set expandtab:&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;This would tell Vim to expand tabs in the current file. See :help modeline for more info.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7212389007138147201?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7212389007138147201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7212389007138147201' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7212389007138147201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7212389007138147201'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/modelines.html' title='Modelines'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1507509348044191356</id><published>2009-01-08T04:16:00.000-08:00</published><updated>2009-01-08T04:41:45.998-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='control'/><category scheme='http://www.blogger.com/atom/ns#' term='remove'/><title type='text'>Removing Ctrl-M</title><content type='html'>There are quite a few ways of doing this, but a quick way to remove ^M scattered around your file is as follows:&lt;br /&gt;&lt;br /&gt;:%s/C-vC-m//g&lt;br /&gt;&lt;br /&gt;Where C-v is Ctrl-v and C-m is Ctrl-m.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1507509348044191356?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1507509348044191356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1507509348044191356' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1507509348044191356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1507509348044191356'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/removing-ctrl-m.html' title='Removing Ctrl-M'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6717259011021229437</id><published>2009-01-07T04:13:00.000-08:00</published><updated>2009-01-07T04:15:16.629-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='all'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='command'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Command on All Windows</title><content type='html'>Here's a neat trick. If you want to execute an ex command on all windows, you can do the following:&lt;br /&gt;&lt;br /&gt;:windo command&lt;br /&gt;&lt;br /&gt;so...&lt;br /&gt;&lt;br /&gt;:windo %s/foo/bar/g would find and replace foo with bar in all windows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6717259011021229437?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6717259011021229437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6717259011021229437' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6717259011021229437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6717259011021229437'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/command-on-all-windows.html' title='Command on All Windows'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-9071877503815365787</id><published>2009-01-05T13:51:00.000-08:00</published><updated>2009-01-05T13:55:42.506-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><title type='text'>Only RSS Vim Tips</title><content type='html'>For those of you that would prefer to exclude any tips from this blog that aren't directly related to Vim from your RSS, I have an easy solution. Blogger allows feed URLs to be filtered based on tags. I only use the vim tag on posts directly related to Vim, so the following RSS URL should be a convenient solution.&lt;br /&gt;&lt;br /&gt;http://dailyvim.blogspot.com/feeds/posts/default/-/vim&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-9071877503815365787?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/9071877503815365787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=9071877503815365787' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/9071877503815365787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/9071877503815365787'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2009/01/only-rss-vim-tips.html' title='Only RSS Vim Tips'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7475593312740896687</id><published>2008-12-12T10:11:00.001-08:00</published><updated>2008-12-12T10:22:03.484-08:00</updated><title type='text'>Value Under Cursor #2</title><content type='html'>Expanding on a previous tip. Here are some methods for figuring out the value of a given character.&lt;br /&gt;&lt;br /&gt;1) Using gf - place the character under a character and hit ga in normal mode to obtain it's ascii value.&lt;br /&gt;&lt;br /&gt;2) Using g8 - same as above but applies to UTF-8 characters.&lt;br /&gt;&lt;br /&gt;3) :set list - toggles displaying unprintable characters.&lt;br /&gt;&lt;br /&gt;4) pipe into the shell command od -c&lt;br /&gt;&lt;br /&gt;5) type the :ascii ex command to display a characters ascii value&lt;br /&gt;&lt;br /&gt;6) use cat -vET filename&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7475593312740896687?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7475593312740896687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7475593312740896687' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7475593312740896687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7475593312740896687'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/12/value-under-cursor-2.html' title='Value Under Cursor #2'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1323571326747665624</id><published>2008-12-12T08:00:00.000-08:00</published><updated>2008-12-12T08:02:29.378-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='set'/><category scheme='http://www.blogger.com/atom/ns#' term='filetype'/><title type='text'>Setting the Filetype</title><content type='html'>Vim normally sets the current filetype automatically and very accurately at that. In some cases though, such as when you're starting a file from scratch, it doesn't know the filetype. In these cases, you can set the filetype manually.&lt;br /&gt;&lt;br /&gt;:set filetype=perl&lt;br /&gt;:set filetype=php&lt;br /&gt;:set filetype=python&lt;br /&gt;&lt;br /&gt;etc...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1323571326747665624?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1323571326747665624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1323571326747665624' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1323571326747665624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1323571326747665624'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/12/setting-filetype.html' title='Setting the Filetype'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4361009813492197075</id><published>2008-12-11T06:46:00.000-08:00</published><updated>2008-12-11T07:03:38.281-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='x.org'/><category scheme='http://www.blogger.com/atom/ns#' term='mouse'/><category scheme='http://www.blogger.com/atom/ns#' term='crash'/><category scheme='http://www.blogger.com/atom/ns#' term='clicking'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu: Downgrading X.org</title><content type='html'>First things first, if you use multiple monitors and you're thinking about upgrading to Ubuntu 8.10 (Intrepid), I would recommend holding off. A good number of users, myself included, have experienced a &lt;a href="https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers-177/+bug/296167"&gt;very annoying bug where the mouse spontaneously loses it's ability to click&lt;/a&gt;. The only way to regain mouse support is to kill X with ctrl-alt-backspace (ugh). I've been able to faithfully reproduce the bug by doing the following:&lt;br /&gt;&lt;br /&gt;* Enable Xinerama in xorg.conf&lt;br /&gt;* Open firefox fullscreen on both monitors&lt;br /&gt;* Rapidly move the mouse between monitors&lt;br /&gt;&lt;br /&gt;It's worth noting that this bug has nothing to do with what window manager you're using. I've experienced it under Gnome, AwesomeWM, and Xmonad. The bad news is that even though a lot of people are complaining about it, the bug has not been fixed. As of right now, the only reliable method to regain workstation stability seems to be downgrading X.org back to the Hardy packages. To assist anyone who might be Google'ing this issue, here are the instructions for doing so.&lt;br /&gt;&lt;br /&gt;Log into a text console as root and shut down X with '/etc/init.d/gdm stop'.&lt;br /&gt;&lt;br /&gt;Add the following to your /etc/apt/sources.list:&lt;br /&gt;&lt;br /&gt;deb http://us.archive.ubuntu.com/ubuntu hardy main&lt;br /&gt;deb http://us.archive.ubuntu.com/ubuntu hardy-updates main&lt;br /&gt;deb http://us.archive.ubuntu.com/ubuntu hardy-security main&lt;br /&gt;&lt;br /&gt;Run apt-get update.&lt;br /&gt;&lt;br /&gt;Purge all the packages you can by doing the following:&lt;br /&gt;&lt;br /&gt;cd /var/lib/dpkg/info/&lt;br /&gt;dpkg --purge `ls *xorg*.list | sed s/.list// `&lt;br /&gt;&lt;br /&gt;Some of these will fail to purge due to dependency issues. That's OK. Continue with the instructions.&lt;br /&gt;&lt;br /&gt;Reinstall the packages from the Hardy repo:&lt;br /&gt;&lt;br /&gt;apt-get --reinstall install x11-common/hardy xorg/hardy xserver-xorg/hardy xserver-xorg-core/hardy xserver-xorg-input-kbd/hardy xserver-xorg-input-mouse/hardy&lt;br /&gt;&lt;br /&gt;Note that if you're using a stock Ubuntu video driver such as the Matrox driver you will need to include it in the list as well (xserver-xorg-video-mga/hardy). I use the third-party Nvidia driver, so it wasn't necessary to include it in the list.&lt;br /&gt;&lt;br /&gt;After this, you can start X with "/etc/init.d/gdm start" and hopefully login to a working desktop. The final step is to go into synaptic and lock the reinstalled packages to avoid the upgrade manager from nagging.&lt;br /&gt;&lt;br /&gt;Thanks to Nelson for providing these instructions, which I've modified slightly for presentation here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4361009813492197075?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4361009813492197075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4361009813492197075' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4361009813492197075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4361009813492197075'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/12/ubuntu-downgrading-xorg.html' title='Ubuntu: Downgrading X.org'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7738930032947009614</id><published>2008-12-05T09:15:00.000-08:00</published><updated>2008-12-05T09:26:41.499-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='map'/><category scheme='http://www.blogger.com/atom/ns#' term='objects'/><category scheme='http://www.blogger.com/atom/ns#' term='instance method'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP: Invoking a method with Map</title><content type='html'>Ever since I learned the basics of functional programming, I've been a fan of the map function. In the right context, it can be an elegant solution for array transformation. Of course, like anything, it can be misused. Using PHP's map, it's non-obvious how to make it invoke an instance method rather than a function. The following example illustrates how this can be accomplished.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class M&lt;br /&gt;{&lt;br /&gt;    function double($a) {&lt;br /&gt;        return $a * 2;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$m    = new M;&lt;br /&gt;$list = array(1, 2, 3);&lt;br /&gt;$list = array_map(array($m, 'double'), $list);&lt;br /&gt;print_r($list);&lt;br /&gt;&lt;br /&gt;Array&lt;br /&gt;(&lt;br /&gt;    [0] =&gt; 2&lt;br /&gt;    [1] =&gt; 4&lt;br /&gt;    [2] =&gt; 6&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7738930032947009614?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7738930032947009614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7738930032947009614' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7738930032947009614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7738930032947009614'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/12/php-invoking-method-with-map.html' title='PHP: Invoking a method with Map'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6213792747346075581</id><published>2008-12-02T07:08:00.000-08:00</published><updated>2008-12-02T07:11:43.446-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='files'/><category scheme='http://www.blogger.com/atom/ns#' term='dot'/><category scheme='http://www.blogger.com/atom/ns#' term='find'/><title type='text'>Find Dot Files</title><content type='html'>Sometimes I forget the name of a particular config file but know it's stored as a dot file in my home directory. The following one-liner will non-recursively display any regular file begining with a dot.&lt;br /&gt;&lt;br /&gt;find . -maxdepth 1 -type f -name '.*'&lt;br /&gt;&lt;br /&gt;Find does it again. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6213792747346075581?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6213792747346075581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6213792747346075581' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6213792747346075581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6213792747346075581'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/12/find-dot-files.html' title='Find Dot Files'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-1014698567435490838</id><published>2008-12-02T05:57:00.000-08:00</published><updated>2008-12-02T05:59:15.336-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rightleft'/><category scheme='http://www.blogger.com/atom/ns#' term='reload vimrc'/><title type='text'>Right = Left</title><content type='html'>Here's a tip that's mostly for fun. Open up Vim and type :set rightleft.&lt;br /&gt;&lt;br /&gt;This changes display orientation to right-to-left. This can be useful for editing Hebrew and Arabic or just for freaking people out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-1014698567435490838?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/1014698567435490838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=1014698567435490838' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1014698567435490838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/1014698567435490838'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/12/right-left.html' title='Right = Left'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4609272036026300488</id><published>2008-11-26T08:38:00.000-08:00</published><updated>2008-12-02T08:29:29.317-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='awesome'/><category scheme='http://www.blogger.com/atom/ns#' term='manager'/><category scheme='http://www.blogger.com/atom/ns#' term='window'/><title type='text'>AwesomeWM</title><content type='html'>I've used a lot of window managers and desktop environments over the years (Gnome, KDE, Window Maker, Blackbox, Fluxbox, Enlightenment, XFCE, etc...). The last few years, I've lost a lot of motivation to experiment and stuck with the OS default (Gnome/Metacity in my case). Recently though, I've been increasingly trying to avoid ever touching the mouse. This is partially due to wrist issues and partially just to try and be more efficient. The quest for a mouse free lifestyle lead me to find the aptly named Awesome Window Manager.&lt;br /&gt;&lt;br /&gt;If you're like me and have used many window manager, you're probably groaning right now and saying, "what makes Awesome any different from my current window manager?" Well, quite a few things actually. For one, Awesome is a tiling window manager. This means that if you open three terminal windows on the same screen, the WM will neatly organize them on the screen in an intelligent fashion. If you don't like the tile layout, you can switch layouts with a keystroke. If you want a certain application to fall outside of the default tiled layout, you can set it to float, and it will behave like it would in any other window manager.&lt;br /&gt;&lt;br /&gt;While tiling is nice, it's not the only thing that makes Awesome unique. Awesome also avoids the traditional concept of virtual desktops or workspaces in favor of a tagging mechanism. Tags allow you to assign applications to logical groups in which they will appear together. An application can be bound to any number of tags. Even better, tags allow you to assign rules to newly opened applications, so I can say, "Firefox will open on the `Firefox' tab in floating mode on my 2nd monitor". You can also assign a default layout and number of columns to a given tab for tiling. Last but not least, each monitor can have it's own tagset giving you the equivalent of an independent session per monitor.&lt;br /&gt;&lt;br /&gt;This is all good and well, but what does it have to do with getting around with the keyboard? Well, quite a lot actually. Awesome allows you to setup keybindings to navigate between tabs, send applications to a given tab, switch between applications on a given tab, resize windows, rotate windows within the tileset, jump between monitors, etc. All this is done inside of your awesomerc file, and the syntax is very straightforward. In my custom configuration, I've setup Awesome to respect keybindings very similar to Vim, so I can jump between monitors and windows using a combination of my meta key (windows key), a modifier (alt), and H, J, K, and L. As a bonus, it also happens to be extremely fast with performance in the same class as fluxbox and it's cousins.&lt;br /&gt;&lt;br /&gt;A final feature that I've come to absolutely love is it's widget support. There's a user configurable statusbar that by default contains your current tagset listing and a small layout diagram. The rest of the statusbar is essentially open for whatever you want to add. All an application has to do to update the statusbar is write to standard output, so I've constructed a series of shell scripts to show the current time, CPU usage, memory usage, active users, and active streams at Grooveshark. All of these are basically one-liners. Here's my clock for the sake of example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;while true&lt;br /&gt;do&lt;br /&gt;    echo "0 widget_tell mystatusbar clock text " \&lt;br /&gt;         "`date +"%A %B %d, %Y %l:%M %p"`" | awesome-client&lt;br /&gt;    sleep 1&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In case I missed anything, here's the laundry list of features from the Awesome website.&lt;br /&gt;&lt;br /&gt;    * Very stable, fast, small and simple;&lt;br /&gt;&lt;br /&gt;    * Only window manager using asynchronous XCB library instead of the old synchronous Xlib: make awesome faster than any other window manager;&lt;br /&gt;&lt;br /&gt;    * Very well documented source code and API;&lt;br /&gt;&lt;br /&gt;    * No mouse needed: everything can be performed with keyboard;&lt;br /&gt;&lt;br /&gt;    * Real multihead support (XRandR, Xinerama or Zaphod mode);&lt;br /&gt;&lt;br /&gt;    * Implement many Freedesktop standards: EWMH, XDG Base Directory, XEmbed, System Tray;&lt;br /&gt;&lt;br /&gt;    * Some real transparency support (using Composite extension and xcompmgr);&lt;br /&gt;&lt;br /&gt;    * Doesn't distinguish between layers: there is no floating or tiled layer;&lt;br /&gt;&lt;br /&gt;    * Whether or not the clients of currently selected tag(s) are in tiled layout, you can rearrange them on the fly. Popup and fixed-size windows are automatically floating.&lt;br /&gt;&lt;br /&gt;    * Layout handling: automatically manage your windows placement according to the chosen policy for each tag;&lt;br /&gt;&lt;br /&gt;    * Use tags instead of workspaces: allow to place clients on several tags, and display several tags at the same time;&lt;br /&gt;&lt;br /&gt;    * A lot of Lua extensions to add features: dynamic tagging, widget feeding, tabs, …;&lt;br /&gt;&lt;br /&gt;    * D-Bus support;&lt;br /&gt;&lt;br /&gt;    * And more.&lt;br /&gt;&lt;br /&gt;And of course a screenshot is worth a thousand words.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://awesome.naquadah.org/images/screen.png"&gt;&lt;img src="http://awesome.naquadah.org/index/320x240-screen.png" alt="awesome screenshot" width="300" height="240" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And Finally, &lt;a href="http://awesome.naquadah.org/"&gt;The AwesomeWM Website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[edit]&lt;br /&gt;As requested, &lt;a href="http://pastebin.com/f5c3abe0b"&gt;here's a copy of my awesomerc&lt;/a&gt;. Note that I'm using version 2.3.4.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4609272036026300488?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4609272036026300488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4609272036026300488' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4609272036026300488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4609272036026300488'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/11/awesomewm.html' title='AwesomeWM'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7239354571983590417</id><published>2008-11-25T21:27:00.001-08:00</published><updated>2008-11-25T21:28:17.203-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reload vimrc'/><title type='text'>Reload VIMRC</title><content type='html'>You can quickly and easily reload your vimrc with the following command.&lt;br /&gt;&lt;br /&gt;:source $MYVIMRC&lt;br /&gt;&lt;br /&gt;If you want to know what your current vimrc is, just do the following.&lt;br /&gt;&lt;br /&gt;:echo $MYVIMRC&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7239354571983590417?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7239354571983590417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7239354571983590417' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7239354571983590417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7239354571983590417'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/11/reload-vimrc.html' title='Reload VIMRC'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-2267737016932483202</id><published>2008-11-25T07:14:00.000-08:00</published><updated>2008-11-25T07:54:28.834-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='tabs'/><title type='text'>Tabs</title><content type='html'>It took tabs a while to grow on me when using Vim. This is mainly due to the flexibility that buffers and split windows provide; however, once I realized tabs could act as a convenient way of grouping split windows, I was sold. There's nothing complicated or confusing about using tabs, but a few mappings will make your life easier. Add the following to your vimrc.&lt;br /&gt;&lt;br /&gt;let mapleader = ","&lt;br /&gt;map &amp;lt;leader&amp;gt;tt :tabnew&amp;lt;cr&amp;gt;&lt;br /&gt;map &amp;lt;leader&amp;gt;tc :tabclose&amp;lt;cr&amp;gt;&lt;br /&gt;map &amp;lt;leader&amp;gt;tm :tabmove&lt;br /&gt;map &amp;lt;leader&amp;gt;tn :tabnext&amp;lt;cr&amp;gt;&lt;br /&gt;map &amp;lt;leader&amp;gt;tp :tabprevious&amp;lt;cr&amp;gt;&lt;br /&gt;&lt;br /&gt;I've already been called a n00b once on this blog for not seeing the value of the comma motion (repeat latest f, t, F or T in opposite direction). If you use it regularly, you'll obviously want to choose a different map leader.&lt;br /&gt;&lt;br /&gt;Now that your mappings are setup, using tabs should be quick and intuitive.&lt;br /&gt;&lt;br /&gt;* Press ,tt to open a new tab&lt;br /&gt;* Press ,tc to close the current tab&lt;br /&gt;* Press ,tm [number] to move to tab [number]&lt;br /&gt;* Press ,tn to move to the next tab&lt;br /&gt;* Press ,tp to move to the previous tab&lt;br /&gt;&lt;br /&gt;In standard Vim, the tab list will appear at the top of your editing window. Gvim provides the industry standard GUI tabs. Obviously there are more tab commands available, but these basics should get you pretty far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-2267737016932483202?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/2267737016932483202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=2267737016932483202' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2267737016932483202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2267737016932483202'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/11/tabs.html' title='Tabs'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-3792843928908749136</id><published>2008-11-21T07:54:00.000-08:00</published><updated>2008-11-21T12:15:44.645-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='mapleader'/><title type='text'>Using a Mapleader</title><content type='html'>As you have probably realized, keyboard real estate in Vim is pretty heavily occupied in normal mode. Specifically, just about every key is already bound to a command. Luckily, Vim provides a facility to define additional mappings on these keys. It's called a mapleader, and it's easy to setup.&lt;br /&gt;&lt;br /&gt;First you need to define what key you want your mapleader to be. I prefer comma because it's (in my daily usage) unused, and it's easy to reach. Add the following to your vimrc.&lt;br /&gt;&lt;br /&gt;let mapleader = ","&lt;br /&gt;&lt;br /&gt;Now that mapleader is defined, you can use it for custom mappings at will.&lt;br /&gt;&lt;br /&gt;:map &amp;lt;leader&amp;gt;n :new&amp;lt;cr&amp;gt;&lt;br /&gt;&lt;br /&gt;Press `,' then `n' in normal mode, and it splits to a new window.&lt;br /&gt;&lt;br /&gt;:map &amp;lt;leader&amp;gt;i I&lt;br /&gt;&lt;br /&gt;Press `,' then `i' in normal mode, and it puts you into insert mode on the first character of the current line.&lt;br /&gt;&lt;br /&gt;These usage examples are slightly obtuse, so I'll be showing how to incorporate using a mapleader into tab management in an upcoming post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-3792843928908749136?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/3792843928908749136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=3792843928908749136' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3792843928908749136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3792843928908749136'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/11/using-mapleader.html' title='Using a Mapleader'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-8744574229710253113</id><published>2008-11-20T08:51:00.001-08:00</published><updated>2008-11-20T08:54:48.154-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='screen'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='share'/><category scheme='http://www.blogger.com/atom/ns#' term='sessions'/><title type='text'>Share a Screen Session</title><content type='html'>It's possible for two users to share a screen session. This is particularly useful if multiple people want to monitor a long running task, and it's easy to do.&lt;br /&gt;&lt;br /&gt;user #1:&lt;br /&gt;&lt;br /&gt;screen -R longbuild&lt;br /&gt;&lt;br /&gt;user #2:&lt;br /&gt;&lt;br /&gt;screen -x -R longbuild&lt;br /&gt;&lt;br /&gt;The -x flag tells screen to allow you to attach to an already attached session. This is also good for crazy stuff like a collaborative Vim session (if you're into that sort of thing).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-8744574229710253113?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/8744574229710253113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=8744574229710253113' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8744574229710253113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8744574229710253113'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/11/share-screen-session.html' title='Share a Screen Session'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-901357993392045084</id><published>2008-10-20T04:51:00.000-07:00</published><updated>2008-10-20T04:54:24.518-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='hardcopy'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='postscript'/><title type='text'>Vim to Postscript</title><content type='html'>Thanks to Karl for the following tip:&lt;br /&gt;&lt;br /&gt;Here's a little Vim trick that might be of interest. If you're on a non-Windows machine, you can make the Vim hardcopy command print to a postscript file instead of a real printer. Try issue the following:&lt;br /&gt;&lt;br /&gt;:hardcopy &gt; file.ps&lt;br /&gt;&lt;br /&gt;You'll get a postscript output of the file you're currently editing.&lt;br /&gt;From there you can view the postscript file with gv or convert it to a pdf with ps2pdf.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-901357993392045084?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/901357993392045084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=901357993392045084' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/901357993392045084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/901357993392045084'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/10/vim-to-postscript.html' title='Vim to Postscript'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-5794712570288353560</id><published>2008-10-16T18:48:00.000-07:00</published><updated>2008-10-16T18:51:45.764-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dbd'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>MySQL DBD in Activestate</title><content type='html'>I'm currently doing some consulting work to bridge the gap between Oracle and MySQL. Being in a Windows environment, I'm using the Activestate Perl distribution. Fortunately, it includes a nice ODBC module for connecting to Oracle out of the box. The bad news is, it doesn't contain a MySQL module. Luckily, I found a &lt;a href="http://cpan.uwinnipeg.ca/PPMPackages/10xx/"&gt;third party host&lt;/a&gt; that does provide the module. The following ppm (Perl Package Manager) one-liner takes care of the issue.&lt;br /&gt;&lt;br /&gt;C:\&gt;ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx/DBD-mysql.ppd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-5794712570288353560?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/5794712570288353560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=5794712570288353560' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/5794712570288353560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/5794712570288353560'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/10/mysql-dbd-in-activestate.html' title='MySQL DBD in Activestate'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-8560347031150650636</id><published>2008-10-16T13:26:00.000-07:00</published><updated>2008-10-16T13:28:46.845-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='golden'/><category scheme='http://www.blogger.com/atom/ns#' term='rule recursion'/><title type='text'>The Golden Rules of Recursion</title><content type='html'>1) never iterate&lt;br /&gt;2) always follow the first rule ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-8560347031150650636?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/8560347031150650636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=8560347031150650636' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8560347031150650636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/8560347031150650636'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/10/golden-rules-of-recursion.html' title='The Golden Rules of Recursion'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6895297125519593514</id><published>2008-10-16T11:57:00.000-07:00</published><updated>2008-10-16T12:23:14.808-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='been'/><category scheme='http://www.blogger.com/atom/ns#' term='i&apos;ve'/><category scheme='http://www.blogger.com/atom/ns#' term='where'/><title type='text'>Where I've Been</title><content type='html'>I've come to realize that my post per day ratio here at Daily Vim is a good measure of how busy I am in my daily life. To be more specific, my workload is inversely proportional to my blogging habits, but please don't think I've forgotten about this blog. I haven't, and the posting will continue. Lately though besides being buried under a mountain of side-work, I've been working diligently alongside the rest of the Grooveshark team to facilitate one of our largest launches in recent memory.&lt;br /&gt;&lt;br /&gt;Today, all that hard work came to fruition, and I'm happy to announce that our streaming service, &lt;a href="http://listen.grooveshark.com"&gt;Grooveshark Lite&lt;/a&gt;, has been expanded with the addition of the following features.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.grooveshark.com/blog/how-to-share-a-playlist/"&gt;Shared Playlists&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://widgets.grooveshark.com/"&gt;Blog Widget&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Improved Social Features (follow users, find similar users, etc...)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Music Upload Client&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Autoplay Improvements&lt;/li&gt;&lt;br /&gt;&lt;li&gt;More Reliable Streaming&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;If you scroll down this page, you can see an example of the blog widget in action. The widget builder page allows you to embed a playlist or song of your choosing into any website, size it appropriately, and drop it in. I'll be updating my blog playlist frequently as a means to passively share music that I enjoy.&lt;br /&gt;&lt;br /&gt;Back on the topic of Daily Vim, now that things are settling down a bit, I'm hoping to post more often, as I have some cool tips I'm looking forward to sharing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6895297125519593514?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6895297125519593514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6895297125519593514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6895297125519593514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6895297125519593514'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/10/where-ive-been.html' title='Where I&apos;ve Been'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-2669135675715619737</id><published>2008-10-09T05:00:00.000-07:00</published><updated>2008-10-09T05:00:00.659-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='favorite'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Why Ruby is My Favorite Language</title><content type='html'>I started programming seriously roughly ten years ago. I was working in the call center of an &lt;a href="http://www.atlantic.net/"&gt;ISP&lt;/a&gt;, and there was a need for a reseller tracking application. I was attending the local community college at the time, and had been indoctrinated into the world of computer programming trhough what amounted to vocational training in Visual Basic and Microsoft Access. Fortunately, the ISP was a Linux shop, and a few employees were nice enough to introduce me to the basic philosophy of Linux and assist in learning some rudimentary shell commands.&lt;br /&gt;&lt;br /&gt;One of these employees was a Perl hacker, and he assisted in convincing the company to form a small team of three programmers to tackle the programming job. I was lucky enough to be chosen for the position, and to be frank, after having spent a few months in the call center, I would have considered janitorial duties a promotion. The only problem was that I didn't know Perl. I quickly ran to the nearest bookstore, grabbed a copy of Learning Perl, and set to work learning the language. A week later, I was neck deep in the project and thankfully had an experienced programmer to lead me through my first big job. The project was a success, and the team became a permanent fixture at the company.&lt;br /&gt;&lt;br /&gt;What impressed me so much about Perl was the succintness, mneumonic friendliness, and consistency of the language. After a few weeks of intense study, I could perform the majority of my daily programming tasks from memory and rarely needed to consult a reference.&lt;br /&gt;&lt;br /&gt;A year or so later, PHP hit the scene. With the huge buzz surrounding the language, I figured there had to be something really groundbreaking going on. The team I was working on chose to build a large project in PHP, and once again, I set out in earnest to learn the language. This time, things weren't so easy. While Perl had "sunk in" right away, PHP lacked the natural abstraction I had come to love about Perl. As an example, I didn't understand why PHP needed sixteen sort methods (sort, arsort, asort, krsort, ksort, natsort, natcasesort, rsort, usort, array_multisort, uasort, uksort, dbx_sort, imap_sort, ldap_sort, yaz_sort) while Perl only needed one. The database methods lacked the wonderful platform independence of DBI, and a lot of other things felt redundant. Mostly though, I disliked the way the language encouraged mixing interface with your implementation. At the time, the PHP website frequently featured examples interpsersing functions and HTML and even touted this ability as a "language feature".&lt;br /&gt;&lt;br /&gt;Progressing through my courses, I ended up taking a class on object oriented design. I learned about the model view controller architectural pattern and immediately saw it's advantages as a design strategy. I learned the basics of object oriented programming with Perl, but I was dissatisfied with the way it was implemented. I spent a considerable amount of effort learning Java and later Python. I found both languages to be "good enough" in the way they possessed a healthy amount of easily accessible OOP goodness, but I missed the fluidity of programming in Perl and neither ever became a "favorite".&lt;br /&gt;&lt;br /&gt;At this point I was working at an environmental laboratory, and I was given complete freedom to use whatever technology I wanted to solve the problems at hand. I was tasked with writing a data analysis and computation software for an ICAP (Inductively Coupled Argon Plasma Spectrometer), and I was again at a crossroads. An article on Slashdot had drawn my attention to the Ruby programming language, and I found an &lt;a href="http://whytheluckystiff.net/ruby/pickaxe/"&gt;excellent book&lt;/a&gt; that was freely available online. Reading the &lt;a href="http://whytheluckystiff.net/ruby/pickaxe/html/intro.html"&gt;introductory walkthrough section&lt;/a&gt;, I was immediately impressed by the fact that literally everything in the language was an object. The &lt;a href="http://whytheluckystiff.net/ruby/pickaxe/html/builtins.html"&gt;core language&lt;/a&gt; was incredibly consistent, concise, and well documented with absolutely no cruft. All of the &lt;a href="http://whytheluckystiff.net/ruby/pickaxe/html/ref_c_array.html#Array.collect"&gt;wonderful&lt;/a&gt; &lt;a href="http://whytheluckystiff.net/ruby/pickaxe/html/ref_m_enumerable.html#Enumerable.grep"&gt;Perl&lt;/a&gt; &lt;a href="http://whytheluckystiff.net/ruby/pickaxe/html/ref_c_regexp.html"&gt;idioms&lt;/a&gt; I'd come to know and love were right there at my fingertips; albiet, in a more readable fashion. I was sold.&lt;br /&gt;&lt;br /&gt;I learned the language and developed the project simultaneously. This was long before Rails was even a whisper in the programming world, so I rolled my own MVC style framework containing a presentation layer that used a combination of XML, eruby templates, and LaTeX. This made it easy for the app to generate both HTML and PDF documents on a whim. The development cycle was fast, the project was finished ahead of time, and everybody loved the final product. Later I wrote a C extension for Ruby to &lt;a href="http://grub.ath.cx/win32serial/"&gt;easily access the Win32 serial port&lt;/a&gt; allowing an archaic lab instrument to dump data straight to an OpenOffice spreadsheet. I'd never considered writing a C extension to any other language, but again, Ruby made it easy.&lt;br /&gt;&lt;br /&gt;Since then, &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; has rolled onto the scene and has allowed me to develop projects in which I would have needed a team in the past. MVC is the core paradigm and being able to use my favorite language alongside my favorite architectural pattern is nothing short of a godsend as a web developer. I've used Rails to develop web applications on the fast track and have brought in a nice supplementary income doing so. Best of all, I feel good about the final product when writing a Rails app knowing I'm developing in a standardized way where another programmer will be able to come along later and easily maintain the work I've done. There are MVC frameworks for PHP, but there's still no de facto standard way to roll a PHP app. This makes every PHP app a "special surprise" when you look under the hood. Sadly, the surprise isn't always pleasant.&lt;br /&gt;&lt;br /&gt;I'm not saying you can't write good code in PHP. Actually, working at &lt;a href="http://www.grooveshark.com/"&gt;Grooveshark&lt;/a&gt; has shown me that it's possible to write extremely clean code in PHP, but I still run to the PHP manual several times a day to lookup one of it's 3000+ core method signatures.&lt;br /&gt;&lt;br /&gt;I'm acutely aware that languages are like religions among developers and that everyone has their favorite for one reason or another. I'm also certain there are people out there that would disagree with some of the arguments I've made here. Arguments aside, if you're looking for a new language to learn, and you haven't tried Ruby, &lt;a href="http://whytheluckystiff.net/ruby/pickaxe/html/intro.html"&gt;take a look&lt;/a&gt;, and I think you'll be pleasantly surprised at all that it has to offer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-2669135675715619737?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/2669135675715619737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=2669135675715619737' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2669135675715619737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2669135675715619737'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/10/why-ruby-is-my-favorite-language.html' title='Why Ruby is My Favorite Language'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-5178463964544268603</id><published>2008-10-01T06:19:00.000-07:00</published><updated>2008-10-01T06:28:41.427-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='vimperator'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><title type='text'>Vimperator</title><content type='html'>There's a plugin for firefox which allows firefox to behave more like Vim. Some of the features include:&lt;br /&gt;&lt;br /&gt;* Vim-like keybindings (h,j,k,l,gg,G,0,$,ZZ,,etc.)&lt;br /&gt;* Ex commands (:quit, :open www.foo.com, ...)&lt;br /&gt;* Hit-a-hint like navigation of links (start with 'f' to follow a link)&lt;br /&gt;* Vim-like statusline with a wget-like progress bar&lt;br /&gt;* Macros to replay key strokes&lt;br /&gt;&lt;br /&gt;etc...&lt;br /&gt;&lt;br /&gt;The author really threw in the kitchen sink. I've seen my co-worker using this, and it's SUPER cool.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4891"&gt;Vimperator Plugin&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-5178463964544268603?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/5178463964544268603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=5178463964544268603' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/5178463964544268603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/5178463964544268603'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/10/vimperator.html' title='Vimperator'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-960039630251643814</id><published>2008-09-30T04:08:00.000-07:00</published><updated>2008-09-30T04:08:00.856-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='connection'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='remote'/><category scheme='http://www.blogger.com/atom/ns#' term='config'/><title type='text'>SSH Remote Connections via Config</title><content type='html'>Thorsten has contributed the following ssh tip. Thanks Thorsten!&lt;br /&gt;&lt;br /&gt;You wrote about ssh connects via gnome terminal:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dailyvim.blogspot.com/2008/09/gnome-terminal-tips.html"&gt;http://dailyvim.blogspot.com/2008/09/gnome-terminal-tips.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm using the config file of ssh to achieve the same goal:&lt;br /&gt;&lt;br /&gt;just put the file "config" in your .ssh directory (chmod 600) with the&lt;br /&gt;following lines:&lt;br /&gt;﻿﻿&lt;br /&gt;&lt;br /&gt;host mysshhost&lt;br /&gt; user root&lt;br /&gt; identityfile /root/.ssh/my_ssh_key.ssh&lt;br /&gt; port 34021&lt;br /&gt; hostname 127.0.0.1&lt;br /&gt; localforward 10100 localhost:10100&lt;br /&gt; ForwardX11 yes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;then back at the command line just try:&lt;br /&gt;&lt;br /&gt;myhost:/ # ssh mysshhost&lt;br /&gt;&lt;br /&gt;and voila, welcome to your ssh connected system (even the&lt;br /&gt;bash-completion works with the config file, just do a ssh &lt;tab&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-960039630251643814?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/960039630251643814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=960039630251643814' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/960039630251643814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/960039630251643814'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/09/ssh-remote-connections-via-config.html' title='SSH Remote Connections via Config'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-4480389712445892369</id><published>2008-09-29T06:04:00.000-07:00</published><updated>2008-09-29T06:06:28.209-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='browsing'/><category scheme='http://www.blogger.com/atom/ns#' term='filesystems'/><category scheme='http://www.blogger.com/atom/ns#' term='question'/><category scheme='http://www.blogger.com/atom/ns#' term='remote'/><title type='text'>Question: Browsing Remote Filesystems</title><content type='html'>A Daily Vim reader asks the following question:&lt;br /&gt;&lt;br /&gt;Travis, the feature that has me married to Kate (KDE text editor) is the file browser with bookmarks built in. Kate allows users to browse remote filesystems from within the app just like they could browse the local filesystem in a file manager. Furthermore, there is a bookmarks feature where users can bookmark specific directories / files on remote servers. Anythink like those two features in VIM?&lt;br /&gt;&lt;br /&gt;Thanks!&lt;br /&gt;&lt;br /&gt;Anybody have any ideas on this? I have a few ideas, but I'll wait and see if anybody else has a suggestions first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-4480389712445892369?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/4480389712445892369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=4480389712445892369' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4480389712445892369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/4480389712445892369'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/09/question-browsing-remote-filesystems.html' title='Question: Browsing Remote Filesystems'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-3742264581762655197</id><published>2008-09-25T07:36:00.000-07:00</published><updated>2008-09-25T07:46:33.848-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='whatprovides'/><category scheme='http://www.blogger.com/atom/ns#' term='apt'/><category scheme='http://www.blogger.com/atom/ns#' term='apt-file'/><category scheme='http://www.blogger.com/atom/ns#' term='yum'/><title type='text'>Whatprovides</title><content type='html'>If you're using a RedHat derivative that utilizes yum as it's package manager, you can use the `whatprovides' command to see what package provides a specific file.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;yum whatprovides /usr/bin/vim&lt;br /&gt;&lt;br /&gt;... grab a coffee ...&lt;br /&gt;&lt;br /&gt;vim-enhanced.x86_64                      1:6.3.046-0.40E.7.cent base            &lt;br /&gt;Matched from:&lt;br /&gt;/usr/bin/vim&lt;br /&gt;&lt;br /&gt;Debian derivatives provide a similar functionality via the apt-file package.&lt;br /&gt;&lt;br /&gt;# sudo apt-get install apt-file&lt;br /&gt;# sudo apt-file update&lt;br /&gt;$ apt-file search /usr/bin/diff&lt;br /&gt;diff: /usr/bin/diff&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-3742264581762655197?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/3742264581762655197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=3742264581762655197' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3742264581762655197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3742264581762655197'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/09/whatprovides.html' title='Whatprovides'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-3867284693712993841</id><published>2008-09-19T10:35:00.001-07:00</published><updated>2008-09-19T10:36:17.895-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unhighlight'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><title type='text'>Unhighlight Current Search</title><content type='html'>If you want to un-highlight the currently highlighted search terms, issue the following command.&lt;br /&gt;&lt;br /&gt;:noh&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-3867284693712993841?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/3867284693712993841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=3867284693712993841' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3867284693712993841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/3867284693712993841'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/09/unhighlight-current-search.html' title='Unhighlight Current Search'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-6927763403185184404</id><published>2008-09-12T05:50:00.000-07:00</published><updated>2008-09-12T05:51:58.363-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='register'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><title type='text'>Search Register</title><content type='html'>You can manually push a value into the search register using the following syntax.&lt;br /&gt;&lt;br /&gt;let @/='Some String'&lt;br /&gt;&lt;br /&gt;This is particularly nice for script hacking when you want to highlight a group of strings in the current buffer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-6927763403185184404?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/6927763403185184404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=6927763403185184404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6927763403185184404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/6927763403185184404'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/09/search-register.html' title='Search Register'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-2981966692746321359</id><published>2008-09-12T05:46:00.000-07:00</published><updated>2008-09-12T05:50:18.819-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vimgrep'/><category scheme='http://www.blogger.com/atom/ns#' term='objects'/><category scheme='http://www.blogger.com/atom/ns#' term='names'/><title type='text'>Vimgrep Without Object Names</title><content type='html'>My friend Chris (Vim user extraordinaire) has contributed the following tip. It looks like it could be quite useful to any Java hackers in the crowd.&lt;br /&gt;&lt;br /&gt;I constantly want to use :vimgrep to find usages/references to certain object types in my java code. However, when I :vimgrep for the object name, it (naturally) matches all of the 'import' statements, too. I've known for awhile that there was an idiom in the regex syntax to negate a previous atom (in this case, the 'import' at the beginning of the line) but I've never found a way to phrase it that works. Here it is:&lt;br /&gt;&lt;br /&gt;.*ObjectName\&amp;^\(import\)\@!&lt;br /&gt;&lt;br /&gt;This matches any line meeting the following two constraints:&lt;br /&gt;   1) contains anything (.*) followed by ObjectName&lt;br /&gt;   2) starts (^) with something which isn't 'import' (\(import\)\@!)&lt;br /&gt;&lt;br /&gt;the \@! says, match if the preceding atom does not match here -- since we put ^\(import\) this means match when the first thing in the line isn't import.&lt;br /&gt;&lt;br /&gt;There may be better ways to do this, but it's the first I've found and I'm using it like crazy now...  Enjoy!&lt;br /&gt;&lt;br /&gt;Thanks Chris!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-2981966692746321359?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/2981966692746321359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=2981966692746321359' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2981966692746321359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2981966692746321359'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/09/vimgrep-without-object-names.html' title='Vimgrep Without Object Names'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7372730326178871005</id><published>2008-09-12T05:17:00.000-07:00</published><updated>2008-09-12T05:40:01.255-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='highlight'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='inside'/><category scheme='http://www.blogger.com/atom/ns#' term='question'/><category scheme='http://www.blogger.com/atom/ns#' term='insert'/><title type='text'>Question: Highlight From Insert?</title><content type='html'>Iyo writes:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;"I offten do some coding in Vim and I miss an feature that will highlight&lt;br /&gt;the word I`m writing in that moment and other same words. (It is mainly&lt;br /&gt;for variables - sometimes I switched letters and  afterwards I`m looking&lt;br /&gt;for mistake for a quite long time. The NetBeans IDE has a feature like this.&lt;br /&gt;&lt;br /&gt;I know about * but it`s for search in the text. I`m looking for something that work automaticly in insert mode."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Answer:&lt;br /&gt;&lt;br /&gt;You can use ctrl-o from inside of insert mode to enter a command, but to me typing ctrl-o * while I'm hammering out some code feels awfully cumbersome. There's also the negative side-effect that * jumps forward, so you'd lose cursor position, which would assuredly interrupt workflow. Instead, I'd just define a simple mapping along the lines of the following.&lt;br /&gt;&lt;br /&gt;imap &amp;lt;F2&amp;gt; &amp;lt;Esc&amp;gt;#*A&lt;br /&gt;&lt;br /&gt;So, you're inside insert mode, you just typed a word, and you want to match all occurrences. You would simply hit F2, and it would backward match the word nearest the cursor. This has the negative side effect of jumping backwards; thereby, losing cursor position. To compensate, we add a * to jump forward followed by "A" to return to insert mode and insure you're at the end of the line. Obviously, you can substitute any keybinding you want for F2.&lt;br /&gt;&lt;br /&gt;This seems to work well on my machine; although, there might be more optimal solutions. If anybody has one, feel free to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7372730326178871005?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7372730326178871005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7372730326178871005' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7372730326178871005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7372730326178871005'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/09/question-highlight-from-insert.html' title='Question: Highlight From Insert?'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-2513998269336995195</id><published>2008-09-11T07:17:00.001-07:00</published><updated>2008-09-12T09:16:57.190-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pager'/><category scheme='http://www.blogger.com/atom/ns#' term='each'/><category scheme='http://www.blogger.com/atom/ns#' term='highlight'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='rows'/><category scheme='http://www.blogger.com/atom/ns#' term='question'/><category scheme='http://www.blogger.com/atom/ns#' term='alternating'/><title type='text'>Got a Question?</title><content type='html'>I had a reader of Daily Vim contact me yesterday about the possibility of periodically submitting questions regarding Vim best practices, etc. I told him that I'm very happy to assist in answering questions any Daily Vim readers might have but if I don't know the answer, I'll post the question here anyway, so someone smarter than me can ;-).&lt;br /&gt;&lt;br /&gt;So, if you have a question regarding Vim, Linux, scripting or something along those lines, feel free to post them under this thread or email me directly via tinymountain at gmail dot com. I'll post the question and possibly an answer to the blog, and as usual, feedback is welcome.&lt;br /&gt;&lt;br /&gt;To kick things off, I have a question of my own. Does anybody know of a Vim plugin or some method to spontaneously highlight every other line of a file? I frequently use Vim as a pager inside of MySQL, and this would be very handy for eyeballing all the values on a specific row.&lt;br /&gt;&lt;br /&gt;UPDATE:&lt;br /&gt;&lt;br /&gt;I solved this problem thanks in part to an initial suggestion to use syntax highlighting to perform the highlighting. Here's my finished solution. It seems to have issues with language files with pre-existing syntax highlighting, but for it's intended purpose (use within the mysql pager), it works beautifully. Just do "pager /usr/bin/vim -R -" inside the mysql client, add the code to your vimrc, run a query and hit F2.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;hi AlternateLine ctermfg=grey ctermbg=darkblue&lt;br /&gt;&lt;br /&gt;function! HiLine(lineno)&lt;br /&gt;    let tmpline = escape(getline(a:lineno), '/\[]')&lt;br /&gt;    exec 'syn match AlternateLine /.*' . tmpline . '.*/'&lt;br /&gt;endfunction&lt;br /&gt;&lt;br /&gt;function! DoHighlight()&lt;br /&gt;  global /^/if line('.')%2|call HiLine(line('.'))&lt;br /&gt;  normal 1G&lt;br /&gt;endfunction&lt;br /&gt;&lt;br /&gt;map &amp;lt;F2&amp;gt; :call DoHighlight()&amp;lt;cr&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__iSTMw6favA/SMqTeGaKC-I/AAAAAAAAAYk/3sRuWaKaT4s/s1600-h/Screenshot-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/__iSTMw6favA/SMqTeGaKC-I/AAAAAAAAAYk/3sRuWaKaT4s/s400/Screenshot-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5245166861352045538" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-2513998269336995195?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/2513998269336995195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=2513998269336995195' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2513998269336995195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/2513998269336995195'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/09/got-question.html' title='Got a Question?'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__iSTMw6favA/SMqTeGaKC-I/AAAAAAAAAYk/3sRuWaKaT4s/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6637736252081011583.post-7490599533509746316</id><published>2008-09-11T07:13:00.000-07:00</published><updated>2008-09-11T07:16:39.944-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='file'/><category scheme='http://www.blogger.com/atom/ns#' term='percentage'/><category scheme='http://www.blogger.com/atom/ns#' term='jump'/><title type='text'>Jump to Percent of File</title><content type='html'>Sometimes you don't know the exact line you want to go to in a file, but you can infer an approximate percentage. I was browsing a 200 meg logfile with Vim yesterday and guestimated the area of interest was about 10% back from where I was at (85%). You can easily jump to a desired percentage in a file by typing in the percentage followed by a percent symbol.&lt;br /&gt;&lt;br /&gt;Jump to 50% of the file:&lt;br /&gt;&lt;br /&gt;50%&lt;br /&gt;&lt;br /&gt;Easy to remember to say the least ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6637736252081011583-7490599533509746316?l=dailyvim.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dailyvim.blogspot.com/feeds/7490599533509746316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6637736252081011583&amp;postID=7490599533509746316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7490599533509746316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6637736252081011583/posts/default/7490599533509746316'/><link rel='alternate' type='text/html' href='http://dailyvim.blogspot.com/2008/09/jump-to-percent-of-file.html' title='Jump to Percent of File'/><author><name>Travis Whitton</name><uri>http://www.blogger.com/profile/14592647486468034166</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://2.bp.blogspot.com/__iSTMw6favA/SKRZVI-XWkI/AAAAAAAAAYc/6xWMySJqLN4/s1600-R/willie.jpg'/></author><thr:total>0</thr:total></entry></feed>
