SlideShare uma empresa Scribd logo
1 de 77
Baixar para ler offline
VIM入门与进阶
潘魏增@美团网
世界上的程序员有三种:一种用vim, 一
种用emacs,剩余的是其它。
关于我
• 了解接触vim 8年
关于我
• 了解接触vim 8年
• 完全用vim工作 3年
关于我
• 了解接触vim 8年
• 完全用vim工作 3年
• editplus
 dreamweaver
 visual studio
 eclipse
 vim
• vim.prototype = new vi();
  vim是vi文本编辑器的扩展版本

• 1976年大神Bill Joy开发了vi,给程序员世
  界带来了火种

• 1991年大牛Bram Moolenaar在vi基础上开
  发了vim
• vim.prototype = new vi();
  vim是vi文本编辑器的扩展版本

• 1976年大神Bill Joy开发了vi,给程序员世
  界带来了火种

• 1991年大牛Bram Moolenaar在vi基础上开
  发了vim
• vim.prototype = new vi();
  vim是vi文本编辑器的扩展版本

• 1976年大神Bill Joy开发了vi,给程序员世
  界带来了火种

• 1991年大牛Bram Moolenaar在vi基础上开
  发了vim
• vim.prototype = new vi();
  vim是vi文本编辑器的扩展版本

• 1976年大神Bill Joy开发了vi,给程序员世
  界带来了火种

• 1991年大牛Bram Moolenaar在vi基础上开
  发了vim
• vim.prototype = new vi();
  vim是vi文本编辑器的扩展版本

• 1976年大神Bill Joy开发了vi,给程序员世
  界带来了火种

• 1991年大牛Bram Moolenaar在vi基础上开
  发了vim
最大的优点
最大的优点



速度
其他优点

• 强大的定制性
其他优点

• 强大的定制性
• 性感到让人欲罢不能的配色
其他优点

• 强大的定制性
• 性感到让人欲罢不能的配色
• 无限精彩 触手可及
VIM入门与进阶
VIM入门与进阶
远观确实很复杂
模式

• normal 普通模式
• insert 插入模式
• command 命令行模式
• visual 可视模式
基本命令


• vi a.txt
• vimdiff a.txt b.txt
基本命令
• :w, :x, :w !sudo tee %
• :q, :qa, :q!
• :e a.txt, tabe a.txt
   :sp a.txt, :vsp a.txt
• :Sex
• :r!date, :r!git diff
移动

• h, j, k, l
• ^, $, %, f, F, t, T, f-;, F-;
• H, M, L
• zz, zt, zb

                                  :h motion.txt
移动


• Ctrl-D, Ctrl-U
• Ctrl-F, Ctrl-B


                        :h motion.txt
移动
• gg, G, ggvG, ggdG, ggyG
• gd #goto declaration
• gf #goto file Ctrl-^
• gi #go to last edited location
• gv #reselect last visual selection
• ‘. #jump back to last edited line
                                       :h motion.txt
移动

• Ctrl-] #go to tag match
• Ctrl-O #go back jump history
• Ctrl-I #go forward jump history

                                    :h motion.txt
移动

• Ctrl-W, Ctrl-W-H/K/J/L
• Ctrl-WR #swap window
• Ctrl-W= #resize
• Ctrl-WS #split window
• Ctrl-WV #vsplit window
                           :h motion.txt
编辑

• dw, dd, D
• yw, yy, p, P
• r, R
• o, O, i, I, a, A, s, S, c, C

                                 :h index.txt
编辑

• u, Ctrl-R
• J, :%j
•=
• >>, <<, :retab
• gu, gU, ~
                        :h index.txt
编辑

• v,V,V-:!sort #选择
• Ctrl-V # 列操作
• Ctrl-V-I-Esc-Esc

                     :h index.txt
编辑

• Ctrl-N, Ctrl-P #自动补全
• Ctrl-E, Ctrl-Y #复制前后一行的字符
• Ctrl-X Ctrl-K #字典补全
• Ctrl-X Ctrl-L #整行补全

                       :h index.txt
搜索

• /, ?, #, *
• n, N
• c 不区分大小写
• C 强制区分大小写
• <, > 匹配单词边界
文件内容搜索


