• Like
Vim Hacks
Upcoming SlideShare
Loading in...5
×

Vim Hacks

  • 49,190 views
Uploaded on

Vim Hacks @ COSCUP

Vim Hacks @ COSCUP

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
49,190
On Slideshare
0
From Embeds
0
Number of Embeds
53

Actions

Shares
Downloads
2,053
Comments
22
Likes
259

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. VIM Hacks Why Vim Vim c9s / Cornelius AIINK.com
  • 2. It doesn’t matter
  • 3. It does matter
  • 4. ...
  • 5. Microsoft Visual Studio
  • 6. Eclipse
  • 7. Code Block
  • 8. Notepad++
  • 9. ....
  • 10. ....
  • 11.
  • 12. • • IDE , Editor
  • 13. • • IDE , Editor • XXX Editor ..
  • 14. • • IDE , Editor • XXX Editor .. • ....
  • 15. Microsoft Windows ...
  • 16. GEdit
  • 17. Emacs
  • 18. TextMate
  • 19. VIM
  • 20. #!/usr/bin/env perl my $hppiness = COS::CUP();
  • 21. #!/usr/bin/env perl my $hppiness = COS::CUP(); Oops! “a”
  • 22. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 23. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 24. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 25. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 26. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 27. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 28. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 29. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 30. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 31. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 32. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 33. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 34. #!/usr/bin/env perl my $hppiness = COS::CUP(); xN
  • 35. #!/usr/bin/env perl my $hppiness = COS::CUP();
  • 36. #!/usr/bin/env perl my $happiness = COS::CUP();
  • 37. #!/usr/bin/env perl my $happiness = COS::CUP(); ?
  • 38. #!/usr/bin/env perl my $happiness = COS::CUP(); ?
  • 39. The VIM way...
  • 40. VIM: #!/usr/bin/env perl my $hppiness = COS::CUP(); F h
  • 41. VIM: #!/usr/bin/env perl my $happiness = COS::CUP(); a ppend a
  • 42. VIM
  • 43. VIM
  • 44. IDE
  • 45. ...
  • 46. ...
  • 47. !!!
  • 48. !!! !!!
  • 49. VIM
  • 50. VI Improved
  • 51. Learning Curve
  • 52. Vim
  • 53. Vim • Vim
  • 54. Vim • Vim • gVim
  • 55. Vim • Vim • gVim • gVim Easy
  • 56. Vim • Vim • gVim • gVim Easy • MacVim
  • 57. Vim • Vim • gVim • gVim Easy • MacVim • Vi in Emacs
  • 58. Vim • Vim • gVim • gVim Easy • MacVim • Vi in Emacs • Vi in Bash
  • 59. Vim • Vim • gVim • gVim Easy • MacVim • Vi in Emacs • Vi in Bash • etc ...
  • 60. Features
  • 61. 1. Mode
  • 62. INSERT NORMAL VISUAL SELECT ... et cetera
  • 63. ESC [Ii]NSERT NORMAL [Vv]ISUAL
  • 64. 1.1 Normal Mode
  • 65. Motion
  • 66. HJKL ←↓↑→
  • 67. # comments ... foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; } sub func1 { }
  • 68. # comments ... foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; Cursor } sub func1 { }
  • 69. # comments ... foreach my $foo ( @bar ) { # [{ my @outs = grep /pattern/ , @list; } sub func1 { }
  • 70. # comments ... foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; } f@ sub func1 { }
  • 71. # comments ... foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; } $ sub func1 { }
  • 72. # comments ... foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; } ^ sub func1 { }
  • 73. # comments ... H foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; } sub func1 { }
  • 74. # comments ... foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; M } sub func1 { }
  • 75. # comments ... foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; } sub func1 { } L
  • 76. # comments ... foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; } sub func1 { }
  • 77. # comments ... foreach my $foo ( @bar ) { # my @outs = grep } C Insert mode sub func1 { }
  • 78. # comments ... foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; } sub func1 { }
  • 79. # comments ... foreach my $foo ( @bar ) { # my @outs = grep /pattern/ , @list; } % sub func1 { }
  • 80. :h motion.txt
  • 81. 1.2 Insert Mode
  • 82. Editing text
  • 83. Insert Mode • i : Insert text before the cursor
  • 84. Insert Mode • i : Insert text before the cursor • I : Insert text before the first non-blank in the line
  • 85. Insert Mode • i : Insert text before the cursor • I : Insert text before the first non-blank in the line • a : Append text after the cursor
  • 86. Insert Mode • i : Insert text before the cursor • I : Insert text before the first non-blank in the line • a : Append text after the cursor • A : Append text at the end of the line
  • 87. 1.3 Visual Mode
  • 88. Select region
  • 89. Visual Mode • v : start Visual mode per character.
  • 90. Visual Mode • v : start Visual mode per character. • V : start Visual mode linewise.
  • 91. Visual Mode • v : start Visual mode per character. • V : start Visual mode linewise. • Ctrl-v : start Visual mode blockwise.
  • 92. Visual Mode • v : start Visual mode per character. • V : start Visual mode linewise. • Ctrl-v : start Visual mode blockwise. operator y (yank) , d (delete) , c (change) ... etc
  • 93. 2. Syntax Highlight Support
  • 94. /opt/local/share/vim/vim72 $ ls -1 syntax/ | wc -l 520
  • 95. Syntax
  • 96. ~/.vim/syntax/[filetype].vim
  • 97. ~/.vim/syntax/[filetype].vim syn match [id] [re] [options]
  • 98. ~/.vim/syntax/[filetype].vim syn match [id] [re] [options] syn region [id] start=[re] end=[re]
  • 99. ~/.vim/syntax/[filetype].vim syn match [id] [re] [options] syn region [id] start=[re] end=[re] syn keyword [id] [keyword] ...
  • 100. ~/.vim/syntax/[filetype].vim syn match [id] [re] [options] syn region [id] start=[re] end=[re] syn keyword [id] [keyword] ... hi [id] guibg=[color] ctermfg=[color]
  • 101. :help syntax.txt
  • 102. 3. ENCODING
  • 103. :set fencs=utf-8,gbk,big5,euc-jp,utf-16le :set fenc=utf-8 enc=utf-8 tenc=utf-8
  • 104. :set fencs=utf-8,gbk,big5,euc-jp,utf-16le :set fenc=utf-8 enc=utf-8 tenc=utf-8
  • 105. Vim :set fencs=utf-8,gbk,big5,euc-jp,utf-16le :set fenc=utf-8 enc=utf-8 tenc=utf-8
  • 106. :set fencs=utf-8,gbk,big5,euc-jp,utf-16le :set fenc=utf-8 enc=utf-8 tenc=utf-8
  • 107. :set fencs=utf-8,gbk,big5,euc-jp,utf-16le :set fenc=utf-8 enc=utf-8 tenc=utf-8
  • 108. :set fencs=utf-8,gbk,big5,euc-jp,utf-16le :set fenc=utf-8 enc=utf-8 tenc=utf-8 Terminal
  • 109. :help encoding
  • 110. 4. Key Mapping
  • 111. :map :nmap :vmap :imap :smap :xmap ... more
  • 112. :map (all) :nmap (normal mode) :vmap (visual mode) :imap (insert mode) :smap (select mode) :xmap (visual , select mode) ... more
  • 113. :map (all) :nmap (normal mode) :vmap (visual mode) :imap (insert mode) :smap (select mode) :xmap (visual , select mode) ... more
  • 114. :nmap <C-c><C-c> :!gcc -Wall % -o %:r.out<CR> Ctrl C Ctrl C GCC .out
  • 115. Normal Mode Tab Shift-Tab nmap <tab> v> nmap <s-tab> v< vmap <tab> >gv vmap <s-tab> <gv
  • 116. nmap <tab> v> nmap <s-tab> v< vmap <tab> >gv vmap <s-tab> <gv Visual/Select Mode Tab Shift-Tab
  • 117. nmap <tab> v> nmap <s-tab> v< When mappings and menus are defined with the |:vmap| or |:vmenu| command they work vmap <tab> >gv both in Visual mode and in Select mode. When these are used in Select mode Vim vmap <s-tab> <gv automatically switches to Visual mode, so that the same behavior as in Visual mode is effective. Visual/Select Mode Tab Shift-Tab
  • 118. imap <F2> <C-R>=strftime("%c")<CR> Insert Mode F2
  • 119. cmap <c-a> <home> cmap <c-e> <end> cnoremap <c-b> <left> cnoremap <c-d> <del> cnoremap <c-f> <right> cnoremap <c-n> <down> cnoremap <c-p> <up> cnoremap <esc><c-b> <s-left> cnoremap <esc><c-f> <s-right> Command Mode Bash Key Binding
  • 120. :h map.txt
  • 121. 5. TEXT OBJECT
  • 122. Text Object • word • string ⇛ action • paragraph (yank,delete,change ...etc) • block
  • 123. Operator Mapping v|c|d i|a { | [ | ( |“ |‘ visual Region change Inner Object {} delete An Object [] () ““ Operator ‘‘
  • 124. va{
  • 125. function ( blah , blah ) ci( function ( ) function ( new_args )
  • 126. “Hello World” di” “” “Hello New World”
  • 127. 6. TAB PAPGES
  • 128. :tabnew
  • 129. :tabnew :tabedit path/to/file
  • 130. :tabnew :tabedit path/to/file :tabfind path/to/file
  • 131. :help tabpage.txt
  • 132. 7. FOLDS
  • 133. FOLD IS
  • 134. Fold Methods
  • 135. Fold Methods Syntax Fold
  • 136. Fold Methods Syntax Fold :set foldmethod=syntax $VIMRUNTIME/syntax/*.vim
  • 137. Perl : /opt/local/share/vim/vim72/syntax/perl.vim if exists("perl_want_scope_in_variables") “ ..... if exists("perl_extended_vars") “ ..... if exists("perl_fold") “ ..... .vimrc (Fold) let perl_fold = 1 let perl_extended_vars = 1 “ .... etc
  • 138. Fold Methods Syntax Fold Marker Fold
  • 139. Fold Methods Syntax Fold Marker Fold :set foldmethod=marker “{{{“ “}}}”
  • 140. # fold this {{{ function do_something { echo “COSCUP”; } # }}}
  • 141. Fold Methods Syntax Fold Marker Fold Indent Fold
  • 142. Fold Methods Syntax Fold Marker Fold Indent Fold :set foldmethod=indent
  • 143. Fold Methods Syntax Fold Marker Fold Indent Fold Manual Fold
  • 144. :set foldmethod=manual zf
  • 145. autocmd BufWinLeave *.* silent mkview autocmd BufWinEnter *.* silent loadview autocmd mkview , loadview ~/.vim/view/
  • 146. Fold Methods Syntax Fold Marker Fold Indent Fold Manual Fold Expr Fold (Custom Fold Function)
  • 147. :set foldexpr=MyFoldLevel(v:lnum)
  • 148. Fold Methods Syntax Fold Marker Fold Indent Fold Manual Fold Expr Fold (Custom Fold Function) Diff Fold
  • 149. 8.Modeline & FileType
  • 150. ModeLine
  • 151. " vim:fdm=marker:sw=2:ts=2:et:fdl=0: "============================ " Author: Cornelius < cornelius.howl{at}gmail{dot}com >
  • 152. " vim:fdm=marker:sw=2:ts=2:et:fdl=0: "============================ " Author: Cornelius < cornelius.howl{at}gmail{dot}com > Marker Tab Fold (Level 0 )
  • 153. FileType
  • 154. ~/.vim/ftplugin/ruby.vim vimrc
  • 155. ~/.vim/filetype.vim filetype.vim
  • 156. 9. FORMATTING
  • 157. :set equalprg=perltidy
  • 158. :set equalprg=perltidy “=” perltidy
  • 159. autocmd Filetype perl :set equalprg=perltidy autocmd equalprg
  • 160. autocmd Filetype c :set equalprg=indent C GNU Ident
  • 161. SQL $ cat bin/sql-beautify.pl #!/usr/bin/env perl use warnings; use strict; use SQL::Beautify; local $/; my $sql = SQL::Beautify->new( query => <STDIN> , spaces => 4 , break => "n" ); print $sql->beautify; autocmd Filetype sql :set equalprg=sql-beautify.pl SQL Filter
  • 162. 10. QuickFix
  • 163. :grep & :make
  • 164. :grep [pattern] [filepath]
  • 165. :grep [pattern] [filepath] grepprg ( vimgrep) grep QuickFix
  • 166. QuickFix Window
  • 167. :set grepprg=/path/to/grep grepprg ( VIM grep)
  • 168. :make
  • 169. :make makeprg ( make) Makefile. compiler output parser
  • 170. :set makeprg=gmake makeprg ( make)
  • 171. Result ⇛ QuickFix Window
  • 172. :copen QuickFix Window
  • 173. :cclose QuickFix Window
  • 174. :cnext Result
  • 175. :cprevious Result
  • 176. QuickFix Window Toggle com! -bang -nargs=? QFix cal QFixToggle(<bang>0) fu! QFixToggle(forced) if exists("g:qfix_win") && a:forced == 0 cclose unlet g:qfix_win else copen 10 let g:qfix_win = bufnr("$") en endf nn <leader>q :QFix<cr>
  • 177. QuickFix Window Toggle com! -bang -nargs=? QFix cal QFixToggle(<bang>0) fu! QFixToggle(forced) if exists("g:qfix_win") && a:forced == 0 cclose unlet g:qfix_win else copen 10 let g:qfix_win = bufnr("$") en endf nn <leader>q :QFix<cr> nmap “q” , <leader> “”
  • 178. 11. Plugin
  • 179. SnipMate TextMate
  • 180. snippet cla class .. initialize .. end class ${1:`substitute(Filename(), '^.', 'u&', '')`} def initialize(${2:args}) ${3} end end
  • 181. DBExt.vim Oracle, Sybase, MSSQL , MySQL, DBI
  • 182. xml.vim XML
  • 183. FuzzyFinder.vim Fuzzy/Partial pattern explorer
  • 184. The_NERD_TREE.vim
  • 185. The NERD Commenter
  • 186. taglist.vim ctags macro , function , variable
  • 187. cscope C
  • 188. autocomplpop.vim
  • 189. MRU most recently used
  • 190. bufexplorer.vim Buffer Explorer
  • 191. Rails.vim
  • 192. git-vim
  • 193. !
  • 194. !
  • 195. Vimana Vim script Manager
  • 196. • Vimball • Archive File ( zip , rar ) • .vim file
  • 197. POWERED BY Perl
  • 198. CPAN Vimana $ cpan Vimana
  • 199. $ vimana search xml
  • 200. $ vimana search xml rrd.vim - Edit RRD data with Vim. qt.vim - tiny tool for the uic used in Qt from Trolltech syntax-for-xul - Highlighting for XML User interface Language. maven2.vim - Compiler plugin for maven2 .... skip
  • 201. script $ vimana info xml.vim
  • 202. xml.vim $ vimana install xml.vim
  • 203. $ vimana install xml.vim $ vimana install rails.vim $ vimana install the-nerd-tree.vim $ vimana install taglist.vim $ vimana install snipmate $ vimana install fuzzyfinder.vim etc ... ALL Works
  • 204. Git Repository http://github.com/c9s/Vimana/tree/master
  • 205. ENJOY
  • 206. Thank You
  • 207. Demo ....
  • 208. Q &A