These vimrc posts are not always very useful. Actually, it should be reminded that each line in vimrc may have bad side-effects. It may increase Vim instance loading time, and increase editing footprint, or slowdown processes like highlighting and scrolling.<p>Moreover, and probably worse, each specific configuration increases the distance between your daily Vim-fu and the one you'll have to use on another user or another machine. And these occasions have been, in my experience, those when great Vim-fu was the most critical (eg. trying to keep your hand on a dying server on a flooded connection, or showing off your skills on your boss's Mac during plane trip). All this holds for bashrc too. The closest to the default is the best, to some extent.<p>I take vimrc posts as good occasions to proofread mine and remove all unused stuff. I just commented out a very weird "set notagbsearch" which was probably killing my <ctrl>-].
I don't have much to add to the thread except for:<p><pre><code> set undofile
</code></pre>
which will allow for persistent undo, i.e. undoing changes even after closing a file.
Insert single characters: Press 's' in normal mode and the next character you type will be inserted at the cursor and put you back in normal. Press 'S' (Capital S or shift+s) and the character will be inserted after the cursor like 'a' append. This is also repeatable, so you can insert a character and then do '5.' to insert it 5 times, still leaving you in normal mode afterwards. Being repeatable is the reasoning I read for it being a function. I picked this up from the Vim wikia site awhile ago.<p><pre><code> " Insert single char (repeatable)
function! RepeatChar(char, count)
return repeat(a:char, a:count)
endfunction
nnoremap <silent> s :<C-U>exec "normal i".RepeatChar(nr2char(getchar()), v:count1)<CR>
nnoremap <silent> S :<C-U>exec "normal a".RepeatChar(nr2char(getchar()), v:count1)<CR>
</code></pre>
Press 'F5' to run the file you're editing, assuming it has a shebang.<p><pre><code> " Run current file if it has a shebang
function! <SID>CallInterpreter()
if match(getline(1), '^\#!') == 0
let l:interpreter = getline(1)[2:]
exec ("!".l:interpreter." %:p")
else
echohl ErrorMsg | echo "Err: No shebang present in file, canceling execution" | echohl None
endif
endfun
map <F5> :call <SID>CallInterpreter()<CR>
</code></pre>
I don't actually use this one a lot, but it can be handy. F10 to switch between the line numbering modes, in Vim versions that have relative line numbering (>= 7.3)<p><pre><code> " Toggle line numbering modes
" Default to relativenumber in newer vim, otherwise regular numbering
if v:version >= 703
set relativenumber
let s:relativenumber = 0
function! <SID>ToggleRelativeNumber()
if s:relativenumber == 0
set number
let s:relativenumber = 1
elseif s:relativenumber == 1
set relativenumber
let s:relativenumber = 2
else
set norelativenumber
let s:relativenumber = 0
endif
endfunction
map <silent><F10> :call <SID>ToggleRelativeNumber()<CR>
else
set number
endif</code></pre>
This is an <i>ugly</i> hack I came up with to layout my windows how I like them. I have NERDTree and Taglist in a horizontally split window to the left and MiniBufExplorer across the top of the screen. See <a href="http://yfrog.com/h7sg7fp" rel="nofollow">http://yfrog.com/h7sg7fp</a><p><pre><code> autocmd VimEnter * call<SID>LayoutWindows()
function! s:LayoutWindows()
execute 'NERDTree'
let nerdtree_buffer = bufnr(t:NERDTreeBufName)
execute 'wincmd q'
execute 'Tlist'
execute 'wincmd h'
execute 'split'
execute 'b' . nerdtree_buffer
let mbe_window = bufwinnr("-MiniBufExplorer-")
if mbe_window != -1
execute mbe_window . "wincmd w"
execute 'wincmd K'
endif
execute 'resize +20'
execute 'wincmd l'
endfunction</code></pre>
Managed using the "homesick" command-line utility to propagate changes to all my working machines:<p><a href="https://github.com/Pewpewarrows/dotfiles/blob/master/home/.vimrc" rel="nofollow">https://github.com/Pewpewarrows/dotfiles/blob/master/home/.v...</a>
It's a shame that SO doesn't allow these types of questions anymore. They are very useful for beginners who want to know how experienced users actually use the tool.<p>The fact that they cannot be answered objectively doesn't make them less useful, and contrary to what is stated in the FAQ, the question and answers model is perfectly suited to this type of question.
I'm not sure how many man-hours were lost to fatfingering :wq as :Wq or :w as :W, but a simple alias has solved that particular bit of grief:<p><pre><code> cnoreabbrev Wq wq
cnoreabbrev W w
</code></pre>
The rest of my .vimrc mostly belongs to the guy I caught the vim addiction from, but sets some useful defaults: <a href="https://github.com/duggan/dotfiles/blob/master/.vimrc" rel="nofollow">https://github.com/duggan/dotfiles/blob/master/.vimrc</a>
I work with multiple files a lot, so I'm always navigating between split screens and across buffers.<p><pre><code> " Split windows/multiple files
" use <Ctrl>+s to split the current window
nmap <C-S> <C-W>s
" use <Ctrl>+j/<Ctrl>+k to move up/down through split windows
nmap <C-J> <C-W>j
nmap <C-K> <C-W>k
" use <Ctrl>+-/<Ctrl>+= to maximise/equalise the size of split windows
nmap <C--> <C-W>_
nmap <C-=> <C-W>=
" use <Ctrl>+h/<Ctrl>+l to move back/forth through files:
nmap <C-L> :next<CR>
nmap <C-H> :prev<CR>
</code></pre>
Note these use the same 'hjkl' navigation keys.
The most important thing I've learnt recently regarding Vim config is Pathogen. <a href="https://github.com/tpope/vim-pathogen" rel="nofollow">https://github.com/tpope/vim-pathogen</a><p>With it it's much easier to keep plugins separate and encourages putting your own tweaks in custom plugins.
generally speaking, this .vimrc is most core config file that had a most use for me, been messing around with it before, and finally i use janus carl and huda <a href="https://github.com/carlhuda/janus" rel="nofollow">https://github.com/carlhuda/janus</a> (had to thanks to them) for their distro of the .vimrc configuration, it include just all what i need for my macvim, it has a good plugins and configurations to where i can start of developments.<p>for others that don't want to mess around with vimrc configs (although its fun)just give it a shot and hopefully, and will happifly accept an contribution<p>git clone git://github.com/carlhuda/janus.git<p>(don't forget to rake it after)
I forked a great vim_config for ruby/rails coding and made a few tweaks of my own.<p><a href="https://github.com/wallace/vim_config" rel="nofollow">https://github.com/wallace/vim_config</a>
This is one of my favorite bits from my .vimrc. It lets you use !find with location list:<p><pre><code> function! g:Find(...)
let subexpr = 'substitute(v:val, ".*", "\"&\" 0: found", "")'
let found = join(map(split(system('find ' . join(a:000, ' ')), '\n'), subexpr), "\n")
exec 'lgete "' fnameescape(found) '" | lop'
endfunction
command! -nargs=+ Find call g:Find(<f-args>)
</code></pre>
The :Find command above passes its arguments to `find`.<p>I use splits heavily, and these mappings for navigating and resizing splits are indispensable:<p><pre><code> nnoremap <C-K> <C-W>k
nnoremap <C-J> <C-W>j
nnoremap <C-H> <C-W>h
nnoremap <C-L> <C-W>l
nnoremap _ 3<C-W><LT>
nnoremap + 3<C-W>></code></pre>
Interesting bits:<p>make sure I'm scrolling visual lines, not real lines<p><pre><code> noremap j gj
noremap k gk
</code></pre>
ctrl+l/h for changing tabs<p><pre><code> noremap <C-l> gt
noremap <C-h> gT
</code></pre>
Search improvements:<p><pre><code> set incsearch
set hlsearch
</code></pre>
Best theme ever (very objective of course):<p><pre><code> let g:inkpot_black_background = 1
colors inkpot
</code></pre>
Making sure tmp files are stored in only one location, not all around the system:<p><pre><code> if ! isdirectory(expand('~/vimtmp'))
call mkdir(expand('~/vimtmp'))
endif
if isdirectory(expand('~/vimtmp'))
set directory=~/vimtmp
else
set directory=.,/var/tmp,/tmp
endif</code></pre>
<p><pre><code> nnoremap \ta <Esc>:tab ball<CR>
</code></pre>
Now you can run `vim foo bar baz` and then when open just type `\ta` and it will open them cleanly in three different tabs. Why they renamed a command "tab ball" I will never know.
I made a little convention of marking 's' and 'd' as the top and bottom of a range of lines. Then I define several handy utilities like:<p><pre><code> " Shift-Alt-Z #-comment range 's,'d
inoremap <S-A-z> <Esc>:'s,'ds/^/#/g<CR>:noh<CR>
inoremap ^[Z <Esc>:'s,'ds/^/#/g<CR>:noh<CR>
noremap <S-A-z> :'s,'ds/^/#/g<CR>:noh<CR>
noremap ^[Z :'s,'ds/^/#/g <CR>:noh<CR>
onoremap <S-A-z> <C-c>:'s,'ds/^/#/g<CR>:noh<CR>
onoremap ^[Z <C-c>:'s,'ds/^/#/g<CR>:noh<CR></code></pre>
<p><pre><code> " Automagically save files when focus is lost
autocmd BufLeave,FocusLost silent! wall
" Highlight whitespace at the end of a line
highlight ExtraWhitespace ctermbg=Black guibg=Black
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
" Disable man key
nnoremap K <nop></code></pre>
While the flexibility and portability of Vim is quite attractive, I doubt I could really retrain myself to use the modal interface. Are there packages/scripts/whatever that would allow one to use Vim in the way that one would use a more "normal" text editor?
My favourite two lines (found in another .vimrc long time ago).<p><pre><code> set switchbuf=useopen,usetab
</code></pre>
Files opened from buffer if exists. Handy for command-t plugin.<p><pre><code> autocmd BufReadPost * normal `"
</code></pre>
Remembers the cursor position of files.
I go with whatever the default is. I've logged on to hundreds of *nix machines in just the past few years, and it's completely not worth the effort to try and maintain a concurrent configuration.
from those answers:<p><pre><code> nore ; :
nore , ;
</code></pre>
Do this now. Probably not the vimrc line that has saved me the most time... but definitely saved me the most pinky pain.
I map semicolon to <Esc>, and ctrl-l to insert a semicolon in insert mode.<p><Esc> is one of the most frequent commands, no reason it should be on one of the farthest keys.
See also: <a href="http://stackoverflow.com/questions/154097/whats-in-your-emacs" rel="nofollow">http://stackoverflow.com/questions/154097/whats-in-your-emac...</a>