• :grep string -r directory
  :grep DealHelper -r template/deal/
• :cw, cn, cp
替换

• :%s/old/new/g 全局替换
• :'<,'>s/old/new/g 区块替换
• :g/^$/d delete blank lines
• :g/^/m0 reverse whole file
• :'<,'>g/^$/d
文本对象

• dit, dat, di’, di”, di(, dip, di{
• yit, yat, yi’....
• vit, vat, vi’

                                      :h text-objects
折叠


• zo, zc, zO, zC, zR, zM


                           :h folding
标签页

• tabe filename
• gt, gT
• set showtabline=2
• nmap <C-N> :tabnext<CR>
  nmap <C-P> :tabprevious<CR>


                                :h tabpage.txt
缓冲区


• :ls, b1...9, bn, bp
• :cd, pwd


                        :h buffer-hidden
寄存器

• reg
• “1p
• “%p
位置标记

• m{a-zA-Z}
• ‘a, ‘g
• marks

                 :h mark-motions
Ctags

• $ ctags -R
• $ ptags -R
• Ctrl-], Ctrl-O, Ctrl-I
杂项

• :set dictionary=file 设置字典文件
•K
• :sh 启动一个子shell Ctrl-D返回
• :!执行shell命令 :!php -l % :!git diff %
杂项

• set paste 粘帖代码
• set nopaste 停止粘帖代码
• nohl
配置
• 全局配置
 /etc/vimrc
 /usr/share/vim/
• 用户配置
 ~/.vimrc
 ~/.gvimrc
 ~/.vim/
用户配置
• .vimrc        - user settings
  .vim/
    after/      -   loaded at the very end
    autoload/   -   automatically loaded scripts
    colors/     -   custom color schemes
    doc/        -   plugin documentation
    ftdetect/   -   filetype detection scripts
    ftplugin/   -   filetype plugins
    indent/     -   indent scripts
    plugin/     -   plugins
    syntax/     -   syntax scripts
常用设置
• set nocp
• set ru
• set hls
• set is
• set number
• set wildmenu
• set enc=utf-8
常用设置

• set tabstop=4
• set shiftwidth=4
• set softtabstop=4
• set expandtab
• set autoindent
• syntax on
键盘映射

• map <F12> :set number!<CR>
• nmap <C-N> :tabnext<CR>
• nmap <C-P> :tabprevious<CR>
自动命令
• autocmd FileType javascript set makeprg=jsl -
  nologo -nofilelisting -nosummary -nocontext
  -process %
• autocmd FileType javascript set errorformat=%f
  (%l): %m
• autocmd FileType javascript inoremap <silent>
  <F9> <C-O>:make<CR>
• autocmd FileType javascript map <silent>
  <F9> :make<CR>
学习的方法
陡峭的学习曲线
100



 75



 50



 25



  0
VIM入门与进阶
VIM入门与进阶
找一个好老师
VIM入门与进阶
精读手册
VIM入门与进阶
实践出真知
从哪里开始


$ vimtutor
个人哲学
爱Terminal 不爱GUI


• 结合screen和shell,超越IDE的愉悦体验
爱Terminal 不爱GUI


• 结合screen和shell,超越IDE的愉悦体验
• 在本地和服务器之间快速自由切换
爱默认配置 不爱花哨


• 尽量保持一致,避免坠入配置的地狱
爱默认配置 不爱花哨


• 尽量保持一致,避免坠入配置的地狱
• 减少插件依赖,不断尝试内部操作组合
爱VIM 也爱EMACS

• 骑墙派
爱VIM 也爱EMACS

• 骑墙派
• vim and emacs are everywhere
爱VIM 也爱EMACS

• 骑墙派
• vim and emacs are everywhere
• vim:less, slashdot, gmail, firefox, chrome,
  eclipse, visual studio, etc...
爱VIM 也爱EMACS

• 骑墙派
• vim and emacs are everywhere
• vim:less, slashdot, gmail, firefox, chrome,
  eclipse, visual studio, etc...
• emacs:bash, mac, etc...
心得
心得

•   攀爬学习曲线的一次性付出,得到的是更有效编
    写程序的能力
心得

•   攀爬学习曲线的一次性付出,得到的是更有效编
    写程序的能力

•   精力也可以更多地放在设计层面而不是低层次的
    细节操作
心得

•   攀爬学习曲线的一次性付出,得到的是更有效编
    写程序的能力

•   精力也可以更多地放在设计层面而不是低层次的
    细节操作

•   能力可能会暂时倒退,但蹲下来是为了跳得更高
VIM不能保证你成为优
    秀的程序员
VIM不能保证你成为优
    秀的程序员
• 用刘国梁的球拍也不能保证成为冠军
VIM不能保证你成为优
    秀的程序员
• 用刘国梁的球拍也不能保证成为冠军
• 没人会在乎贝多芬用什么钢琴,达芬奇
 用什么画笔
VIM不能保证你成为优
    秀的程序员
• 用刘国梁的球拍也不能保证成为冠军
• 没人会在乎贝多芬用什么钢琴,达芬奇
 用什么画笔

• vim拥有非常务实的工具精神,它本身只
 是一个工具
VIM不能保证你成为优
    秀的程序员
• 用刘国梁的球拍也不能保证成为冠军
• 没人会在乎贝多芬用什么钢琴,达芬奇
 用什么画笔

• vim拥有非常务实的工具精神,它本身只
 是一个工具

• 优秀的程序员是在不断思考和解决问题
 中成长起来的
THANK YOU

• Q&A
• https://github.com/panweizeng/env
• http://en.wikipedia.org/wiki/Lifted_
  (2006_film)

Mais conteúdo relacionado

Mais procurados

Vim 由淺入淺
Vim 由淺入淺Vim 由淺入淺
Vim 由淺入淺hydai
 
Introduce to Linux command line
Introduce to Linux command lineIntroduce to Linux command line
Introduce to Linux command lineWen Liao
 
Git使用入门
Git使用入门Git使用入门
Git使用入门dpf2e
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
 
Return to dlresolve
Return to dlresolveReturn to dlresolve
Return to dlresolveAngel Boy
 
Sigreturn Oriented Programming
Sigreturn Oriented ProgrammingSigreturn Oriented Programming
Sigreturn Oriented ProgrammingAngel Boy
 

Mais procurados (6)

Vim 由淺入淺
Vim 由淺入淺Vim 由淺入淺
Vim 由淺入淺
 
Introduce to Linux command line
Introduce to Linux command lineIntroduce to Linux command line
Introduce to Linux command line
 
Git使用入门
Git使用入门Git使用入门
Git使用入门
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
 
Return to dlresolve
Return to dlresolveReturn to dlresolve
Return to dlresolve
 
Sigreturn Oriented Programming
Sigreturn Oriented ProgrammingSigreturn Oriented Programming
Sigreturn Oriented Programming
 

Semelhante a VIM入门与进阶

Vim+神技 (1)
Vim+神技 (1)Vim+神技 (1)
Vim+神技 (1)Ailsa126
 
Vim hacks
Vim hacksVim hacks
Vim hacksXuYj
 
Vim 神技
Vim 神技Vim 神技
Vim 神技hotoo
 
[3]投影片 futurewad樹莓派研習會 141204
[3]投影片 futurewad樹莓派研習會 141204[3]投影片 futurewad樹莓派研習會 141204
[3]投影片 futurewad樹莓派研習會 141204CAVEDU Education
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Shengyou Fan
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹Shengyou Fan
 
Linux基础
Linux基础Linux基础
Linux基础zhuqling
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdfczzz1
 
C++11综述/新特性描述/Overview of C++11 New Features
C++11综述/新特性描述/Overview of C++11 New FeaturesC++11综述/新特性描述/Overview of C++11 New Features
C++11综述/新特性描述/Overview of C++11 New FeaturesPeien Luo
 
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺宗凡 楊
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺hydai
 
一小時學不會的 Vim
一小時學不會的 Vim一小時學不會的 Vim
一小時學不會的 VimLi Hsuan Hung
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用勇浩 赖
 
郑焕义 重温网站重构
郑焕义 重温网站重构郑焕义 重温网站重构
郑焕义 重温网站重构Webrebuild
 
Reviews of Designing with Web Standards
Reviews of Designing with Web StandardsReviews of Designing with Web Standards
Reviews of Designing with Web Standardsavenirzheng
 
Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Marc Huang
 
以Code igniter為基礎的網頁前端程式設計
以Code igniter為基礎的網頁前端程式設計以Code igniter為基礎的網頁前端程式設計
以Code igniter為基礎的網頁前端程式設計Amigo 陳兆祥
 
Emacs入门
Emacs入门Emacs入门
Emacs入门yinhm .
 

Semelhante a VIM入门与进阶 (20)

Vim+神技 (1)
Vim+神技 (1)Vim+神技 (1)
Vim+神技 (1)
 
Vim hacks
Vim hacksVim hacks
Vim hacks
 
Vim 神技
Vim 神技Vim 神技
Vim 神技
 
[3]投影片 futurewad樹莓派研習會 141204
[3]投影片 futurewad樹莓派研習會 141204[3]投影片 futurewad樹莓派研習會 141204
[3]投影片 futurewad樹莓派研習會 141204
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹
 
Linux基础
Linux基础Linux基础
Linux基础
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
 
Vim雕虫小技
Vim雕虫小技Vim雕虫小技
Vim雕虫小技
 
Using vim
Using vimUsing vim
Using vim
 
C++11综述/新特性描述/Overview of C++11 New Features
C++11综述/新特性描述/Overview of C++11 New FeaturesC++11综述/新特性描述/Overview of C++11 New Features
C++11综述/新特性描述/Overview of C++11 New Features
 
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺
 
一小時學不會的 Vim
一小時學不會的 Vim一小時學不會的 Vim
一小時學不會的 Vim
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
郑焕义 重温网站重构
郑焕义 重温网站重构郑焕义 重温网站重构
郑焕义 重温网站重构
 
Reviews of Designing with Web Standards
Reviews of Designing with Web StandardsReviews of Designing with Web Standards
Reviews of Designing with Web Standards
 
Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)Open Street Map安裝指引 (Ubuntu 12.04)
Open Street Map安裝指引 (Ubuntu 12.04)
 
