# Vim

7 min read
Table of Contents

Vim 中的一些快捷键。

vim 的模式

模式说明
正常模式快捷命令,或者按:输入命令行
插入模式输入文本,按 i、a、o、s 等进入
可视模式选择文本,按 v 进入可视模式,V 进入可视行模式, ctrl + v 进入可视块模式

插入模式

按键动作
a在光标所在字符后添加文本
A在当前行最后一个字符后添加文本
c开始修改操作,允许更改当前行文本
C修改从光标位置开始到当前行末尾范围内的内容
i在光标所在的字符前插入文本
I在当前行开头插入文本
o在当前行下方打开一空行并将光标置于该空行行首
O在当前行上方打开一空行并将光标置于该空行行首
s删除光标所在的一个字符,并进入编辑模式
S删除光标所在的整行,光标保留当前行,不同于 dd

命令模式

命令动作
:q 退出
:q !放弃缓冲区内容,并退出
:w 保存缓冲区内容
:wq 保存缓冲区内容,并退出
ZZ退出,仅当文件在最后一次保存后进行了修改,才保存缓冲区内容
/something在后面的文本查找 something,结合 n 键使用
?something在前面的文本查找 something,结合 n 键使用
:s /old/new用 new 替换一个 old
:s /old/new/g用 new 替换当前行所有 old
:%s/old/new/g用 new 替换所有的的 old

正常模式

光标移动

命令动作
h/←光标向左移动一个字符
j/↓光标向下移动一个字符
k/↑光标向上移动一个字符
l/→光标向右移动一个字符
nG/[n]gg将光标移到文件 n 行
G将光标移到文件末行,gg 可以移到首行
^将光标移到当前行最开始的字符
$将光标移到当前行最后一个字符
0将光标移到当前行首
w将光标每次前移一词
b将光标每次倒退一词
%跳转到匹配的项目上,([{}])
f{char}将光标移至同一行的下一个{char}字符
F{char}将光标移至同一行的上一个{char}字符
t{char}将光标移至同一行的下一个{char}字符前
T{char}将光标移至同一行的下一个{char}字符后
;配合 f & t,重复一次
,配合 f & t,反向重复一次
H移动至屏幕顶部一行
M移动至屏幕中间一行
L移动至屏幕底部一行
zt将当前行移动至屏幕顶部
zz将当前行移动至屏幕中间
zb将当前行移动至屏幕底部
ctrl+U向上翻半页
ctrl+B上一页
ctrl+D向下翻半页
ctrl+F下一页
n向后查找下一个
N向前查找下一个
g;上一个修改的地方
g,下一个修改的地方
*向下搜索光标所在的词
g*向下搜索搜标所在的词,部分符合
#向上搜索光标所在的词
g#向上搜索光标所在的词,部分符合

复制剪贴

命令动作
x剪切光标位置上的字符
r代替光标位置上的字符
cc改写整行
c[n]w改写 n 个词
c[n]c改写 n 行
d可视模式剪切,也可以加左右方向键进行剪切
dd剪切整行
d[n]w剪切 n 个词汇, l,h,方向键替换 w 可以选择剪切方向
d[n]d删除 n 行
y可视模式复制,也可以加左右方向键进行赋值
yy\Y复制整行
y[n]w赋值 n 个词汇,l,h,方向键替换 w 可以选择复制方向
y[n]y复制 n 行
ci[ di[ yi[修改,删除,复制[]之间的内容
ca[ da[ ya[修改,删除,复制[]之间的内容, 包含[]
p在当前行后面插入此前被复制或剪切的行
P在当前行前面插入此前被复制或剪切的行
u撤销最近一次所做的修改
ctrl+R取消最近的一次撤销
<<向左缩进一个宽度
>>向右缩进一个宽度
e重新加载文件
e!放弃当前修改,强制重新载入

多标签页

命令动作
tabe\tabnew加上文件名,在新标签页打开文件,否则打开一个空缓冲区
gt\tabn移动至下一个标签页
gT\tabp移动至上一个标签页
[n]gt切换到第 n 个标签页
tabc[lose]关闭当前标签页
tabo[nly]关闭其他标签页
tabs列出所有的标签页
:bd 关闭 buffer

记录

  1. q<缓冲器名称> 开始进行操作
  2. 操作完毕,在正常模式下按 q 记录完毕
  3. @<缓冲器名称> 执行
  4. [num]@<缓冲器名称> 多次执行

参考链接


More Posts

# 闭包

5 min read

闭包( closure ), 也叫词法闭包( lexical closure )或函数闭包( function closure )。语义上,闭包是一个保存了函数及其环境的记录。