玩转Vim
全局替换命令
% s/java/python/g
Normal(普通)
wq:保存并退出
w:保存
q:退出
q!:强制退出
w!:强制保存
gi:快速跳转到刚才插入的地方
Visual(可视)模式
Normal模式使用v进入visual模式选择
V选择行 Ctrl+v 进行方块选择
y:复制 p:粘贴 d:删除
移动
h:左 l:右 j:下 k:上
w/w:移动到下一个word/WORD开头
e/E:下一个word/WORD尾
b/B:回到上一个word/WORD开头,可以理解为backword
word:以非空白符分割的单词
WORD:以空白符分割的单词
# 查找移动
使用f{char} 可以移动到char字符上,t移动到char的前一个字符
如果第一次没搜到,可以用分号(;)/逗号(,)继续搜该行下一个/上一个
F反过来搜索
# 水平移动
0移动到行首第一个字符,^移动到第一个非空白字符
$移动到行尾,g_移动到行尾非空白字符
# 垂直移动
在句子(sentence)和段落(paragraph)间移动(不常用)
使用()在句子间移动,你可以使用:hlep(来查看帮助
使用{}在段落之间移动
使用easy-motion插件移动,这些命令就都不用记忆了
# 页面移动
gg/G移动到文件开头和结尾,你可以使用ctrl+o快速返回
H/M/L跳转到屏幕的开头(Head),中间(Middle)和结尾(Lower)
Ctrl+u. ctrl+f. 上下翻页. (upword/forward)。zz把屏幕置为中间
# 快速删除
x 快速删除一个字符
d 配合文本对象,快速删除一个单词daw(d around word)
d 和x 可以搭配数据多次执行
# 恢复
u:恢复操作
# 快速修改
r(replace),c(change),s(substitute)
使用r可以替换一个字符。s替换并进入插入模式
使用c配合文本对象,可以快速进行修改
# vim 查询
使用/ 或者?进行前向或者反向搜索
使用n/N 跳转到下一个或者上一个匹配
使用* 或者 # 进行当前代词的前向和后向匹配
# 搜索替换
substitute 命令允许我们查找并且替换掉文本,并且支持正则式
:[range]s[ubstitute]/{pattern}/{string}/[flags]
range 表示范围 比如:10,20 表示10-20行, % 表示全部
pattern 是要替换的模式,string是替换后文本
Flags 表示替换的标志
g(global)表示全局范围内执行
c(confirm)表示确认,可以确认或者拒绝修改
n(number)报告匹配到的次数而不替换,可以用来查询匹配次数
# vim多文件操作
Buffer是指打开的一个文件的内存缓冲区
窗口是Buffer可视化的分割区域
Tab可以组织窗口为一个工作区
Buffer
使用:ls 会列举当前缓冲区,然后使用:b n 跳转到第n个缓冲区
:bpre :bnext :bfirst :blast
或者使用:b buffer_name 加上tab补全来跳转
窗口
一个缓冲区可以分割成多个窗口,每个窗口也可以打开不同缓冲区
<Ctrl+w>s水平分割 , <Ctrl+w>v 垂直分割。 或者:sp 和 :vs
:e b.txt ,可以替换到另一个buffer
Tab
类似于虚拟桌面
操作命令
:table[dit] {filename} 在新标签页中打开 {filename}
:<C-w>T 把当前窗口移到一个新标签页
:tabc[lose] 关闭当前标签页即其中的所有窗口
:tabo[nly] 只保留活动标签页, 关闭所有其他标签页
切换命令
Ex命令 普通模式命令 用途
:tabn[ext] {N} {N}gt 切换到编号为{N}的标签页
:tabn[ext] gt 切换到下一标签页
:tabp[revious] gT 切换到上一标签页
ctrlp插件和nerdtree快速操作多个文件
# 复制 粘贴
y(yank) 复制 和 p(put) 粘贴 ,剪贴 d 和 p
使用v(visual)命令选中所要复制的地方,然后使用p粘贴
配合文本对象: 比如使用yiw 复制一个单词, yy 复制一行
# 重新加载当前文件,并且不保存
:e!
Insert(插入模式)
a/i/o之一进入插入模式
a:在光标之后
i:在光标之前
o:在光标下面另起一行
A:在光标这一行尾
I:在光标这一行首
O:在光标上面另起一行
ctrl+h:删除上一个字符,ctrl+w:删除上一个单词,ctrl+u:删除当前行
ctrl+a:快速移动到开头 ctrl+e:快速移动到结尾 ctrl+b:往前移 ctrl+f:往后移
快速切换Normal模式:设置快捷键 ctrl+[
# 粘贴
set autoindent 设置了缩进,粘贴进去的代码缩进有问题
解决: :set paste 取消 :set nopaste 解决
Text Object(文本对象)
一个单词,一段句子,一个段落
[number]<command>[text object]
number 表示次数, command 是命令, d(elete) 表示删除, c(hange) 表示替换, y(ank)表示复制
text object 是要操作的文本对象,比如单词w, 句子s, 段落p
寄存器
vim操作的是寄存器,
d删除或者y复制,内容都放到了”无名寄存器“
用x删除一个字符 放到无名寄存器,然后p粘贴,可以调换俩字符
通过"{register}前缀可以指定寄存器,不指定默认无名寄存器
比如使用 "ayiw 复制一个单词到寄存器a中,"bdd 删除当前行到寄存器b中
""表示无名寄存器,缺省使用。 "" p其实等同p
:reg a 查看寄存器a保存内容
有名寄存器a-z
复制专用寄存器 "0 使用y复制文本同时会被拷到复制寄存器0
系统剪贴板 "+ 可以在复制前加上 "+ 复制到系统剪贴板
echo has('clipboard') 输出1,则可以复制,否则不能
其他一些寄存器 比如 "% 当前文件名 , ".上次插入的文本
Vim宏(macro)
一系列命令的集合
可以用宏【录制】一系列操作,然后用于【回放】
宏可以方便地把一系列命令用在多行文本上
# 使用
使用q 进行录制,使用q结束录制
使用q{register}选择要保存的寄存器,把录制的命令保存其中
使用@{register}回放寄存器中保存的一系列命令
# 多行执行normal命令
normal @a
Vim补全
<Ctrl-n> 普通关键字
<Ctrl-x><Ctrl-n> 当前缓冲区关键字
<Ctrl-x><Ctrl-j> 包含文件关键字
<Ctrl-x><Ctrl-x> 标签文件关键字
<Ctrl-x><Ctrl-k> 字典查找
<Ctrl-x><Ctrl-l> 整行补全
**<Ctrl-n><Ctrl-p> 单词补全**
**<Ctrl-x><Ctrl-f> 文件名补全**
**<Ctrl-x><Ctrl-o> 全能(0mni)补全,需要开启文件类型检查,安装插件**
comments powered by