以Code igniter為基礎的網頁前端程式設計
以Code igniter為基礎的網頁前端程式設計以Code igniter為基礎的網頁前端程式設計
以Code igniter為基礎的網頁前端程式設計
 
Emacs入门
Emacs入门Emacs入门
Emacs入门
 

Último

函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptxNCU MCL
 
20200808自營電商平台策略討論
20200808自營電商平台策略討論20200808自營電商平台策略討論
20200808自營電商平台策略討論Jamie (Taka) Wang
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptxNCU MCL
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptxNCU MCL
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxNCU MCL
 
20200727_Insight workstation
20200727_Insight workstation20200727_Insight workstation
20200727_Insight workstationJamie (Taka) Wang
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】黑客 接单【TG/微信qoqoqdqd】
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptxNCU MCL
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxNCU MCL
 

Último (17)

20220113_product_day
20220113_product_day20220113_product_day
20220113_product_day
 
20200602_insight_business
20200602_insight_business20200602_insight_business
20200602_insight_business
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
 
20200808自營電商平台策略討論
20200808自營電商平台策略討論20200808自營電商平台策略討論
20200808自營電商平台策略討論
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
 
20200427_hardware
20200427_hardware20200427_hardware
20200427_hardware
 
20200606_insight_Ignition
20200606_insight_Ignition20200606_insight_Ignition
20200606_insight_Ignition
 
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
 
20200429_software
20200429_software20200429_software
20200429_software
 
20200429_ec
20200429_ec20200429_ec
20200429_ec
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
 
20200607_insight_sync
20200607_insight_sync20200607_insight_sync
20200607_insight_sync
 
20200727_Insight workstation
20200727_Insight workstation20200727_Insight workstation
20200727_Insight workstation
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
 
20210105_量產技轉
20210105_量產技轉20210105_量產技轉
20210105_量產技轉
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
 

VIM入门与进阶