vim 编程-优雅(二)
Vim 常用的有三种模式,但是不能孤立的用,要结合起来用。
Vim 的规则非常简单,但是组合起来非常强大,提供了一套文本编辑的“高级"语言。
Vim 的基本语法:动词 + [数量、介词] + 名词
当然,Vim 语言充满了名词做动词的情况
模式
- Normal,用来移动和编辑
- Insert,用来输入
- Visual/Selection,用来选择编辑块
Esc Insert -> Normal
i/I/o/O/c/a/A Normal -> Insert
v / V Normal -> Visual
按键绑定
jj -> esc
enter -> :
caps lock -> ctrl
移动
Normal mode
常规操作
hjkl 左上下右
w/b/e 按照单词移动
{ } 按照段落移动
% 在闭合的括号之间移动
gg 回到文档最上端
G 回到文档最底端
0 回到行首
$ 回到行尾
带上数量
1j 向下移动一行
8j 向下移动八行
移动到某一行
:12<enter>
移动到 12 行12gg
移动到 12 行
搜索移动
fa
: 向右移动到下一个 ata
: 向右移动到下一个 a 的前一个字符Fa
: 向左移动到下一个 aTa
: 向左移动下一个 a 的前一个字符
我常用f/F
除此之外,可以直接按 \
进入搜索模式,去寻找目标单词或字母
Insert mode
插入模式其实就是其他编辑器的编辑模式,用来输入信息。但是在插入模式中,我们可以直接移动光标、删除等。这进一步增加了 Vim 的灵活性,但是这仅仅是相对而言,移动的次数较少的情况下。
在插入模式下,Vim 的光标移动遵循了一半 Bash shell 的快捷键
Ctrl+p up
Ctrl+n down
Ctrl+b left
Ctrk+f right
Ctrl+a 行首
Ctrl+h delete left 1
Ctrl+d delete right 1
Ctrl+w delete back 1 work
Ctrl+u delete back to start of line
我自己操作的时候,常常使用Ctrl+d
、ctrl+b/f
、Ctrl+w/u
Visual mode
可视模式和正常模式的移动基本上是一致的...
页面滑动
窗口移动
zz 把光标置于屏幕中间
ctrl+e 向上移动屏幕
ctrl+y 向下移动屏幕
ctrl+d 向下移动半页
ctrl+u 向上移动半页
我平时使用较多的是 zz
折叠代码块
zc 关闭代码块
zo 打开代码块
za 打开、关闭代码块
我平时使用较多的是 za
编辑
移动和编辑是 vim yyds
Vim 的动词,常常跟操作符搭配
d
: 删除,不能单独用,得跟后续操作符,比如 dd 是删除一整行,d$ 是删除直到行的末尾c
:c 跟 d 类次,但是删除完成后会进入插入模式,常用 cc 删除一行,cw 删除一个单词s
: 删除并进入插入模式S
: 等同于 ccx
: 删除当前光标下的单个字符u
: 撤销r
: 替换y
: 复制p
: 粘贴>
: 向右缩进, 比如>>
<<
<
: 向左缩进.
: 重复操作
名词,这些东西在 Vim 中成为 Text Object, 推荐使用他们进行操作,这是一种高于hjkl
移动的抽象。
w 词(可以做动词)
p 段落(可以做动词)
jk 行(可以做动词)
各种括号、引号等
s 句子
介词
i 表示里面
a 表示外面
常用操作
- 格式化代码:
==
- 注释代码:
gc{c,j,k}
- 切换 tab:
gt{tab的数字}
,1gt