User Tools

Site Tools


vim

This is an old revision of the document!


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 newlines). 
"       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
vim.1332526352.txt.gz · Last modified: 2020/08/10 02:29 (external edit)