如何更高效的使用Vim?,更高效使用Vim?
如何更高效的使用Vim?,更高效使用Vim?
1. Vim的操作模式 - 先用起来
如果不知道Vim的这两种模式(命令模式 和 Insert模式),你连最基本的编辑保存都做不到,更别说高效了。Vim可以傲视群雄(嘘~别让Emacs听见)就依赖于这种设计思想。
命令模式 | 启动Vim后,即在命令模式下。Vim的精华全在该模式下,放到下一节再说 |
Insert模式 | 按下 i 键,编辑器左下角显示“--插入--”字样,即进入Insert模式,此时可以像记事本一样编辑文本了 |
两个模式切换 | 按 i 进入 Insert 模式,按 ESC 回到命令模式 |
:wq |
存盘 + 退出 (:w 存盘, :q 退出) |
ZZ | 也是存盘+退出(我一般用这个,吹毛求疵的说,比:wq快那么几毫秒吧) |
x |
删当前光标所在的一个字符 |
dd |
删除当前行,并把删除的行存到剪贴板里 |
p |
粘贴剪贴板 |
hjkl | 光标移动(虽然“上下左右”键也可以用,但依然吹毛求疵的说,hjkl不用把手移到方向键上,快不止几十毫秒吧) |
2. 命令模式 - 带你装×带你飞
命令模式如果还要细分的话,可以分为指令模式(输入各种快捷键)和行末模式(输入各种命令),下面分别说明。2.1 指令模式 - 常用快捷键
在命令模式下,只要不按“:”,就是指令模式,几乎每个按键都是一个快捷键,知道下面这些快捷键,你才能飞一般的使用Vim。插入模式 | 删除(剪切)/拷贝/粘帖 | |||
i | 在光标处插入 | d | 删除(剪切),需要和光标移动命令结合使用,比如dw: 删除字符到下个单词的开始 | |
a | 在光标后插入 | y | 拷贝,同d | |
o | 在当前行后插入一个新行 | dd | 删除(剪切)当前行 | |
O(大写) | 在当前行前插入一个新行 | yy | 拷贝当前行 | |
cw | 删除光标到单词结尾,并进入插入模式 | p(小写) | 在光标后粘帖 | |
光标移动 | P(大写) | 在光标前粘帖 | ||
0(数字零) | 到行头 | Undo/Redo/多次do | ||
^ | 到本行第一个非空字符的位置 | u | undo | |
$ | 到行尾 | <Ctrl-r> | redo | |
g_ | 到本行最后一个非空字符的位置 | . | 重复上个命令 | |
b | 到上一个单词的开始 | 数字n+命令 | 执行命令n次,比如3dd:删除3行 | |
w | 到下一个单词的开始 | 大小写替换 | ||
e | 到下一个单词的结尾 | gU | 变大写 | |
gg | 到第1行 | gu | 变小写 | |
G | 到最后一行 | 可视化 | ||
nG, :n | 到第n行,如 “13G”或“:13”,光标移动到13行 | v | 进入visual模式后可以选择一个代码块,然后进行操作了,非常棒的一个功能是代码自动对齐,只要选中代码块之后按“=”键即可。 |
2.2 行末模式 - 常用命令
在命令模式按“:”键进入行末模式,此时可以在行末输入各种命令了,下面是最常用的命令:打开/保存/退出/改变文件 | |
:q |
退出 |
:w | 保存 |
:x, :wq, ZZ | 保存并退出(:x 表示仅在需要时保存,ZZ不需要输入冒号和回车) |
:saveas <filePath> | 另存为 |
:q! |
退出不保存 |
:qa! |
强行退出所有的正在编辑的文件,不保存 |
:e <filePath> |
打开一个文件 |
:bn 和 :bp |
通过:e打开多个文件后,使用这两个命令来切换下一个或上一个文件 |
:n | 光标移动到第n行,如":13"移动到13行 |
3. 高级技巧
如果觉得不过瘾,这儿还有更高级的内容。(说明:虽然是高级技巧,但都非常实用,而且会大呼过瘾,几百年不用的技巧这儿就不写了)
3.1 查找和替换
(1)查找
行内查找 | |
f | 向后查找(“fa”定位到下一个“a”的位置) |
F | 向前查找(“Fa”定位到上一个“a”的位置) |
t | 向后查找(“ta”定位到下一个“a”之前一个字符) |
T | 向前查找(“Ta”定位到上一个“a”之前一个字符) |
全文查找 | |
/ | 向下查找,支持正则表达式。“n”继续查找,“N”反向继续查找 |
? | 向上查找,同上 |
* | 向下查找,匹配光标所在的单词(字符串) |
# | 向上查找,同上 |
% | 查找匹配的括号,包括(,[,{。需要先把光标移动到括号上。碉堡了! |
(2)替换
语法为 : [addr]s/源字符串/目的字符串/[option] | |
[addr] | 表示检索范围,省略时表示当前行。 如:“1,20” :表示从第1行到20行; “%” :表示整个文件,同“1,$”; “. ,$” :从当前行到文件尾; |
s | 表示替换操作 |
[option] | 表示操作类型 如:g 表示全局替换; c 表示进行确认; p 表示替代结果逐行显示(Ctrl + L恢复屏幕); 省略option时仅对每行第一个匹配串进行替换; 如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义 |
示例 | |
:%s/源字符串/目的字符串/g | 全局替换 |
:%s/\(That\) or \(this\)/\u\2 or \l\1/g | 将That or this 换成 This or that (1)把正则表达式放进\(\)中,在后面即可用\1,\2访问\(\)中的内容; (2)\u首字母大写; \l首字母小写 |
:%s/ */ /g | 将多个空格换成一个空格 |
:%s/\([:.]\) */\1 /g | 将句号或冒号后的多个空格替换为一个空格 |
:%s/^/ / | 在每行的开始插入两个空白 |
3.2 自动补全
<Ctrl-p>向上查找 <Ctrl-n>向下查找。使用<Ctrl-p>或<Ctrl-n>会列出之前键入过的单词
3.3 块操作
在命令模式下按<Ctrl-v>进入块模式,最常用的功能是同时操作多行,步骤如下:
(1)按<Ctrl-v>进入块模式
(2)通过光标选择要处理的区域块
(3)按"I"在区域块之前插入,按“A”在区域块之后插入
(4)插入完毕后按<ESC>使每一行生效
3.3 分屏
(1) 按“v”进入视图模式 (2) 选中要格式化的代码块 (3) 按“=”键,颤抖吧~地球人~
分屏
vim -on file1 file2 ...
上下分屏(小写o,n为数字,表示分几屏)
vim -On file1 file2 ...
左右分屏(大写O)
:sp filename
上下分屏
:vsp filename
左右分屏
<Ctrl-w> s
上下分割当前文件
<Ctrl-w> v
左右分割当前文件
关闭分屏
<Ctrl-w> c
关闭当前窗口,无法关闭最后1个窗口
<Ctrl-w> q
关闭当前窗口,可以关闭最后1个窗口
移动光标
h,j,k,l
在一个屏内移动光标
<Ctrl-w> h,j,k,l
切换屏
屏幕尺寸
<Ctrl-w> =
让各分屏等分屏幕
<Ctrl-w> +
上移分割线
<Ctrl-w> -
下移分割线
<Ctrl-w> >
左移分割线
<Ctrl-w> <
右移分割线
3.4 代码格式化
评论暂时关闭