0%

一起来学vim 😂

vim-tutorial

vim tutorial

整理资料来源

本资料来自 vim-web 一起来说vim语
整理学习 jokechat
理解此部分需要你已经理解vim的几种常用工作模式(正常模式,插入模式,命令模式等)

动词

动词代表了我们打算对文本进行什么样的操作.例如:

1
2
3
4
5
d # 表示delete
r # 表示替换replace
c # 表示表示change
y # 表示复制yank
v # 表示选取visual select

名词

名词代表了我们即将处理的文本.vim中有一个术语对象叫做 text object (文本对象) ,示例如下:

1
2
3
4
5
w # 表示一个单词word
s # 表示一个句子sentence
p # 表示一个段落paragraph
t # 表示一个html标签tag
引号或者各种括号所包含文本称为一个文本块

介词

介词界定了待编辑文本的范围或者位置

1
2
3
4
i # 表示在...之内 inside
a # 表示环绕...around
t # 表示到...位置钱 to
f # 表示到...位置上 forward

数词

数字指定了待编辑文本对象的数量,从这个角度而言,数词也可以看做一种介词.引入介词之后,文本编辑命令的语法就升级成了下面样子:

1
动词 介词/数词 名词

下面是几个例子:

1
2
c3w # 修改三个单词 change three words
d2w # 删除两个单词 delete two words

另外,数词也可以修饰动词,表示将执行n次.于是,我们又有了下面的语法

1
数词 动词 名词

请看示例:

1
2
2dw # 两次删除单词(等价于删除两个单词) twice delete word
3x # 三次删除字符(等价于删除三个字符) three delete character

组词为句

有了这些基本的语言元素,我们就可以着手构造一些简单的命令了.文本编辑命令的基本语法如下

1
动词 介词 名词

下面是一些例子🌰(如果熟悉了上面的概念,你将会看到这些例子非常容易理解),可以自己亲自尝试一番

