一、Vim 介绍

Vim是一个编辑器。

Vim or Emacs就好比倚天和屠龙,得一可得天下。
Vim就像学钢琴一样,一旦学会,终身受益无穷。

主要使用他来编辑Python、Shell等脚本文件,也可以编辑Java,C/C++。同样可以用他来写markdown、html、css等等。

Vim的优点:

  1. 跨平台(Linux, Mac OS X, Windows)
  2. 配置、安装插件简单(以文件的形式管理)
  3. 小巧、安装方便、开源、免费
  4. 通用性强,支持N(N>40)种编程语言

可能有以下几种声音:

  • Vim过时了,用Vim就是找虐,别装比了,专心学好数据结构与算法吧。
  • 我是Java党,我只用Eclipse,也能安装各种插件。我是.Net党,我喜欢强大的VS,也有牛比的插件(如VC助手)
  • 我是果粉,我喜欢Xcode的优雅,也是免费的,有苹果罩着,LLVM代码补全用着超爽。
  • 我也知道用Vim或者Emacs很强大,但是学习曲线真的很陡,我还是老老实实用我的IDE吧。
  • 我在用TextMate、Notepad++、Sublime text 2,我用着很爽,这些也是神器,我不需要Vim。

其他优秀的编辑器:

  1. Emacs
  2. Sublime Text

在开始之前推荐把Caps Lock 和Ctrl键对换,因为在Linux,Vim,Emacs下面很多快捷键都要用到Ctrl,用了Caps Lock键之后可以用小指很方便的进行操作。
把Home目录下的配置文件都软链接到Dropbox上

二、Vim基本操作

1)三种模式

1. Normal Mode
- 启动Vim后,vim在normal模式下。
- normal模式下可以用hjkl来移动光标,进行一些基本的vim操作。
- 按i,a等键可以进入insert模式。
- 如果想返回 normal模式,请按 ESC 键。
2. Insert Mode
- 在insert mode下,可以输入文本,就像使用“记事本”一样。
3. Visual Mode
- 可以进行一些行、块、选中操作。
> - v 进入visual mode
> - V 进入行选择
> - <C-v> 进入块选择
> 在visual 模式下按o移动端点                         

2)移动光标

1. 基本移动

  • h → 左
  • j → 下
  • k → 上
  • l → 右
  • <C-f> → 向下翻一页
  • <C-b> → 向上翻一页
  • <C-d> → 向下翻半页
  • <C-u> → 向上翻半页
  • gg → 移动到第一行
  • G → 移动到最后一行

可以通过配置来使上下左右键无效

2. 进阶

2.1 行移动

  • 0 → 数字零,到行头
  • ^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
  • $ → 到本行行尾
  • g_ → 到本行最后一个不是blank字符的位置。

2.2 搜索移动

  • /pattern → 搜索 pattern 的字符串(如果搜索出多个匹配,可按n键到下一个,按N到上一个)

    /\ 来搜索单词

  • f\ → 移动到\字符处
  • t\ → 移动到\字符之前

2.3 单词移动

  • w → 移至次一个字(word)字首。当然是指英文单字。
  • W → 同上,但会忽略一些标点符号。
  • e → 移至前一个字字尾。
  • E → 同上,但会忽略一些标点符号。
  • b → 移至前一个字字首。
  • B → 同上,但会忽略一些标点符号。

用最快的速度定位到想要的位置


2.4 行、段移动

  • \G → 移动到\
  • ) → 移至下一个句子(sentence)首。
  • ( → 移至上一个句子(sentence)首。
  • } → 移至下一个段落(paragraph)首。
  • { → 移至上一个段落(paragraph)首。
  • % → 这是匹配 {},[],()

sentence 是以 . ! ? 为区格。
paragraph 是以空白行为区格。

3)插入模式

  • a → 在光标后插入
  • A → 在当前行最后插入
  • i → 在光标前插入
  • I → 在当前航最前插入
  • o → 在当前行后插入一个新行
  • O → 在当前行前插入一个新行

控制撤销的粒度

4)删除

  • x → 删除一个字符
  • X → 向前删除一个字符
  • s → 删除一个字符并进去insert模式
  • S → 删除一行并进入insert模式
  • d\ → 从当前光标位置开始删除
  • dd → 删除一行
  • c\ → 从当前光标位置开始删除并进入insert模式

Vim很多操作都可以在前面加数字

5)复制、粘贴

  • y\ → 从当前光标位置开始复制
  • yy → 复制一行
  • p → 在光标之后粘贴
  • P → 在光标之前粘贴

:reg 进入剪切板,可以看 到当前所有的剪切板里面的内容

  • 系统剪切板
    a 宏剪切板

6)撤销

  • u → 撤消
  • → 反撤消

7)替换

  • r → 替换一个字符
  • R → 从当前光标开始替换

8) Mark

  • `` → 当前文件中上次跳转动作之前的位置
  • `. → 上次修改的地方
  • `^ → 上次插入的地方
  • `[ → 上次修改或复制的起始位置
  • `] → 上次修改或复制的结束位置
  • `< → 上次高亮选区的起始位置
  • `> → 上次高亮选区的结束位置

大写字母可以用来进行全局标记,可以在文件之间跳转


9)打开/保存/退出/改变文件

  • :e <path/to/file> → 打开一个文件
  • :w → 存盘
  • :saveas <path/to/file> → 另存为 <path/to/file>
  • :x, ZZ 或 :wq → 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)
  • :q! → 退出不保存
  • :qa! → 强行退出所有的正在编辑的文件,就算别的文件有更改。

三、Vim配置

