vim

光标移动

h                   光标左移,同 <Left> 键
j                   光标下移,同 <Down> 键
k                   光标上移,同 <Up> 键
l                   光标右移,同 <Right> 键
CTRL-F              下一页
CTRL-B              上一页
CTRL-U              上移半屏
CTRL-D              下移半屏
0                   跳到行首(是数字零,不是字母O),效用等同于 <Home> 键
^                   跳到从行首开始第一个非空白字符
$                   跳到行尾,效用等同于 <End> 键
gg                  跳到第一行,效用等同于 CTRL+<Home>
G                   跳到最后一行,效用等同于 CTRL+<End>
nG                  跳到第n行,比如 10G 是移动到第十行
:n                  跳到第n行,比如 :10<回车> 是移动到第十行
10%                 移动到文件 10% 处
15|                 移动到当前行的 15列
w                   跳到下一个单词开头 (word: 标点或空格分隔的单词)
W                   跳到下一个单词开头 (WORD: 空格分隔的单词)
e                   跳到下一个单词尾部 (word: 标点或空格分隔的单词)
E                   跳到下一个单词尾部 (WORD: 空格分隔的单词)
b                   上一个单词头 (word: 标点或空格分隔的单词)
B                   上一个单词头 (WORD: 空格分隔的单词)
ge                  上一个单词尾
)                   向前移动一个句子(句号分隔)
(                   向后移动一个句子(句号分隔)
}                   向前移动一个段落(空行分隔)
{                   向后移动一个段落(空行分隔)
<enter>             移动到下一行首个非空字符
+                   移动到下一行首个非空字符(同回车键)
-                   移动到上一行首个非空字符
H                   移动到屏幕上部
M                   移动到屏幕中部
L                   移动到屏幕下部
fx                  跳转到下一个为 x 的字符,2f/ 可以找到第二个斜杆
Fx                  跳转到上一个为 x 的字符
tx                  跳转到下一个为 x 的字符前
Tx                  跳转到上一个为 x 的字符前
;                   跳到下一个 f/t 搜索的结果
,                   跳到上一个 f/t 搜索的结果
<S-Left>            按住 SHIFT 按左键,向左移动一个单词
<S-Right>           按住 SHIFT 按右键,向右移动一个单词
<S-Up>              按住 SHIFT 按上键,向上翻页
<S-Down>            按住 SHIFT 按下键,向下翻页
gm                  移动到行中
gj                  光标下移一行(忽略自动换行)
gk                  光标上移一行(忽略自动换行)

插入模式:进入退出

INSERT MODE - 由 i, I, a, A, o, O 等命令进入插入模式后

文本编辑

复制粘贴

文本对象 - c,d,v,y 等命令后接文本对象,一般为:<范围 i/a><类型>

查找替换

VISUAL MODE - 由 v, V, CTRL-V 进入的可视模式

位置跳转

文件操作

已打开文件操作

窗口操作

标签页

书签

常用设置

帮助信息

外部命令

Quickfix 窗口

拼写检查

代码折叠

宏录制

其他命令

网络资源

TIPS

  • 永远不要用 CTRL-C 代替 完全不同的含义,容易错误中断运行的后台脚本

  • 很多人使用 CTRL-[ 代替 ,左手小指 CTRL,右手小指 [ 熟练后很方便

  • 某些终端中使用 Vim 8 内嵌终端如看到奇怪字符,使用 :set t_RS= t_SH= 解决

  • 某些终端中使用 Vim 8.2+ 会看到一些奇怪字符,使用 :set t_TI= t_TE= 解决

  • 某些终端中使用 NeoVim 如看到奇怪字符,使用 :set guicursor= 解决

  • 使用 MS-Terminal 如果进入 Vim/NVim 会默认替换模式设置 :set t_u7= 解决

  • 多使用 ciw, ci[, ci", ci( 以及 diw, di[, di", di( 命令来快速改写/删除文本

  • 在行内左右移动光标时,多使用w b e或W B E,而不是h l或方向键,这样会快很多

  • SHIFT 相当于移动加速键, w b e 移动光标很慢,但是 W B E 走的很快

  • 自己要善于总结新技巧,比如移动到行首非空字符时用 0w 命令比 ^ 命令更容易输入

  • 在空白行使用 dip 命令可以删除所有临近的空白行,viw 可以选择连续空白

  • 缩进时使用 >8j >} ap =i} == 会方便很多

  • 插入模式下,当你发现一个单词写错了,应该多用 CTRL-W 这比 快

  • y d c 命令可以很好结合 f t 和 /X 比如 dt) 和 y/end

  • c d x 命令会自动填充寄存器 "1 到 "9 , y 命令会自动填充 "0 寄存器

  • 用 v 命令选择文本时,可以用 o 掉头选择,有时很有用

  • 写文章时,可以写一段代码块,然后选中后执行 :!python 代码块就会被替换成结果

  • 搜索后经常使用 :nohl 来消除高亮,使用很频繁,可以 map 到 上

  • 搜索时可以用 CTRL-R CTRL-W 插入光标下的单词,命令模式也能这么用

  • 映射按键时,应该默认使用 noremap ,只有特别需要的时候使用 map

  • 当你觉得做某事很低效时,你应该停下来,u u u u 然后思考正确的高效方式来完成

  • 用 y复制文本后,命令模式中 CTRL-R 然后按双引号 0 可以插入之前复制内容

  • 某些情况下 Vim 绘制高亮慢,滚屏刷新慢可以试试 set re=1 使用老的正则引擎

  • Windows 下的 GVim 可以设置 set rop=type:directx,renmode:5 增强显示

References

Last updated