User Tools

Site Tools


vim

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

vim [2012/03/23 18:12]
k2patel [VIM Scripts]
vim [2020/08/10 02:35]
Line 1: Line 1:
-====== 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. 
-<code bash> 
-:g/^$/d 
-</​code>​ 
-OR 
-<code bash> 
-:g/^ *$/d 
-</​code>​ 
- 
-=== Remove Tailing space as well space at beginning using VI === 
- 
-To remove tailing space 
-<code bash> 
-:%s/\s\+$// 
-</​code>​ 
- 
-To remove space at beginning 
-<code bash> 
-:%s/^\s\+// 
-</​code>​ 
- 
-=== Replace tab with space === 
- 
-To replace tab with space you need to use 
-<code bash> 
-:​%s/​[CTRL-i]/​ /g 
-</​code>​ 
- 
-=== Delete Line start with === 
- 
-To delete lines start with some word e.g. Redirect ​ 
-<code bash> 
-:​g/​^Redirect/​d 
-</​code>​ 
- 
-=== Remove Dos / Windows carriage-return === 
- 
-To remove Carriage return in vi use following 
-<code bash> 
-:%s/^M//g 
-</​code>​ 
-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 
-<code bash> 
-:​%s/​\([a-z]\)/​\u\1/​g 
-</​code>​ 
-To convert lower case use following 
-<code bash> 
-:​%s/​\([A-Z]\)/​\l\1/​g 
-</​code>​ 
- 
-==== Match Start of line Append End of line ==== 
- 
-To Match Start of line and append that line use following\\ 
-(search Append end of line) 
-<code bash> 
-%g/​^DocumentRoot/​s/​$/​\/​www/​ 
-</​code>​ 
- 
-Which append "/​www"​ if start of line is "​DocumentRoot"​. 
- 
-Also you can append after word by following. 
- 
-<code bash> 
-%s/​word/&​test/​g 
-</​code>​ 
- 
-So all word is get replaced by "​wordtest"​. 
- 
- 
-==== Saving file as root ==== 
-At some point you would like to save file as root. 
- 
-<code bash> 
-:w !sudo tee % 
-</​code>​ 
- 
- 
-==== Marking ==== 
-<code vim> 
-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 
-</​code>​ 
- 
-==== Editing ==== 
-<code vim> 
-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 
-</​code>​ 
- 
-==== Handling ==== 
-<code txt> 
-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 
-</​code>​ 
- 
- 
-==== Play with Buffers ==== 
-<code txt> 
-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 
-</​code>​ 
- 
-===== 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` 
-<code bash> 
-:source /​home/​yahoo/​test.vim 
-</​code>​ 
-You can also call command from script directly 
-<code bash> 
-:call MyBackupFunc(expand('​%'​),​ { '​all':​1,​ '​save':'​recent'​}) 
-</​code>​ 
-You can do mapping of the keyboard using the variables. 
-<code bash> 
-:nmap ;s :source /​home/​yahoo/​test.vim<​CR>​ 
-</​code>​ 
-The key sequence `;s` will execute the specified script file\\ 
-You can call fucntion using the stored mapping same way. 
-<code bash> 
-:nmap \b :call MyBackupFunc(expand('​%'​),​ { '​all':​ 1 })<​CR>​ 
-</​code>​ 
-To call the function you need to call enter squence `\b` 
- 
-=== syntax highlighting === 
-VIM support syntax highlighting. to turn it on. 
-<code bash> 
-:syntax on 
-</​code>​ 
-to turn it off 
-<code bash> 
-:syntax off 
-</​code>​ 
- 
-=== VIM Variable / Initialization (.vimrc) === 
-OR 
-=== You can use .exrc === 
- 
-== toggle syntax highlighting == 
-<code bash> 
-function! ToggleSyntax() 
-   if exists("​g:​syntax_on"​) 
-      syntax off 
-   else 
-      syntax enable 
-   endif 
-endfunction 
- 
-nmap <​silent> ​ ;s  :call ToggleSyntax()<​CR>​ 
-</​code>​ 
-`;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 == 
-<code bash> 
-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>​ 
-</​code>​ 
-single backslash used for continuation marker 
-<code bash> 
-call SetName( 
-\             ​first_name,​ 
-\             ​middle_initial,​ 
-\             ​family_name 
-\           ) 
-</​code>​ 
-Also you can use "​|"​ to write two line on singe line. 
-<code bash> 
-echo "​Starting..."​ | call Phase(1) | call Phase(2) | echo "​Done"​ 
-</​code>​ 
-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. 
-<code bash> 
-echo "> " |"​Print generic prompt 
-</​code>​ 
-=== Defining variable === 
-to define variable you need to use word `let` 
- 
-<code bash> 
-let name = "​Damian"​ 
-let height = 165 
-let interests = [ '​Cinema',​ '​Literature',​ 'World Domination',​ 101 ] 
-let phone     = { '​cell':​5551017346,​ '​home':​5558038728,​ '​work':'?'​ } 
-</​code>​ 
- 
-    *  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 === 
-<code bash> 
-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. 
-</​code>​ 
- 
- 
-==== Basic Info ==== 
-== Variable scoping == 
-<code text> 
-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 
-</​code>​ 
-== pseudovariables == 
-<code text> 
-& 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 
-</​code>​ 
  
vim.txt ยท Last modified: 2020/08/10 02:35 (external edit)