vim tutorial
本资料来自 vim-web 一起来说vim语
整理学习 jokechat
理解此部分需要你已经理解vim的几种常用工作模式(正常模式,插入模式,命令模式等)
动词代表了我们打算对文本进行什么样的操作.例如:
d # 表示delete
r # 表示替换replace
c # 表示表示change
y # 表示复制yank
v # 表示选取visual select
名词代表了我们即将处理的文本.vim中有一个术语对象叫做 text object (文本对象) ,示例如下:
w # 表示一个单词word
s # 表示一个句子sentence
p # 表示一个段落paragraph
t # 表示一个html标签tag
引号或者各种括号所包含文本称为一个文本块
介词界定了待编辑文本的范围或者位置
i # 表示在...之内 inside
a # 表示环绕...around
t # 表示到...位置钱 to
f # 表示到...位置上 forward
数字指定了待编辑文本对象的数量,从这个角度而言,数词也可以看做一种介词.引入介词之后,文本编辑命令的语法就升级成了下面样子:
动词 介词/数词 名词
下面是几个例子:
c3w # 修改三个单词 change three words
d2w # 删除两个单词 delete two words
另外,数词也可以修饰动词,表示将执行n次.于是,我们又有了下面的语法
数词 动词 名词
请看示例:
2dw # 两次删除单词(等价于删除两个单词) twice delete word
3x # 三次删除字符(等价于删除三个字符) three delete character
有了这些基本的语言元素,我们就可以着手构造一些简单的命令了.文本编辑命令的基本语法如下
动词 介词 名词
下面是一些例子🌰(如果熟悉了上面的概念,你将会看到这些例子非常容易理解),可以自己亲自尝试一番
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快捷键配置
;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>
相当于一个通用的命令符
let mapleader=";"
a # 在光标所在字符后插入
A # 在光标所在字符尾插入
i # 在光标所在字符前插入
I # 在光标所在字符行行首插入
o # 在光标下插入新行
O # 在光标上插入新行
x # 删除光标所在字符
nx # 删除光标所在n个字符
dd # 剪贴光标所在行
ndd # 剪贴n行
dG # 删除光标所在行到文件末尾
D # 删除光标所处位置到行尾内容
:10,21d # 删除10至21行
: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 # 将当前行置于屏幕中间
:ce(center) # 居中显示光标所在行
:ri(right) # 靠右显示光标所在行
:le(left) # 靠左显示光标所在行
J # 将光标所在下一行合并到当前行
>> # 光标所在行增加缩进(一个tab)
<< # 光标所在行减少缩进(一个tab)
n>> # 光标所在行开始的n行增加缩进
n<< # 光标所在行开始的n行减少缩进
:e # 刷新当前文件
:e! # 强制刷新当前文件
:w filename # 保存修改
:w # 保修修改
:wq # 保存修改并退出
ZZ # 快捷键 保存修改并退出
:q! # 退出不保存
:wq! # 强制保存并退出
ctrl+f # 下一页 f 就是 'forward'
ctrl+b # 上一页 b 就是 'backward'