User Tools

Site Tools


vim

Differences

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

Link to this comparison view

vim [2012/09/26 16:27]
k2patel [Handling]
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. 
- 
-==== vi cheat-sheet ==== 
- 
-<code text> 
-a. cursor movements (items below are sometimes called objects): 
-        h - left one character 
-        l - right one character 
-        j - down one line 
-        k - up one line 
-        w - right one word 
-        b - back one word 
-        $ - to the end of line 
-        0 - to the beginning of the line 
-        ) - right one sentence 
-        ( - left one sentence 
-        } - right one paragraph 
-        { - left one paragraph 
-        Ctrl-F - forward one page 
-        Ctrl-B - back one page 
-        G - go to (without arguments, go to end of file) 
-b. deleting: 
-        d - delete 
-                then add one of the cursor movement symbols to 
-                show what should be deleted, i.e.: 
-                d$ - delete to end of line 
-                d0 - delete to the beginning of the line 
-                d} - delete to the end of paragraph 
-        dd - delete delete (delete the whole line) 
-        x - delete character cursor is on 
-c. other basic commands: 
-        r - replace one character 
-        ZZ - save and exit (hold down shift and press "​z"​ twice) 
-        y - yank (copy into temporary buffer) 
-                then add cursor movement symbol to show what should be 
-                copied, for example: y) - copy to the end of sentence 
-        Y - yank line cursor is on 
-        p - paste below cursor line (deleted or copied text) 
-        P - paste above cursor line 
-        u - undo last editing command 
-        /sometext - search for "​sometext"​ 
-d. any command can take numeric argument before the name of "​object",​ i.e.: 
-        5dd - delete 5 lines beginning with cursor line (or) d5d - same 
-        2dw - delete two words (or) d2w - delete two words 
-        c3w - change 3 words 
-        3Ctrl-B - move up three pages 
-        1G - go to the first line 
-e. external commands can be performed on the selected text (in lines) 
-   if command is started with "​!",​ i.e.: 
-        !}fmt - reformat paragraph to 72 columns 
-f. command line (sometimes called "ex mode"​):​ 
-        : 
-g. from the command line a "​set"​ command can be executed to  
-   ​customize editing environment,​ i.e.: 
-        :set all - will show the state of all options 
-        :set number - will show on the screen numbers of all lines 
-        :set autoindent ​  // obvious 
-h. from the command line operations can be performed on the range of lines, 
-   i.e.: 
-        :18,24 del - delete from line 18 to line 24 
-        :23,48 copy 17 - block from line 23 to 48 copy to line 17 
-        :2,17 move 92 - block from line 2 to 17 move to line 92 
-i. from the command line any external UNIX command can be performed on  
-   the range of lines if line range is superseded by "​!":​ 
-        :11,16! sed -e "​s/​^/​\/​\*/"​ -e "​s/​$/​\*\//"​ 
-                (the command above wraps the block of text with 
-                 "​C"​ style comments - /* text */.  It can be done 
-                  easier, but this is an example) 
-        :14,19! sort -r +3 
-                (sort the table in reverse order by fourth column) 
-j. file manipulation from the command line: 
-        :r somefile - read in "​somefile"​ 
-        :x - save and exit (if file is "Read Only", this command will 
-                exit without saving) 
-        :wq - write and quit (same as above) 
-        :w - write (save) if the file permissions allow it 
-        :w! - save file even if it is read-only as long as we own it 
-        :w somefile - save this file as "​somefile"​ 
-        :q - quit without saving 
-        :q! - quit without saving if changes were made 
-k. text input commands (all require "​Esc"​ to terminate): 
-        i - insert text before the character cursor is on 
-        I - insert text at the beginning of the line 
-        a - append (insert text after the character cursor is on) 
-        A - append text to the end of the line 
-        c - change (replace previous text with new one) 
-                takes arguments just like the delete command - it is 
-                a fast and powerful way of changing original text - 
-                much more so than typical "​overwrite"​ 
-        R - start overwriting text 
-        o - start entering text at the beginning of the new line 
-            below the cursor 
-        O - start entering text at the beginning of the new line 
-            above the cursor 
-l. if in doubt, press "​Esc"​ 
-</​code>​ 
- 
-[[http://​www.infobound.com/​vi.html | Ref.]] 
-==== 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 
-gg - move to the beginning 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. 
- 
- 
-:set nu ts=4 sw=4 shiftround ignorecase smartcase 
-" let perl_fold=1 
-:​colorscheme elflord 
-" to set the title of the window where you are working 
- 
-:set title 
-:auto BufEnter * let &​titlestring = hostname() . ":"​ . expand("​%:​p"​) 
-:auto BufEnter * let &​titleold = hostname() . ":"​ . getcwd() 
- 
-:set statusline+=%f\ 
-:set smartindent 
-:set expandtab 
-:set tabstop=4 
- 
- 
-:set ruler 
-:set nowrap 
-:set incsearch 
- 
-:au Syntax pl   ​source ~/​.vim/​test.vim 
-:au Syntax pm   ​source ~/​.vim/​test.vim 
-:au Syntax pod  source ~/​.vim/​test.vim 
-:au Syntax lib  source ~/​.vim/​test.vim 
- 
-":set foldmethod=indent 
-":set foldlevel=0 
- 
-</​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)