用户目录下的.vimrc文件就是Vim针对当前用户的主配置文件,该文件不是必备的,没有的话就创建它。文件位于当前用户的主目录下,可以用~/.vimrc找到,Vim启动时会自动运行文件中的每条命令。
通过.vimrc我们可以为Vim进行个性化配置,包括使用方式、显示风格、编写函数和运行插件等。

  1. 从Insert模式进入到Normal模式
    inoremap jk

    什么是noremap?

  2. 快速移动

    • nnoremap <C-j> 5j
    • nnoremap <C-k> 5k
    • nnoremap <C-l> 5l
    • nnoremap <C-h> 5h
    • vnoremap <C-j> 5j
    • vnoremap <C-k> 5k
    • vnoremap <C-l> 5l
    • vnoremap <C-h> 5h
  3. 强迫自己

    • inoremap <esc> <Nop>
    • noremap <Up> <Nop>
    • noremap <Down> <Nop>
    • noremap <Left> <Nop>
    • noremap <Right> <Nop>
  4. 设置Leader

    • let mapleader = “,”
  5. 选择一个单词

    • nnoremap <space> viw

四、安装插件

1)Vim目录结构

.
├── autoload         # Vim启动时载入的脚本
├── colors           # 存放主题
├── compiler         # 存放编译器需要的文件
├── doc              # 帮助文档
├── ftplugin           # 对不同的文件类型执行不同的脚本 
├── indent           # 缩进的样式
├── keymap           # 映射键
├── lang             # 语言文件
├── plugin           # 插件文件夹
└── tutor            # 教程

2)安装Pathogen来管理插件

  1. 从Github下载Pathogen
    git clone https://github.com/tpope/vim-pathogen

  2. 安装
    安装到 ~/.vim/autoload/pathogen.vim

     mkdir -p ~/.vim/autoload ~/.vim/bundle && \
     curl -LSso ~/.vim/autoload/pathogen.vim \
     https://tpo.pe/pathogen.vim
    
  3. 配置
    把下面的代码加入到~/.vimrc
     execute pathogen#infect()
    

3) 安装插件

把下载的插件复制到~/.vim/bundle/
git clone https://github.com/Lokaltog/vim-powerline \
~/.vim/bundle/vim-powerline

4) 推荐插件

  1. Pathogen 插件管理
  2. NerdTree 文件管理
  3. UltiSnips 定义代码块输入
  4. Syntastic 检查语法
  5. DelimitMate 成对生成(),{},[]
  6. SuperTab tab键增强
  7. Vim-indent-guides 缩进帮助
  8. Molokai Molokai主题
  9. Taglist 根据生成的Tag文件,高亮类、变量、函数和关键字。
  10. Vim-multiple-cursors 重构变量
  11. Nerdcommenter 快速注释
  12. emmet-vim 快速编写HTML

四、使用Vim

  1. 使用f,t,;来快速移动

     print("argument1","argument2","argument3")
    

    在参数的逗号后面加空格

     0f,s, jk
     ;.
     ;.
    
  2. 删除、移动(dw,cw,de,ce,…)

  3. 控制撤销的粒度

  4. <C-a> <C-x> 来加减数字

    安装插件可以加减时间、日期

  5. 批量注释、取消注释
    def main():

     range = [1,2,3,4]
     for rangeElement in range:
         print rangeElement
         print range.length
    

    使用 加A

  6. 选择括号或者双引号
    print(“hello “)
    vi”
    va”

  7. 用ga来打印字符信息

  8. Visual 的使用

    • 批量修改
        li.one   a{ background-image: url('/images/sprite.png');}
        li.two   a{ background-image: url('/images/sprite.png');}
        li.three a{ background-image: url('/images/sprite.png');}
      
    • 在行首或者行末插入
        var foo = 1
        var bar = 'a'
        var foobar = foo + bar
      
      在每一行最后插入分号。
      方法一、使用.来重复操作
      方法二、使用$来对最后进行批量插入
      方法三、使用命令模式
      :'\<,'\>normal .
  9. 使用*,#来查找单词,使用gd来定位到第一个单词

    统计当前匹配的个数
    :%s///gn
    用 :noh 来清屏

  10. 使用/,?来查找

  11. 批量替换

    • 把n行到m行的source替换为target
        :n,m s/source/target/g 
      
    • 把n行到最后一行的source替换为target
        :n,$ s/source/target/g 
      
    • 替换所有行
        :%s/source/target/g 
      
    • 输入当前光标的单词
        :%s/<C-r><C-w>/tatget/g
      
    • 替换的时候进行确认
        :%s/<C-r><C-w>/tatget/gc
      

      y 替换此处
      n 忽略此处
      q 退出替换过程
      l 替换此处匹配后退出
      a 替换此处与之后所有的匹配
      向上滚动屏幕
      向下滚动屏幕

  12. 从Vim执行Shell命令

    :write | !python %
    

    q: 进入命令行窗口

  13. 添加编号
    :let i = 1
    qa
    I=ijk
    :let i += 1
    q

    `:’\<,’>normal @a

    编辑宏 :put a
    复制回宏 :d a

五、参考资料

  1. 简明 Vim 练级攻略
  2. Vim-as-a-python-ide
  3. Vim Directory Structure
  4. Learn Vimscsript the Hard way
  5. 打造属于自己的Vim神器
  6. 谁说Vim不是IDE?(二)

六、推荐书籍

  1. 《Practical Vim》 - Drew Nil
  2. 《Vim使用技巧》- Drew Neil 著 , 杨源 车文隆 译
  3. 《Learn Vimscript the Hard Way》 - Steve Losh.
  4. Github
  5. Stackoverflow
  6. VimWikia