Vim 笔记

  • 配置文件 $vim ~/.vimrc
  • 在编辑配置文件前,将原有文件进行备份总是一个好的习惯。比如cp .vimrc .vimrc.bak
  • 另外,在编辑配置文件时,将改动添加注释也是一个很好的习惯,帮未来的自己一个忙吧。

一、编辑

快捷键 说明
0 行首
$ 行尾
^ 非空行首
g_ 非空行末
w 下个词头
b 上个词头
e 下个词尾
x 向右删除
X 向左删除
% 括号匹配
J 合并两行
H 屏幕顶行
M 屏幕中间行
L 屏幕底行
zz 当前行置于屏幕中央
zt 顶部
zb 底部
gg 跳转到页首
G 跳转到页尾
nG 跳转到指定行
yy 拷贝一行
ye 从当前位置拷贝到词尾
ge 移至前一个单词的最后一个字符
u 撤销上一步操作
ctrl-r 恢复上一步操作(u的反命令)
~ 转换大小写
dNw 删除N个词到下个词头
dNe 删除N个词到下个词尾
r 替换光标处字符,Nr表示将多个字符替换为即将输入到字符
R 从当前光标所在处开始替换
xp 交换左右两个字符
ddp 交换上下两行
yNw 复制N个词
Nyy 复制N行
y\$ 复制到行尾
s 删除光标处字符并插入
S 删除光标所在行并插入(同C,cc,c$)
db 删除前边的字符
dw 删除后边的字符
diw 删除光标处字符,不含空白字符
daw 删除光标处字符,包含空白字符
ciw 删除光标处字符,并开始插入
caw 删除光标处字符和其后边空格,并开始插入
dG 删除到页尾
dgg 删除到页首
:m,nd 删除m~n行
:m,ny 复制m~n行
:m,nmt 剪切m~n行内容到t行
:m,ncot 复制m~n行内容到t行
N>> N行右缩进
N<< N行左缩进
== 对齐当前行
gg=G 对齐全文
ggvG 全选
ctrl-f/b 上翻页/下翻页
ctrl-u/d 上翻半页/下翻半页
ctrl-g 页面底部显示行数等文件相关情况
`` 在最近停留的两点间跳转
`. 跳转到上次修改位置
ctrl-i/o 跳转到将来/过去停留的位置
:args 显示当前正在编辑的文件
. 重复上次操作
打开最近一次打开的文件 !vim
查看最近打开过的文件 在一个打开的文件中输入:ol(ol是oldfiles的缩写),若该命令无效,可以尝试:bro ol(:browse oldfiles的缩写)
直接打开最近的任何文件 在用:ol查看历史时,使用:e #<数字来直接打开对应文件
:sp 水平分隔当前窗格
:vs 垂直分隔当前窗格
Ctrl+w,Ctrl+w 切换到下一个窗格(顺时针)
Ctrl+w,Ctrl+j 切换到下面的窗格
Ctrl+w,Ctrl+k 切换到上面的窗格
Ctrl+w,Ctrl+h 切换到左边的窗格
Ctrl+w,Ctrl+l 切换到右边的窗格

二、搜索

快捷键 说明
* 在文本中查找当前光标所在处字符(向下查找)
# (向上查找)
? 向上搜索
/ 向下搜索 /was$(只匹配位于行末的was);/^was(只匹配位于行首的was)
v 字符选择
V 行选择
ctrl-v 块选择(选择后o可在选择区域两端跳转)
:set ignorecase 忽略大小写搜索
:set noignorecase 区分大小写搜索
:set hlsearch 高亮搜索结果
:set nohlsearch 关闭高亮
. 匹配任意单字符
\

三、替换

快捷键 说明
:%s/old/new/g 全文替换
:m,ns/old/new/g m~n行替换
:s/正则/替换文本/g 本行内替换
& 重复上次替换命令

四、标记

快捷键 说明
ma 在当前光标处标记“a”,可用“a~z”,“A~Z”作为标记字母,小写仅用于当前缓冲区,大写可跨越不同的缓冲
'a 单引号+标记,可移动到指定标记行的首个非空字符
`a 反引号+标记,可移动到标记时的光标位置
:marks 显示所有的标记
:delmarks a b c 删除a,b,c标记
:delmarks! 删除所有标记
使用标记快速删除文本行:d'a 复制行:y'a

系统内置的特殊标记如下:

  • . 最近编辑位置
  • 0~9 最近使用的文件
  • ^最近插入的位置
  • ' 上次跳转前的位置
  • " 上次退出文件前的位置
  • [ 上次修改开始处
  • ] 上次修改结束处

五、折叠与展开

快捷键 说明
zc 折叠代码(close)
zo 展开代码(open)
zm 折叠全部
zr 展开全部
zj 下一个折叠
zk 上一个折叠
zn 禁用折叠
zN 启用折叠

六、保存退出

快捷键 说明
:w 保存
:wq 保存退出
ZZ 保存退出
:q! 不保存退出
:wq! 保存退出(忽略只读属性,所有者及root可用)

七、示例

操作 命令
向下移动 7 行 7j
删除一个词 dw
删除一行 dd
从光标处删除到行尾 d$
从光标处删除到行首 d0
删除{}中的内容 di{
光标移动至 80 行 80G
在当前文件中搜索光标所在位置 *(#)
在 50 行至 100 行间查找并替换 :50,100/old/new/g
在同一文件中对比两个不同的块 :sp(to 'split' the view)
输入23+45+119的结果 Ctrl+r=23+45+119
因为热爱,所以执着。