At work today, a client gave me a 1.6gb XML file that I needed to format. Of course they didn't do anything as nice as use line breaks. None, anywhere... Being a hardcore VIM user, I looked up an easy way to sort out the file with indents and tags. Thanks to Justin Kempton I found this: Pretty XML
It works faster then the other VIM plug-ins that I have found and of course is written in easy to modify VIM code.
Showing posts with label Free Toys. Show all posts
Showing posts with label Free Toys. Show all posts
Monday, January 3, 2011
Thursday, November 18, 2010
Vim Tricks and Toys
So after yesterdays rant about VIM and its usages I figured that I should talk about some of the toys that I use with VIM that I love.
- Spell check
- Completion
- Auto-completion
- Surround
- Ack
- Ruby Compiler
- Ctags
- Omni Completion
- Nerd Tree
- Fuzzy Finder
- NERD Commenter
- Command T
- Vicle
Yep, list I know. The configuration that goes with it is surprisingly short. God knows that the spell check plug-in is one of the most important to me, considering I spell about as well as a third grader. Auto-completion is brilliant as long as you know how to use it. There are some similar plug-ins that provide language specific shortcuts. These are pretty slick as long as you make sure you are using the one for your current programming language. Using the Perl one with Ruby has interesting results.
There are also a few things that you can do without changing your configuration file. One of the nice ones is
:! irb -r
it executes irb from inside of VIM. Makes testing changes on the fly easy. Also makes it very quick to run commands like
:! script/console generate migration
Right after that you can refresh your NERDTree and keep working.
Here is my vimrc.
Enjoy
- Spell check
- Completion
- Auto-completion
- Surround
- Ack
- Ruby Compiler
- Ctags
- Omni Completion
- Nerd Tree
- Fuzzy Finder
- NERD Commenter
- Command T
- Vicle
Yep, list I know. The configuration that goes with it is surprisingly short. God knows that the spell check plug-in is one of the most important to me, considering I spell about as well as a third grader. Auto-completion is brilliant as long as you know how to use it. There are some similar plug-ins that provide language specific shortcuts. These are pretty slick as long as you make sure you are using the one for your current programming language. Using the Perl one with Ruby has interesting results.
There are also a few things that you can do without changing your configuration file. One of the nice ones is
:! irb -r
it executes irb from inside of VIM. Makes testing changes on the fly easy. Also makes it very quick to run commands like
:! script/console generate migration
Right after that you can refresh your NERDTree and keep working.
Here is my vimrc.
"Before merge of files these existed
set cf " Enable error files & error jumping.
set clipboard+=unnamed " Yanks go on clipboard instead.
set history=256 " Number of things to remember in history.
set autowrite " Writes on make/shell commands
set timeoutlen=250 " Time to wait after ESC (default causes an annoying delay)
set nocp
set cinoptions=:0,p0,t0
set cinwords=if,else,while,do,for,switch,case
set formatoptions=tcqr
set cindent
set autoindent
set smarttab
set expandtab
set wrap
" Visual
set showmatch " Show matching brackets.
set mat=5 " Bracket blinking.
set list
" Show $ at end of line and trailing space as ~
set lcs=tab:\ \ ,eol:$,trail:~,extends:>,precedes:<
"set novisualbell " No blinking .
set noerrorbells " No noise.
set laststatus=2 " Always show status line.
" -----------------------------------------------------------------------------
" | VIM Settings |
" | (see gvimrc for gui vim settings) |
" | |
" | Some highlights: |
" | jj = Very useful for keeping your hands on the home row |
" | ,n = toggle NERDTree off and on |
" | |
" | ,f = fuzzy find all files |
" | ,b = fuzzy find in all buffers |
" | ,p = go to previous file |
" | |
" | hh = inserts '=>' |
" | aa = inserts '@' |
" | |
" | ,h = new horizontal window |
" | ,v = new vertical window |
" | |
" | ,i = toggle invisibles |
" | |
" | enter and shift-enter = adds a new line after/before the current line |
" | |
" | :call Tabstyle_tabs = set tab to real tabs |
" | :call Tabstyle_spaces = set tab to 2 spaces |
" | |
" | Put machine/user specific settings in ~/.vimrc.local |
" | CTAGS C-] - go to definition |
" | C-T - Jump back from the definition. |
" | C-W C-] - Open the definition in a horizontal split |
" | C-\ - Open the definition in a new tab |
" | A-] - Open the definition in a vertical split |
" |
" | After the tags are generated. You can use the following keys to tag into and tag out of functions:
" |
" | Ctrl-Left_MouseClick - Go to definition |
" | Ctrl-Right_MouseClick - Jump back from definition |
"
set nocompatible " We're running Vim, not Vi!
"Set Mapping to ,
"**********************************************************
let mapleader = ","
imap jj "Use jj as escape .. Eaiser?
" Tabs ************************************************************************
"set sta " a in an indent inserts 'shiftwidth' spaces
function! Tabstyle_tabs()
" Using 4 column tabs
set softtabstop=4
set shiftwidth=4
set tabstop=4
set noexpandtab
autocmd User Rails set softtabstop=4
autocmd User Rails set shiftwidth=4
autocmd User Rails set tabstop=4
autocmd User Rails set noexpandtab
endfunction
function! Tabstyle_spaces()
" Use 2 spaces
set softtabstop=2
set shiftwidth=2
set tabstop=2
set expandtab
endfunction
call Tabstyle_spaces()
set ts=2 " Tabs are 2 spaces
set bs=2 " Backspace over everything in insert mode
set shiftwidth=2 " Tabs under smart indenting
"Ctags and other shortcuts
"***********************************************
map :tab split:exec("tag ".expand(""))
map :vsp :exec("tag ".expand(""))
"Sets the tags directory to look backwards till it finds a tags dir
set tags=tags;/
au BufWritePost *.rb silent! !ctags -a --recurse -f ~/dev/tags/cuttlefish &
"Indenting *******************************************************************
set ai " Automatically set the indent of a new line (local to buffer)
set si " smartindent (local to buffer)
" Scrollbars ******************************************************************
set sidescrolloff=2
set numberwidth=4
" Windows *********************************************************************
set equalalways " Multiple windows, when created, are equal in size
set splitbelow splitright
" Vertical and horizontal split then hop to a new buffer
:noremap v :vsp^M^W^W
:noremap h :split^M^W^W
" Cursor highlights ***********************************************************
set cursorline
"set cursorcolumn
" Searching *******************************************************************
set hlsearch " highlight search
set incsearch " Incremental search, search as you type
set ignorecase " Ignore case when searching
set smartcase " Ignore case when searching lowercase
" Colors **********************************************************************
"set t_Co=256 " 256 colors
set background=dark
syntax on " syntax highlighting
colorscheme ir_black
" Status Line *****************************************************************
set showcmd
set ruler " Show ruler
"set ch=2 " Make command line two lines high
match LongLineWarning '\%120v.*' " Error format when a line is longer than 120
" Line Wrapping ***************************************************************
set nowrap
set linebreak " Wrap at word
"Line Number
"*****************************************
set nu " Line numbers on
" Misc settings ***************************************************************
set backspace=indent,eol,start
set number " Show line numbers
set matchpairs+=<:>
set vb t_vb= " Turn off bell, this could be more annoying, but I'm not sure how
set nofoldenable " Turn off folding
set noerrorbells
" File Stuff ******************************************************************
syntax enable
filetype on " Enable filetype detection
filetype indent on " Enable filetype-specific indenting
filetype plugin on " Enable filetype-specific plugins
"compiler ruby " Enable compiler support for ruby
" Ruby stuff ******************************************************************
compiler ruby " Enable compiler support for ruby
map :!ruby %
" Omni Completion *************************************************************
autocmd FileType html :set omnifunc=htmlcomplete#CompleteTags
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete
" May require ruby compiled in
autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
" Hard to type *****************************************************************
imap uu _
imap hh =>
imap aa @
" Change which file opens after executing :Rails command
" ****************************************
let g:rails_default_file='config/database.yml'
" Insert New Line *************************************************************
map O " awesome, inserts new line without going into insert mode
map o
"set fo-=r " do not insert a comment leader after an enter, (no work, fix!!)
" -----------------------------------------------------------------------------
" | Plug-ins |
" -----------------------------------------------------------------------------
" NERDTree ********************************************************************
:noremap n :NERDTreeToggle
let NERDTreeHijackNetrw=1 " User instead of Netrw when doing an edit /foobar
let NERDTreeMouseMode=1 " Single click for everything
" NERD Commenter **************************************************************
let NERDCreateDefaultMappings=0 " I turn this off to make it simple
" Toggle commenting on 1 line or all selected lines. Wether to comment or not
" is decided based on the first line; if it's not commented then all lines
" will be commented
:map c :call NERDComment(0, "toggle")
" CommandT ********************************************************
" To compile:
" cd ~/cl/etc/vim/ruby/command-t
" ruby extconf.rb
" make
let g:CommandTMatchWindowAtTop = 1
map f :CommandT
" fuzzyfinder ********************************************************
" I'm using CommandT for main searching, but it doesn't do buffers, so I'm
" using FuzzyFinder for that
map b :FufBuffer
"let g:fuzzy_ignore = '.o;.obj;.bak;.exe;.pyc;.pyo;.DS_Store;.db'
"
"
Enjoy
Wednesday, November 17, 2010
Vim is Life
If you are a Windows guy, don't bother to keep reading because I am about to go on a rant about development on Linux / Mac. If you are interested, feel free, just a waring.
For those of you still not using VIM as your "IDE," for Ruby development shame on you! Before the TextMate and Emacs fan boys swoop down and kill me, give me a moment to explain my position.
My requirements for a development platform:
1: Free Isn't just good, it is required
In a world where I am dropping a grand or more on a laptop to keep up with the massive amounts of abuse I deal out, a development suite that is free is a must. TextMate users take note, I enjoy TextMate, but have no desier to pay.
2: Compatibility between systems
For the past few years, I have been on a team with mixed operating systems. Macs, Linux (Ubuntu, Fedora, CentOS, Minuix) all of them are in the mix. Switching between pairs for programming requires that we have similar setups, and there for compatible development tools.
3: Bloat is bad, and slow
Current generation IDEs such as RubyMine and NetBeans (with Ruby packages) consume a good chunk of memory and cpu time. This makes them more difficult to run on lower power systems such as VMs or systems pulling double or triple duty. In my case, as with most developers, my development machine is my server, my job box, my queue serer, my poller/ background operations machine, and of course all of the standard office apps one has to run. Allowing my IDE to suck up more then a gigabyte of memory just to load is insanity. Vim and all the plugins I have attached to it, runs in under 256mb. That is right, a quarter of the footprint.
4: Portability is God
The above point brings me to this one. Small is good, small is great, small is powerful. With a development stack that is 256mb, I can now live inside of Minuix. Why? Because now it fits. Load Minuix and Vim on to a USB, now you have a walkabout development environment that fits in your pocket. Going to the girlfriends for the night and need to get some work done? USB and go. No worries about her three year old windows box. Reboot off of the USB and rock some code.
5: Simplicity is power, power is simple
If I am running RubyMine, and my pair is running Emacs, it is almost impossible for us to work on each others systems. Emacs is great, but the level of customization and macros that Emac people seem to run prevent me from taking over the keyboard without spending half the time asking which key does what. This is not something that is worth wile in my opinion. A simple setup is nice. Most of us that have been developing for a while have been exposed to vim for many things. Standard keys for standard activities. All systems that run vim have the same setup. i for insert, escape for command mode, etc. Simple setups allow for simple interaction between pairs.
6: Extensibility
RubyMine comes with everything you need. Or so it claims. In my experience, attempting to get RubyMine to do everything I want it to do becomes an exercise in masochism. You want to run sql from inside of RubyMine? Have fun, you can do it, but its setup is a pain. Just add a MySql, Sqlite3, and an Oracle database to the list of connections and wait for RubyMine to choke itself out. Not fun. Vim has thousands of plugins ready to go that are under active development. I have found everything from typeahead completion, to yaml checkers. Everything you can want you can find. Even found a plugin to do prolog completion.
7: Customization should be optional
I know a few Emacs users that swear by their tool, as they should and more power to them. However, I have issues with a N=1 setup. Emacs seems to attract the type of users that love to customize the setup to the point of obscurity. The user might be blindingly fast at developing on language, but becomes unusable for anything but the intended target. I should not have to customize my development tool in order to use it. Out of the box operation of the tool is valuable to me. I should be able to hop on a brand new install of Nix and use the editor without wondering what happened to my massive list of macros. A simple one line .vimrc file is all you need, and truthfully, it is not even required.
Yea, I know. I am proballly wrong about most of this. But it is my blog, and I needed something to rant about today that wasn't work related.
For those of you still not using VIM as your "IDE," for Ruby development shame on you! Before the TextMate and Emacs fan boys swoop down and kill me, give me a moment to explain my position.
My requirements for a development platform:
1: Free Isn't just good, it is required
In a world where I am dropping a grand or more on a laptop to keep up with the massive amounts of abuse I deal out, a development suite that is free is a must. TextMate users take note, I enjoy TextMate, but have no desier to pay.
2: Compatibility between systems
For the past few years, I have been on a team with mixed operating systems. Macs, Linux (Ubuntu, Fedora, CentOS, Minuix) all of them are in the mix. Switching between pairs for programming requires that we have similar setups, and there for compatible development tools.
3: Bloat is bad, and slow
Current generation IDEs such as RubyMine and NetBeans (with Ruby packages) consume a good chunk of memory and cpu time. This makes them more difficult to run on lower power systems such as VMs or systems pulling double or triple duty. In my case, as with most developers, my development machine is my server, my job box, my queue serer, my poller/ background operations machine, and of course all of the standard office apps one has to run. Allowing my IDE to suck up more then a gigabyte of memory just to load is insanity. Vim and all the plugins I have attached to it, runs in under 256mb. That is right, a quarter of the footprint.
4: Portability is God
The above point brings me to this one. Small is good, small is great, small is powerful. With a development stack that is 256mb, I can now live inside of Minuix. Why? Because now it fits. Load Minuix and Vim on to a USB, now you have a walkabout development environment that fits in your pocket. Going to the girlfriends for the night and need to get some work done? USB and go. No worries about her three year old windows box. Reboot off of the USB and rock some code.
5: Simplicity is power, power is simple
If I am running RubyMine, and my pair is running Emacs, it is almost impossible for us to work on each others systems. Emacs is great, but the level of customization and macros that Emac people seem to run prevent me from taking over the keyboard without spending half the time asking which key does what. This is not something that is worth wile in my opinion. A simple setup is nice. Most of us that have been developing for a while have been exposed to vim for many things. Standard keys for standard activities. All systems that run vim have the same setup. i for insert, escape for command mode, etc. Simple setups allow for simple interaction between pairs.
6: Extensibility
RubyMine comes with everything you need. Or so it claims. In my experience, attempting to get RubyMine to do everything I want it to do becomes an exercise in masochism. You want to run sql from inside of RubyMine? Have fun, you can do it, but its setup is a pain. Just add a MySql, Sqlite3, and an Oracle database to the list of connections and wait for RubyMine to choke itself out. Not fun. Vim has thousands of plugins ready to go that are under active development. I have found everything from typeahead completion, to yaml checkers. Everything you can want you can find. Even found a plugin to do prolog completion.
7: Customization should be optional
I know a few Emacs users that swear by their tool, as they should and more power to them. However, I have issues with a N=1 setup. Emacs seems to attract the type of users that love to customize the setup to the point of obscurity. The user might be blindingly fast at developing on language, but becomes unusable for anything but the intended target. I should not have to customize my development tool in order to use it. Out of the box operation of the tool is valuable to me. I should be able to hop on a brand new install of Nix and use the editor without wondering what happened to my massive list of macros. A simple one line .vimrc file is all you need, and truthfully, it is not even required.
Yea, I know. I am proballly wrong about most of this. But it is my blog, and I needed something to rant about today that wasn't work related.
Subscribe to:
Posts (Atom)