This is an old revision of the document!
Table of Contents
VIM
There's an old joke that Emacs would be a great operating system if only it had a decent text editor,
whereas vi would be a great text editor if only it had a decent operating system.
File Cleaning
Remove Blank line from the file
to remove blank lines please use following.
:g/^$/d
OR
:g/^ *$/d
Remove Tailing space as well space at beginning using VI
To remove tailing space
:%s/\s\+$//
To remove space at beginning
:%s/^\s\+//
Replace tab with space
To replace tab with space you need to use
:%s/[CTRL-i]/ /g
Delete Line start with
To delete lines start with some word e.g. Redirect
:g/^Redirect/d
Remove Dos / Windows carriage-return
To remove Carriage return in vi use following
:%s/^M//g
NOTE : to create “^M” use “Ctrl+v Ctrl+M” Regular ^M does not help.
Convert all character to lower OR upper case
NOTE : This will apply to whole file as we are using (%)
To convert upper case use following
:%s/\([a-z]\)/\u\1/g
To convert lower case use following
:%s/\([A-Z]\)/\l\1/g
Match Start of line Append End of line
To Match Start of line and append that line use following
(search Append end of line)
%g/^DocumentRoot/s/$/\/www/
Which append “/www” if start of line is “DocumentRoot”.
Also you can append after word by following.
%s/word/&test/g
So all word is get replaced by “wordtest”.
Saving file as root
At some point you would like to save file as root.
:w !sudo tee %
Marking
mk - record current location as mark k (redefines any previous mark k) 'k - return to line of mark k `k - return to mark k d'k - delete to line of mark k d`k - delete to mark k c'k - change text to line of mark k c`k - change text to mark k "ay'd - yank text into buffer a from cursor through line of mark d
Editing
o - open a new line above cursor(*) O - open a new line below cursor(*) i - insert text ahead of cursor(*) I - insert text at the beginning of the line(*) a - append text after the cursor(*) A - append text at the end of the line(*) c$ - change to end of the line (*) d$ - delete to end of the line C - same as c$ (*) D - same as d$ cG - change to end of the file (*) dG - delete to end of the file c0 - change to beginning of file (*) d0 - delete to beginning of file cc - change line (*) dd - delete line c'm - change from cursor through mark m (*) d'm - delete from cursor through mark m 3cc - change 3 lines (*) 3dd - delete 3 lines 8cw - change next 8 words (*) 8dw - delete next 8 words R - overwrite current line, starting at cursor(*) r - replace character at cursor s - substitute for character at cursor (*) 8s - substitute for next 8 characters (*) S - substitute for entire line (*) J - join two lines together . - repeats previous edit command xp - transpose two characters easESC - add a plural, and go back to command mode
Handling
h - move to the left CTL-f - change display forward a page j - `jump` down a line CTL-b - change display back a page k - move up a line CTL-d - change display down half a page l - move to the right CTL-u - change display up half a page - - same as k CTL-y - shift display down on screen + - same as j CTL-e - shift display up on screen e - move to the end of a word z. - recenter display around cursor w - move forward to the beginning of a word z- - recenter display so cursor is at top b - move backward to the beginning of a word z+ - recenter display aso cursor is at bottom $ - move to the end of the line zCR - recenter display so cursor is at top 0 - move to the beginning of the line 'm - move to the beginning of the line of mark m ^ - move to the beginning of the line `m - move to the location of mark m G - move to the end of the file ) - move forward 1 sentence H - move to the top of the display ( - move back 1 sentence M - move to the middle of the display } - move forward 1 paragraph L - move to the bottom of the display { - move back 1 paragraph B - move back to previous blank space 20| - go to 20th character in the line E - move ahead to next blank space CTL-L - clear and redraw B - move back to previous blank space CR - same as j CTL-G - print current location in the file :22 - move to line 22 6w - move forward 6 words 6b - move backward 6 words 8+ - move down 8 lines
Play with Buffers
yy - yank current line to unnamed buffer "j8yy - yank 8 lines into buffer j 19yy - yank next 19 lines to unnamed buffer "J8YY - append the next 8 lines into buffer j p - put unnamed buffer contents after cursor p - recover previous edit P - put unnamed buffer contents before cursor "1p - recover 2nd previous edit 19dd - delete next 19 lines, and put them in unnamed buffer "7p - recover 8th previous edit "bp - put the contents of buffer p into current file :11,14 ya w - yank lines 11 through 14 into buffer w :94 pu w - put contents of buffer w after line 94
VIM Scripts
Introduction to vim scripts “:help vim-script-intro”
Running Vim scripts
There is many way to run vim script simple way is to run calling script from `source`
:source /home/yahoo/test.vim
You can also call command from script directly
:call MyBackupFunc(expand('%'), { 'all':1, 'save':'recent'})
You can do mapping of the keyboard using the variables.
:nmap ;s :source /home/yahoo/test.vim<CR>
The key sequence `;s` will execute the specified script file
You can call fucntion using the stored mapping same way.
:nmap \b :call MyBackupFunc(expand('%'), { 'all': 1 })<CR>
To call the function you need to call enter squence `\b`
syntax highlighting
VIM support syntax highlighting. to turn it on.
:syntax on
to turn it off
:syntax off
VIM Variable / Initialization (.vimrc)
OR
You can use .exrc
toggle syntax highlighting
function! ToggleSyntax() if exists("g:syntax_on") syntax off else syntax enable endif endfunction nmap <silent> ;s :call ToggleSyntax()<CR>
`;s` sequence to flip syntax highlighting on or off every time typed when you're in Normal mode.
nmap stands for “normal-mode key mapping”.
<silent> option causes the mapping not to echo any command it's executing.
Creating centered titles
function! CapitalizeCenterAndMoveDown() s/\<./\u&/g "Built-in substitution capitalizes each word center "Built-in center command centers entire line +1 "Built-in relative motion (+1 line down) endfunction nmap <silent> \C :call CapitalizeCenterAndMoveDown()<CR>
single backslash used for continuation marker
call SetName( \ first_name, \ middle_initial, \ family_name \ )
Also you can use “|” to write two line on singe line.
echo "Starting..." | call Phase(1) | call Phase(2) | echo "Done"
You can comment using single quote, as double quote used to define a string.
also you can use “|” to escape the comment in some cases.
echo "> " |"Print generic prompt
Defining variable
to define variable you need to use word `let`
let name = "Damian" let height = 165 let interests = [ 'Cinema', 'Literature', 'World Domination', 101 ] let phone = { 'cell':5551017346, 'home':5558038728, 'work':'?' }
- scalar: a single value, such as a string or a number. For example: “Damian” or 165
- list: an ordered sequence of values delimited by square brackets, with implicit integer indices starting at zero. For example: ['Cinema', 'Literature', 'World Domination', 101]
- dictionary: an unordered set of values delimited by braces, with explicit string keys. For example: {'cell':5551017346, 'home':5558038728, 'work':'?'}
Sample .vimrc
set number " show line number set nocompatible " This setting prevents vim from emulating the original vi's bugs and limitations. set autoindent set smartindent " The first setting tells vim to use "autoindent" (that is, use the current line's indent level to set the indent level of new lines). The second makes vim attempt to intelligently guess the indent level of any new line based on the previous line, assuming the source file is in a C-like language. Combined, they are very useful in writing well-formatted source code. set tabstop=4 set shiftwidth=4 " I prefer 4-space tabs to 8-space tabs. The first setting sets up 4-space tabs, and the second tells vi to use 4 spaces when text is indented (auto or with the manual indent adjustmenters.) set showmatch " This setting will cause the cursor to very briefly jump to a brace/parenthese/bracket's "match" whenever you type a closing or opening brace/parenthese/bracket. I've had almost no mismatched-punctuation errors since I started using this setting. set guioptions-=T " I find the toolbar in the GUI version of vim (gvim) to be somewhat useless visual clutter. This option gets rid of the toolbar. set vb t_vb= " This setting prevents vi from making its annoying beeps when a command doesn't work. Instead, it briefly flashes the screen -- much less annoying. set ruler " This setting ensures that each window contains a statusline that displays the current cursor position. set nohls " By default, search matches are highlighted. I find this annoying most of the time. This option turns off search highlighting. You can always turn it back on with :set hls. set incsearch " With this nifty option, vim will search for text as you enter it. For instance, if you type /bob to search for bob, vi will go to the first "b" after you type the "b," to the first "bo" after you type the "o," and so on. It makes searching much faster, since if you pay attention you never have to enter more than the minimum number of characters to find your target location. Make sure that you press Enter to accept the match after vim finds the location you want. "set virtualedit=all " By default, vim doesn't let the cursor stray beyond the defined text. This setting allows the cursor to freely roam anywhere it likes in command mode. It feels weird at first but is quite useful. " Type :help options within vim to get a complete list of options. highlight Comment ctermfg=green " Comments are shown in a brightgreen color which is visible clearly as against a dark blue which is annoyingly hard to read to read, at least to me.
Basic Info
Variable scoping
g: varname The variable is global s: varname The variable is local to the current script file w: varname The variable is local to the current editor window t: varname The variable is local to the current editor tab b: varname The variable is local to the current editor buffer l: varname The variable is local to the current function a: varname The variable is a parameter of the current function v: varname The variable is one that Vim predefines
pseudovariables
& varname A Vim option (local option if defined, otherwise global) &l: varname A local Vim option &g: varname A global Vim option @ varname A Vim register $ varname An environment variable