vim使用技巧

这篇文章想给大家介绍一些vim非常实用的小技巧,相信大家用熟练了以后,会更加喜欢vim的。里面有些是自己在使用中需要用到的,所以搜集整理一下,也方便日后自己查询使用。

多行缩进

大家在复制粘贴代码的时候,经常会需要用到多行缩进,vim 中在normal mode(命令模式)下命令>>是对当前行增加缩进,命令<<是对当前行减少缩进。
这个命令也像vim中大多数命令一样,可以在前面加个数字,比如3>>,这样就是给3行增加缩进。
insert/Replace Mode下,Ctrl-Shift-t可以增加当前行的缩进,而Ctrl-Shift-d则可以减少当前行的缩进。在插入模式中用这种方式增加当行缩进还是挺方便的。

多行注释

这也是经常会用到的命令,多行注释有好几种方法。

  1. normal mode下直接\cc注释当前行,在normal mode下按v进入 visual mode(可视化模式),或者直接Shift-v这样可以直接选中一行,然后再上下移动光标,选中多行\cc即可注释多行。
  2. normal modeCtrl-v进入块可视化模式,上下移动光标选中多行,再Shift-i,之后输入’\(你的注释符号)’,输入好后按两下Esc
  3. 下面是我最常用的一种::1,3s#^#//#g,用#号做分隔符是特殊情况,一般都是用/做分隔符,1, 3代表起止行号,这个命令的意思就是从1行到3行的行首加上//,删除命令:1,3s#^//##g。#号注释: :1,3s/^/#/g, 删除:1,3s/^#//g。大家有没有发现用这种方式也可以做多行缩进。

:ls命令

此命令可以查看缓存区,每个缓存文件前面都有一个序号n,再输入:buff n可以跳转到此缓存文件,(有时间再配上截图)

文件对比

  1. 使用vim的比较模式打开两个文件,在终端输入:
    1
    2
    3
    vim -d file1 file2

    vimdiff file1 file2
  2. 分别在要对比的两个文件中输入diffthis
  3. 如果已经打开了文件file1,再打开另一个文件file2进行比较:
    1
    :vert diffsplit file2     //如果没有用vert命令,diffsplit则会分上下两个窗口。
  4. 如果更改了某个窗口的内容,vim又没有自动更新diff检查,可以使用如下命令更新:
    1
    :diffupdate
  5. 定位到不同差异点:
    1
    2
    [c     //跳到前一个不同点
    ]c //跳到后一个不同点
  6. 合并文档:
    1
    2
    dp          //将差异点的当前文档内容应用到另一文档(diff put)
    do //将差异点的另一文档的内容拷贝到当前文档(diff get),之所以不用dg,是因为已经有其他快捷键占用了。
  7. 上下文的展开和查看:
    比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数为3行,可以这样设置:
    1
    :set diffopt=context:3

    实用快捷键

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    zf           //创建折叠(使用数字表示创建有当前行到下多少行的折叠,比如3j就创建包括4行的折叠)
    zo //打开折叠(l也可以打开折叠)
    zc //关闭当前折叠
    zm //关闭所有折叠
    zr //打开所有折叠
    zE //删除所有折叠
    zd //删除当前折叠
    za //若当前打开则关闭,若当前关闭则打开
    zj //到下一折叠的开始处
    zk //到上一折叠的末尾
    C //删除当前行光标之后的字符,并开始输入
    f //f 后面输入x, 就是在当前行光标后查找x字符,如果是2fx就是查找第二个
    F //F 后面输入x, 就是在当前行光标前查找x字符,如果是2Fx就是查找第二个
    u //回退
    shift-v //选中整行, 选中某些字母后按U,字母变大写;按u,变小写
    ctrl-r //撤销回退
    ctrl-w w //跳到下一个窗口
    ctrl-w h //跳到左侧窗口
    ctrl-w l //跳到右侧窗口
    ctrl-w j //跳到下方的窗口
    ctrl-w k //跳到上方的窗口
    ctrl-w < //缩小窗口宽度,前面加数字n,就是缩小n列
    ctrl-w > //扩大窗口宽度,前面加数字n,就是扩大n列
    ctrl-w - //减小窗口高度,前面加数字n,就是减小n行
    ctrl-w + //扩大窗口高度,前面加数字n,就是扩大n行
    ctrl-w = //窗口高度等分
    ctrl-w _ //窗口高度最大化
    ctrl-w s //上下分割当前窗口
    ctrl-w v //左右分割当前窗口
    ctrl-f //向下翻一屏
    ctrl-d //向下翻半屏
    ctrl-b //向上翻一屏
    ctrl-u //向上翻半屏

    vimgrep搜索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vimgrep /匹配模式/[g][j] 要搜索的文件/范围
g:表示是否把每一行的多个匹配结果都加入
j:表示是否搜索完后定位到第一个匹配位置

vimgrep /pattern/ % 在当前打开文件中查找
vimgrep /pattern/ * 在当前目录下查找所有
vimgrep /pattern/ ** 在当前目录及子目录下查找所有
vimgrep /pattern/ *.c 查找当前目录下所有.c文件
vimgrep /pattern/ **/* 只查找子目录

cn 查找下一个
cp 查找上一个
copen 打开quickfix
cw 打开quickfix
cclose | ccl 关闭qucikfix
help vimgrep 查看vimgrep帮助