普通模式下

w 跳转到下个符号或者单词 b 跳转到上个符号或者单词,对应的大写的WB,跳转的尺度会更大些,比如 I'm 小写会默认是三个,大写会默认为一个
x 删除当前字母
dw 删除下个符号或者单词 db 删除上个符号或者单词
dt+字母 df+字母 删除到某个字母

复制

ctrl+v,然后用鼠标选择要复制的,然后 y,然后p进行粘贴

替换

:s/java/php 替换当前行第一个java为php
:s/java/php/g 替换当前行所有的java为php
:1,$s/java/php 替换第一行开始到最后一行的第一个java为php
:1,$s/java/php/g 替换第一行开始到最后一行的所有 java为php
:%s/java/php 替换每一行的第一个java为php
:%s/java/php/g 替换每一行的所有 java为php

vim = vi + IMproved

多级撤销
语法加亮和自动补全
支持多种插件
通过网络协议(HTTP/SSH)编辑文件
多文件编辑
Vim可以编辑压缩格式文件(GZIP、ZIP等)

光标移动

h 左移
l 右移
j 下移
k 上移
^/0 移动到行首/包含缩进空格
$ 移动到行尾

单词和字符传移动

w/W 正向移动到下一个单词开头
b/B 反向移动
e/E 正向移动下一个单词结尾
ge 反向移动词尾

跳转

ctrl+f/F 下一页
ctrl+b/B 上一页
ctrl+d/u 向上或者向上翻半页
gg 跳转到文件首行
<行号>gg/G 跳转到指定行
G 跳转到文件最后一行
g+ctrl+g/G 查看文件信息/{g}更加详细

缩进

示例: >右 <左
示例: >> 或者 :> 右缩进
m,n> 或者 :m>(n-m+1) m到n行缩进 :3,5> 第3行到5行进行右缩进
m>n 等价于命令 :m,m+n-1> m行开始共n行缩进一次 :3>3 第3行起包括第3行后3行进行右缩进

删除复制和粘贴

寄存器

类型 含义 表达方式 举例 特点
无名寄存器 默认寄存器 "" "" p=p 会被最后一条覆盖
数字寄存器 "+{0-9}缓存最近10次操作 "0 "{1-9} "0p "1p 0用于复制专用1-9 用于最近9次行删除或者修改记录
有名寄存器 26英文字母命名有名寄存器 "[a-z]/[A-Z] "ayw "A会通过^J追加到" a寄存器中
黑洞寄存器 有去无回 " "_dw 只想删除而不想覆盖 无名寄存器

按键操作

d = delete = cut 剪贴
y = yank 约等于 copy 类似于复制
p/P = put 约等于 paste 粘贴到光标后/光标前
u=undo 撤销之前操作
ctrl+r = redo 重做/恢复之前操作
yw 复制当前光标单词
y2w 复制正向两个单词
p/P = put 约等于 paste 粘贴到光标后/光标前
yy类似于dd 复制当前光标整行

组合删除

x/X 删除光标下/前单个字符
dw 删除一个单词,光标必须在词首
d{hjkl} 删除到上下左右一个操作前的字符
d$=D 删除光标到行尾的字符
d^ 删除光标到行首的字符
dd 删除当前整行
{n}dd 向下删除n行,包括当前行
5dw 删除正向单词五次
3w 正向移动单词三次
D3w 正向删除3w动作
2d3w 正向删除3w动作两次

插入

shift + i/a 插入模式并移动到行首/尾
a/i 光标后/前插入
[n]O/o 行前/后插入n次
[n]+i 插入模式重复n次 // 按键 3i,输入hello,world! ,然后ESC ,会再多出四个此字符串

转换

~ 单词字符大小写转换
g~w 单词大小写转换
g~$ 或者 g~~ 整行大小写转换 ,前者需要光标在行首
gU/uw 单词转换成大/小写

查找

F/f{char} 反向/正向查找单个字符
t{char} 查找字符前一个字符
dt{char}/df{space} 删除光标到查找字符间字符
/{char} 命令行查找 ,n向下查找 N向上查找

替换

s/going/rolling/g 当前行所有going替换成rolling
%s/going/rolling/g %匹配所有范围
shift+r/R 替换模式
r 单个字符替换
cw 修改单个单词
c$/C 类似于d操作 修改光标之后行内容

缓冲区与多文件编辑

缓冲区
缓冲区列表
:files
:buffers
:ls
缓冲区列表指示状态
标记 含义
a 激活缓冲区,缓冲区被加载且显示
h 隐藏缓冲区,缓冲区被加载但不显示
% 当前缓冲区
交换缓冲区
= 只读缓冲区

  • 已经更改缓冲区
  • 不可改缓冲区,'modfiable'选项不置位
    vim *.php
    缓冲区列表操作
    :bp 上一个缓冲区
    :bn 下一个缓冲区
    :bf 到第一个缓冲区
    :bl 到最后一个缓冲区
    :buffer Number/File_name 指定缓冲区
    :ball 编辑所有缓冲区
    Ctrl+^/b# 切换到前一个buffer(交换buffer)
    :qall! 退出全部缓冲区
    :wall! 写入全部缓冲区
    :badd 添加一个缓冲区,但不设置为当前缓冲区
    :bd 删除缓冲区
    :n,m/%bd 删除n到m编号/所有的缓冲区文件
    :bufdo{CMD} bufdo set number
    :E /:bd 打开文件目录列表/返回到最初的buffer

    多窗口操作(分屏)与标签分组

    分屏操作
    指令 含义
    vim -O/on 水平/垂直分屏 n:数字,分屏的数量,o:open
    ctrl+w+c/q 关闭当前窗口/最后一个窗口时退
    ctrl+w s 上下分割当前打开的文件
    :sp filename 上下分隔,并同时打开一个新的文件
    ctrl+w v 左右分隔当前打开的文件
    :vsp filename 左右分隔,并打开一个新的文件

    移动分屏和尺寸移动

    指令 含义
    ctrl+w K 向上移动
    ctrl+w J 向下移动
    ctrl+w L 向右移动
    ctrl+w H 向左移动
    ctrl+w + 增加高度
    ctrl+w - 减少高度
    ctrl+w = 让所有屏的高度一致

    宏操作案例一

    文件内容显示如下
    1
    2


    100
    需要以下操作
    进入普通模式
    在第一行写入1
    按qa + yyp + (ctrl+a)
    按q退出
    按98@a,则会出现1-100的数字
    宏保存
    viminfo /vimrc file
    保存历史和非空寄存器
    vim启动时读取
    容易被覆盖

    可视化模式

    三种子模式
    v 激活面向字符的可视模式
    V/shift+v 激活面向行的可视模式
    ctrl+v 激活面向列块的可视模式
    gv 重选上次的高亮选区
    o 切换选取