Vim 是高度可配置的,但为了从零开始,我们还是用出厂配置来学习 vim.
其命令如下:
vim -u NONE -N
其中:
- 参数
-u NONE
让 Vim 启动时不加载 .vimrc 文件。而 .vimrc 是 Vim 的配置文件,因此该参数保证了定制项和插件被禁用。 - 参数
-N
指 'nocompatible', 用于防止进入 vi 兼容模式。
进入文件时 输入 ZZ 退出
-------------------| |------------->
| |
| |输入 v 进入
| |-------------> 视图模式(visual)
| |
\/ |
|-------------- 命令模式 <---------- |
| 输入 i, a, o 等 /\ | 回车 |
| | | |
\/ ESC | | 按下 ':' |
输入模式 ----------| |-------> 命令编辑模式
对于文本:
This is a line.
在命令模式下, 将光标落在需要删除的字符上,按下 x
键,则会将当前字符删除。
例如,当光标落在 T
处,按下 x
键,其结果变为
his is a line.
还是上述文本:
This is a line
在命令模式下,若光标落在 T
处,依次按下 5x
, 其结果变为
is a line
即:当依次按下 n
(n 表示数字) 和 x
时,会删除 n 个字符。
这种组合键具有通用性。
对于文本:
is a line
假设我们上次输入的命令为:5x
, 则此时光标会落在 i
处,此时,在命令模式下输入 .
, 则会重复执行上次的命令,其结果为:
line
- 剪贴当前行:
dd
. - 剪贴 n 行:
n dd
.
对于文本:
task1
a. subtask1
b. subtask2
c. subtask3
可以使用 >G
命令来使层级更明确,在命令模式下,假设此时光标落在 a
处,输入 >G
之后,当前行到末尾处都会有一个缩进,即效果为:
task1
a. subtask1
b. subtask2
c. subtask3
注意区分大小写,是 >G
而不是>g
.
在命令模式下
- h/backspace: 左
- j: 下
- k: 上
- l/space: 右
- w: 以单词为颗粒度进行移动,如果已经到达行尾,则跳转下一行
- $: 当前行的末尾
- ^: 当前行的头部
- shift + g: 移动到文档末尾
对于文本
This is a line.
若光标落在字符 e
上时,若按下 i
, a
, o
, 均会进入插入模式,但是初始时效果有所不同:
i
命令,进入插入模式,光标落在e
之前。I
命令,进入插入模式,光标落在这一行的头部。a
命令,进入插入模式,光标落在e
之后。A
命令,进入插入模式,光标落在这一行的尾部。o
命令,进入插入模式,新建一行,光标落在新建一行的头部。O
命令,进入插入模式,光标落在前一行的头部。
- 复制当前行:
yy
; - 复制多行:
n yy
,n
表示数字; - 复制,从当前光标到当前行结尾:
y$
.
对于文本:
hello world
若光标落在 e
上时,按下:
viw
可以选中单词hello
, 其含义为 visual in word.ve
可以选中ello
;vw
: 可以选中ello w
.
命令模式下按下 /
进入查找模式,输入要查找的字符并按下回车(该模式下支持正则匹配),Vim 会跳转到当前光标向后的第一个匹配上,
随后:
n
表示查找下一个;N
表示查找上一个;