Vim get start_1.0

3,498 views

Published on

vim的入门教程,欢迎讨论。

Published in: Technology
1 Comment
5 Likes
Statistics
Notes
  • cool
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
3,498
On SlideShare
0
From Embeds
0
Number of Embeds
1,723
Actions
Shares
0
Downloads
57
Comments
1
Likes
5
Embeds 0
No embeds

No notes for slide

Vim get start_1.0

  1. 1. --- 龙浩 技术部:龙浩 Twitter : hoorace 版本: V1.0
  2. 2. 来自? Vim 作者: Bram Moolenaar ( http://www.moolenaar.net/ ) http://en.wikipedia.org/wiki/Bram_Moolenaar Vi 作者: Bill Joy 在 sun 工作时间 1982-2003 http://en.wikipedia.org/wiki/Bill_Joy
  3. 3. Why Vim ? 速度 定制性 中文支持 无处不在 装逼需要
  4. 4. 键盘图?
  5. 5. 你怎么看? 角度不一样,结果不一样!
  6. 6. Vim 的工作模式 <ul><li>正常模式 (normal) </li></ul><ul><li>插入模式 (insert) </li></ul><ul><li>可视模式 (visual) </li></ul><ul><li>命令行模式( command ) </li></ul><ul><li>选择模式( select ) </li></ul><ul><li>Ex 模式 </li></ul>
  7. 7. 基本命令 <ul><li>vim filename </li></ul><ul><li>i , a , I , A , o ,O </li></ul><ul><li>:w , w! </li></ul><ul><li>:q , :q! , :qa </li></ul><ul><li>Sex </li></ul><ul><li>:! python f:/test.py </li></ul><ul><li>:r! python f:/test.py </li></ul>
  8. 8. 基本移动 <ul><li>h , j , k , l </li></ul><ul><li>Ctrl + d , Ctrl + u </li></ul><ul><li>Ctrl + f , Ctrl + b </li></ul>
  9. 9. 高级移动 <ul><li>0 数字 0 ,不是字母 o , </li></ul><ul><li>^ , $ , gg , G , % </li></ul><ul><li>w , W , e , E , H , M , L </li></ul><ul><li>n| , :n </li></ul><ul><li>( , ) , { , } , [ , ] </li></ul><ul><li>zt , zb , zz </li></ul>
  10. 10. 高级移动 <ul><li>gg , ggdG , ggvG , ggyG </li></ul><ul><li>Ctrl + i, Ctrl + o </li></ul>
  11. 11. 标记 <ul><li>m<letter> </li></ul><ul><li>‘ <letter> </li></ul><ul><li>`<letter> </li></ul><ul><li>‘ .   跳转到上次修改的标记行 </li></ul><ul><li>`. 跳转到上次修改标记处 </li></ul><ul><li>`` 两个位置切换 </li></ul><ul><li>m` 跳到任何地方, `` 返回 </li></ul>提示: Ctrl + o , Ctrl + I 是操作历史的前进返回,不是跳转。
  12. 12. 编辑 <ul><li>i , a , o , I , A , O </li></ul><ul><li>J , %j , 5J </li></ul><ul><li>dd , dw , D , 6dd </li></ul><ul><li>x , 3x </li></ul><ul><li>yw , yy , p , P </li></ul><ul><li>ciw , ci”, ci( , cc </li></ul>
  13. 13. 修改, 还原 <ul><li>r , R </li></ul><ul><li>U, u </li></ul><ul><li>Ctrl + r </li></ul>
  14. 14. 查找,替换 <ul><li>/ , ? , * , # </li></ul><ul><li>n 或 N </li></ul><ul><li>:s/p1/p2/geci #g 表示整行替换, c 表示询问, i 表示忽略大小写 , e 不显示 error </li></ul><ul><li>:n1,n2s/p1/p2/geci </li></ul><ul><li>:%s/p1/p2/geci </li></ul>
  15. 15. 列操作 <ul><li>v , V </li></ul><ul><li>Ctrl + v </li></ul><ul><li>Textmate 风格多列插入:命令状态 Ctrl-shift-v 选择列, shift-i 插入,结束后用 <esc> </li></ul>
  16. 16. 简单重排 <ul><li><< , >> </li></ul><ul><li>ce(nter) , ri(ght) , le(ft) </li></ul><ul><li>gqap # 整段重排 </li></ul><ul><li>gqq # 本行重排 </li></ul><ul><li>gqQ # 全文重排 </li></ul><ul><li>gq3q # 重排三行 </li></ul><ul><li>gq2ap # 重排兩個段落 </li></ul>
  17. 17. 文本对象 <ul><li>aw, aW - ambient word or WORD (see docs) </li></ul><ul><li>iw, iW - inner word or WORD (see docs) </li></ul><ul><li>as, is - ambient or inner sentence </li></ul><ul><li>ap, ip - ambient or inner paragraph </li></ul><ul><li>a{, i{ - whole {..} block or text inside it </li></ul><ul><li>a(, i( - whole (..) block or just text inside it </li></ul><ul><li>a<, i< - whole <..> block or just text inside it </li></ul><ul><li>a[ , a ] , a” , a’, a` , i”, i’, i` </li></ul>还记得 ciw 么? daw , yaw
  18. 18. 视窗操作 <ul><li>Ctrl+w n 即 :new 。开启一个新视窗 </li></ul><ul><li>Ctrl+w s 即 :sp(lit) ,左右切分视窗 </li></ul><ul><li>Ctrl+w f 开启一个新视窗,编辑鼠标所在处 word 为文件名的文件。 </li></ul><ul><li>Ctrl+w q 即 :q 结束分割出来的视窗 </li></ul><ul><li>Ctrl+w o 即 :only! 鼠标所在视窗为唯一视窗 </li></ul><ul><li>Ctrl+w j 移至下个视窗 </li></ul><ul><li>Ctrl+w k 移至上个视窗, hjkl 的方式 </li></ul>split 水平切屏 vsplit 垂直切屏
  19. 19. 自动化 <ul><li>Ctrl - N , Ctrl - p # 自动补全 </li></ul><ul><li>Ctrl - E , Ctrl - Y # 复制前后一行的字符 </li></ul><ul><li>Ctrl - X , Ctrl - K # 字典补全 </li></ul><ul><li>Ctrl - X , Ctrl - L # 整行补全 </li></ul><ul><li>Ctrl-X Ctrl-N  # 根据当前文件里关键字补全   </li></ul><ul><li>Ctrl-X Ctrl-T # 根据同义词字典补全 </li></ul><ul><li>Ctrl-X Ctrl-I # 根据头文件内关键字补全   </li></ul><ul><li>Ctrl-X Ctrl-] # 根据标签补全   </li></ul><ul><li>Ctrl-X Ctrl-F # 补全文件名   </li></ul><ul><li>Ctrl-X Ctrl-D # 补全宏定义   </li></ul>
  20. 20. 自动化 Remap< Tab > “ Insert <Tab> or complete identifier “ if the cursor is after a keyword character function MyTabOrComplete() let col = col('.')-1 if !col || getline('.')[col-1] !~ 'k' return &quot;<tab>&quot; else return &quot;<C-N>&quot; endif endfunction inoremap <Tab> <C-R>=MyTabOrComplete()<CR>
  21. 21. 折叠 (*) <ul><li>zf , zc , zC , zo , zO , zj , zk , [z , ]z </li></ul><ul><li>zd , zD , zE </li></ul><ul><li>zR , zM </li></ul>set fdm=***** manual # 手工定义折叠 indent # 更多的缩进表示更高级别的折叠 expr # 用表达式来定义折叠 syntax # 用语法高亮来定义折叠 diff # 对没有更改的文本进行折叠 marker # 对文中的标志折叠
  22. 22. Shell 命令 <ul><li>:! , :!! , @: , </li></ul><ul><li>:sh(ell) </li></ul><ul><li>:r !command , :r ! ls </li></ul><ul><li>n,nw !command </li></ul>
  23. 23. 标签页 <ul><li>:tabnew aa.txt </li></ul><ul><li>:tabp , :tabn </li></ul>修改相关配置 &quot; shift tab pages map <S-Left> :tabp<CR> map <S-Right> :tabn<CR>
  24. 24. 基本设置 <ul><li>文件放在 ~/.vim 文件夹中 </li></ul><ul><li>filetype plugin on, filetype indent on </li></ul>
  25. 25. .vimrc 设置 <ul><li>set nocompatible &quot; choose no compatibility with legacy vi </li></ul><ul><li>syntax enable </li></ul><ul><li>set fileencoding=utf-8,usc-bom,gbk </li></ul><ul><li>set showcmd &quot; display incomplete commands </li></ul><ul><li>filetype plugin indent on &quot; load file type plugins + indentation </li></ul><ul><li>set number </li></ul><ul><li>set cursorline </li></ul><ul><li>set history=1000 </li></ul>
  26. 26. .vimrc 设置 <ul><li>&quot;&quot; Whitespace </li></ul><ul><li>set nowrap &quot; don't wrap lines </li></ul><ul><li>set tabstop=4 shiftwidth=4 &quot; a tab is two spaces (or set this to 4) </li></ul><ul><li>set expandtab &quot; use spaces, not tabs (optional) </li></ul><ul><li>set backspace=indent,eol,start &quot; backspace through everything in insert mode </li></ul>
  27. 27. .vimrc 设置 <ul><li>&quot;&quot; Searching </li></ul><ul><li>set hlsearch &quot; highlight matches </li></ul><ul><li>set incsearch &quot; incremental searching </li></ul><ul><li>set ignorecase &quot; searches are case insensitive... </li></ul><ul><li>set smartcase &quot; ... unless they contain at least one capital letter </li></ul>
  28. 28. 正则 <ul><li> </li></ul><ul><li>{n,m} </li></ul><ul><li>^$ </li></ul><ul><li>:g/^[<Space><Tab>]*$/d </li></ul><ul><li>%s/aa/bb/g </li></ul>
  29. 29. 键盘映射 <ul><li>< Esc > Esc 键 </li></ul><ul><li>< Tab > Tab 键 </li></ul><ul><li>< Home > Home 键 </li></ul><ul><li>< Del > Del 键 </li></ul><ul><li>< CR > Enter 键 </li></ul><ul><li>< Enter > Enter 键,和上面的相同 </li></ul><ul><li>< LT > 就是 < ,在和 < 字元本身会有混淆、疑义时使用。也可以使用 < </li></ul><ul><li>< BS > Backspace 倒退键 </li></ul><ul><li>< Up > PageUp 向上翻页键 </li></ul><ul><li>< F5 > F5 功能键 </li></ul><ul><li>< CG > Ctrl+G 键 </li></ul>
  30. 30. 键盘映射 <ul><li>v map 仅在反白模式时作用, Visual mode 。 </li></ul><ul><li>n map 仅在常态模式时作用, Normal mode 。 </li></ul><ul><li>i map 仅在插入模式时作用, Insert mode 。 </li></ul><ul><li>o map 仅在操作等待模式时作用, Operator-pending mode 。 </li></ul><ul><li>c map 仅在命令列模式时作用, Command-line mode 。 </li></ul>
  31. 31. 键盘映射 <ul><li>imap <C-tab> :tabnext<CR> </li></ul><ul><li>nmap <C-tab> :tabnext<CR> </li></ul><ul><li>imap <C-S-tab> :tabprevious<CR> </li></ul><ul><li>nmap <C-S-tab> :tabprevious<CR> </li></ul><ul><li>imap <M-1> <Esc>:tabfirst<CR> </li></ul>
  32. 32. 高级功能 <ul><li>缓冲区 </li></ul><ul><li>自动命令 </li></ul><ul><li>Ptags , Ctags </li></ul>
  33. 33. 案例: Python 编码环境搭建 <ul><li>./configure --with-features=huge --enable-pythoninterp=yes </li></ul><ul><li>vim 的 autoload 下面存在 pythoncomplete.vim 这个文件 </li></ul><ul><li>.vimrc 中添加记录: </li></ul><ul><li>1. filetype plugin on </li></ul><ul><li>2. autocmd FileType python set omnifunc=pythoncomplete#Complete </li></ul><ul><li>此时, 按下 Ctrl+x, Ctrl+o , 就能看到提示列表框,以及对应的 docstring , Ctrl+n, Ctrl+p 来上下选择, ESC 来取消提示框。 </li></ul>
  34. 34. 经验 <ul><li>动手才是最关键的 , 熟能生巧! </li></ul><ul><li>有些东西需要死记硬背! </li></ul><ul><li>有一个量子跳跃期! </li></ul>
  35. 35. 参考资料 <ul><li>http://www.vim.org </li></ul><ul><li>http://edt1023.sayya.org/vim/node1.html </li></ul><ul><li>http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects </li></ul><ul><li> http://edyfox.codecarver.org/html/_vimrc.html </li></ul><ul><li>http://www.slideshare.net/ZendCon/vim-for-php-programmers-presentation </li></ul><ul><li>  http://www.moolenaar.net/habits.pdf </li></ul><ul><li> https://github.com/tpope </li></ul>
  36. 36. Q&A 个人一小步,产品一大步!

×