1
2
3
4
5
6
7
8
9
dip # 删除一个段落 delete inside paragraph
di{ # 删除{}中的所有代码
di( # 删除()中的所有代码
di[ # 删除[] 中的所有代码
vis # 选取一个句子 visula select inside sentence
ciw # 修改一个单词 change inside word
caw # 修改一个单词 change around word
dtx # 删除一个文本直至字符"x"(不包括字符"x") delete to x
dfx # 删除文本直至字符"x" (包括字符"x") delete forward x

常用快捷键

这里的vim快捷键是已经配置好的,回头留意查快捷怎么配置

  • 研究vim快捷键配置
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    ;fl     # 唤出当前目录文件菜单列表 file list
    nw # 窗口切换
    ;lw # 跳转至右方的窗口
    ;hw # 跳转到左方的窗口
    ;kw # 跳转到上方的子窗口
    ;jw # 跳转到下方的子窗口

    # 可以直接在tab之间切换
    gt # 后一个tab标签
    gT # 前一个tab标签
    ;q # 关闭一个标签

    ;bn # 正向遍历 buffer
    ;bp # 逆向遍历 (光标必须在buffer列表子窗口外)
    ;bd # 关闭当前buffer
    ;bb # 你之前所在的前一个buffer

    ctrl+y # 向上一行
    ctrl+e # 向下一行
    ctrl+u # 向上半屏
    ctrl+d # 向下半屏
    ctrl+f # 向上一页 f 就是'forward'
    ctrl+b # 向下一页 b 就是'backward'

    ctrl+o # 上一个光标的位置
    ctrl+i # 下一个光标的位置

    # 书签设定,标记并跳转
    ma # 设定/取消当前行名为 a 的标签
    m, # 自动设定下一个可用标签名
    mda # 删除当前文件中所有所有独立标签
    m? # 列出当前文件中所有书签,选中后回车可直接跳转
    mn # 按照行号的前后顺序,跳转至下一个独立书签
    mp # 按照行号的前后顺序,跳转至前一个独立书签


    'a # 调到书签a
    '. # 最后一次编辑的地方

    ;t # 通过搜索文件打开文件

    0 # 跳转到当前行首
    $ # 跳转到当前行尾

    !CLL # CLL 表示要执行的shell命令
    !date # 查看时间
    :r !date # 当前系统时间写入到光标所在行
    :r ./hello.txt # 表示将当前路径下hello.txt文件中的内容 导入到光标所在行

    # visual select模式选中状态下
    U # 选中 - 小写变大写
    u # 选中 - 大写变小写
    ~ # 选中 - 小写大写相互转换
    J # 选中 - 选中的多行合并为一行
    :sp # 选中搜索 - 搜索当前目录所有文件
    ;sl # 选中搜索 - 当前目录结果列表

    # 列选中编辑
    ctrl+v # 进入块选中模式(visual block) 'hjkl'方向键控制选中区
    shift+i # 进入列选择批 ;c$ # 光标开始位置量编辑
    ;cc # 代码注释 (根据语言选择注释形式 "//" or "<!- comment -->>" )
    ;cm # 代码段落注释 "/**/"
    ;ci # 注释相反,没注释的添加注释,注释额取消注释
    ;cs # 段落注释,注释每行前面加"*"
    ;c$ # 光标开始位置到行结束位置添加注释
    ;cA # 在行尾部添加注释 "//"
    ;cu # 取消代码注释


    :132,135 join # 合并132~135行
    xp # 左右交换光标处两字符的位置
    ;y # 复制到系统剪贴板
    y # 复制
    yy # 复制光标所在行
    yw # 从光标处复制一个字符/单词额末尾,包括空格
    ye # 从光标出复制一个字符/单词的末尾,不包括空格
    y$ # 从当前光标处复制到行末
    y0 # 从当前光标位置复制到行首(不包括光标位置)
    y5l # 从光标位置(包含光标位置)向右复制5字符
    y3B # 从光标位置(不包含光标)反向复制3个单词
    . # 粘贴
    p # 粘贴

    # 多光标编辑
    shift+n # 选中下一个相同字符
    shift+k # 跳过当前选中的字符

    za # 单个代码折叠
    zM # 折叠左右代码
    zR # 所有代码折叠取消
    ;i # 开/关缩进可视化 - 代码缩进关联线条

    > # 代码缩进 -
    < # 代码缩进

    :1,20/header/www/g # 1~20行将header替换成www

    ctrl+z # vim 扔进后台jobs

基础使用

快捷键通配符

快捷键通配符 <leader> 相当于一个通用的命令符

1
let mapleader=";"

插入命令

1
2
3
4
5
6
a # 在光标所在字符后插入
A # 在光标所在字符尾插入
i # 在光标所在字符前插入
I # 在光标所在字符行行首插入
o # 在光标下插入新行
O # 在光标上插入新行

删除命令

1
2
3
4
5
6
7
x   # 删除光标所在字符
nx # 删除光标所在n个字符
dd # 剪贴光标所在行
ndd # 剪贴n行
dG # 删除光标所在行到文件末尾
D # 删除光标所处位置到行尾内容
:10,21d # 删除10至21行

定位命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
:set number   # 设置行号  简写 set nu
:set nonumber # 取消行号 简写set nonu
gg # 到第一行
G # 到最后一行
nG # 到第n行
:n # 到第n行
$ # 到行末
0 # 到行首
hjkl # 左下上右
w # 到下一个单词的开头
b # 与w相反
e # 到下一个单词的结尾
ge # 与e相反
^ # 到本行第一个非blank(空白)字符
g_ # 到本行最后一个不是blank字符的位置
fa # 到下一个为a的字符处,也可以fs到下一个为s的字符
t, # 到本行逗号前的第一个字符,逗号可以使其他字符
3fa # 在当前行查找第三次出现的a
Fa # 到当前行上一个为a的字符处,与f的查找方向相反
T, # 到本行上一个逗号字符处

zz # 将当前行置于屏幕中间

简单排版

1
2
3
4
5
6
7
8
:ce(center)   # 居中显示光标所在行
:ri(right) # 靠右显示光标所在行
:le(left) # 靠左显示光标所在行
J # 将光标所在下一行合并到当前行
>> # 光标所在行增加缩进(一个tab)
<< # 光标所在行减少缩进(一个tab)
n>> # 光标所在行开始的n行增加缩进
n<< # 光标所在行开始的n行减少缩进

刷新重载打开的文件

1
2
:e  # 刷新当前文件
:e! # 强制刷新当前文件

保存退出

1
2
3
4
5
6
:w filename   # 保存修改
:w # 保修修改
:wq # 保存修改并退出
ZZ # 快捷键 保存修改并退出
:q! # 退出不保存
:wq! # 强制保存并退出

整页翻页

1
2
ctrl+f        # 下一页  f 就是 'forward'
ctrl+b # 上一页 b 就是 'backward'