Vim ---终究开始认真的研究你了
听雨十载闻Vim,不如下手炒一炒。 若得香味可还行,便把妙方视旁人。 |
Vim的模式
- 一般模式:终端输入
vim xx.txt
,刚(或按ESC键)进入即为**一般模式**
(或按ESC键),是用来对文本进行处理,我们按键输入类似快捷键,可以对文本进行复制、粘贴、删除、查询等操作 - 输入模式:接着按键盘上的
i
就进入**输入模式**
,就可以输入文字代码了。当然还有其他方式进入输入模式,如:a
键也可以。 - 命令模式:在
**一般模式**
下,输入英文冒号:
即可进入到**命令模式**
Vim的移动操作 --一般模式
在执行移动操作时,首先要确定移动单位:一个字符、一个单词、一个句子、一行、一段落、一屏、一页。接着可以在移动单位前加上数字,表示移动距离,如8h就表示向左移动8个字符
一个字符 | |||
h | j | k | l |
←左 | ↓下 | ↑上 | →右 |
一个单词 | |||||
w | W | b | B | e | E |
下一个单词词首 | 下一个字符串词首(空白为分割) | 上一个单词词首 | 上一个字符串词首 | 下一个单词词尾 | 下一个字符串词尾 |
* | # | % | |||
移动到光标所在单词的下一个单词 | 移动到光标所在单词的上一个单词 | 左右括号部分切换 |
行间 | |||||
0 | $ | ^ | nG | :n | 50% |
当前行行首 | 当前行行尾 g_ 本行最后一个不是blank字符的位置 | 当前行第一个非空字符 | 当前文件第n行 | 当前文件第n行 | 当前文件文件 |
f | F | t | T | 2fe | ;和, |
移动到当前行光标右侧的指定字符上 | 移动到当前行光标左侧的指定字符上 | 移动到当前行光标右侧的指定字符前 | 移动到当前行光标左侧的指定字符后 | 表示移动到光标右侧第2个‘e’字符上 | ;重复前一次输入的f,t,F,T命令,反方向重复 |
段落 | |
{ | } |
当前段落末尾(隔行为一段) | 当前段落开头(隔行为一段) |
文件 | |||
:0或者gg | :$或者G | / | ? |
当前文件第一行行首 | 当前文件最后一行行首 | 向后查询 | 向前查询 |
屏幕参照移动 | ||
H | M | L |
移动到屏幕第一行 | 移动到屏幕中间一行 | 移动到屏幕最后一行 |
翻页 | |||
Ctrl+f | Ctrl+b | Ctrl+u | Ctrl+d |
向后滚动一页 | 向前滚动一页 | 向前滚动半页 | 向后滚动半页 |
Vim的文本操作 --一般模式
Vim的删除操作
x | dd | dt |
---|---|---|
删除当前光标所在的一个字符 | 删除当前行,并把删除的行存到剪贴板里 | dt" → 删除所有的内容,直到遇到双引号" |
Vim的粘贴操作
p | yy |
---|---|
粘贴剪贴板 | 拷贝当前行 |
Vim的文本大小写操作
gU | gu |
---|---|
变大写 | 变小写 |
Vim的撤销操作
u | Ctrl+r |
---|---|
撤销 | 反撤销 |
Vim的插入操作
a | o | O | cw |
---|---|---|---|
在光标后插入 | 在当前行后插入一个新行 | 在当前行前插入一个新行 | 替换从光标所在位置后到一个单词结尾的字符 |
Vim的重复操作
. | N<command> |
---|---|
重复上一次的命令 | 重复某个命令N次 100idesu [ESC] |
ye,从当前位置拷贝到本单词的最后一个字符。
0y$ ,复制整行
Vim的区域操作 --一般模式
<action>a<object> 或 <action>i<object>
- action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
- object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]。
一个字符串 (map (+) ("foo")).而光标键在第一个 o 的位置
vi" → 会选择 foo.
va" → 会选择 "foo".
vi) → 会选择 "foo".
va) → 会选择("foo").
v2i) → 会选择 map (+) ("foo")
v2a) → 会选择 (map (+) ("foo"))
Vim的块操作 --一般模式
块操作,典型的操作(1)–多行行首同步插入:0 <C-v> <C-d> I-- [ESC]
- ^ → 到行头
- → 开始块操作
- → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
- I-- [ESC] → I是插入,插入“–”,按ESC键来为每一行生效。
块操作,典型的操作(2)–多行行尾同步插入:<C-v> <C-d> $A>&2[ESC]
- <C-v>
- 选中相关的行 (可使用 j 或 或是 /pattern 或是 % 等……)
- $ 到行最后
- A, 输入字符串,按 ESC。
Tip:
在Windows下的vim,你需要使用 而不是 , 是拷贝剪贴板。
Vim的文本操作 --命令模式
|:wq| :e <path/to/file> | :w | :saveas <path/to/file>|
|–|--|–|--|
| 存盘 + 退出 (:w 存盘, :q 退出) (w 后可以跟文件名) | 打开一个文件 | 存盘 |另存为 <path/to/file>|
|:x, ZZ 或 :wq|:q! |:qa! |:bn 和 :bp |
|保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)|退出不保存|强行退出所有的正在编辑的文件,就算别的文件有更改。|你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(使用:n到下一个文件)|
Vim的分屏: :split 和 vsplit.–命令模式
-
:split → 创建分屏 (:vsplit创建垂直分屏)
-
<Ctrl-w><dir> : dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一个,其用来切换分屏。
-
<Ctrl-w>_ (或 |) : 最大化尺寸 (| 垂直分屏)
-
<Ctrl-w>+ (或 -) : 增加尺寸
-
<Ctrl-w> h 跳转到左边的窗口
-
<Ctrl-w> j 跳转到下边的窗口
-
<Ctrl-w> k 跳转到上边的窗口
-
<Ctrl-w> l 跳转到右边的窗口
-
<Ctrl-w> t 跳转到最顶上的窗口
-
<Ctrl-w> b 跳转到最顶下的窗口
-
:only 仅保持当前窗口打开
-
<Ctrl-w> o 或者 :q #退出当前所在分屏
Vim的自动提示: <Ctrl-n> 和 <Ctrl-p>–输入模式
Vim 宏录制
- qa 把你的操作记录在寄存器 a。
- 于是 @a 会replay被录制的宏。
- @@ 是一个快捷键用来replay最新录制的宏。
示例
在一个只有一行且这一行只有“1”的文本中,键入如下命令:
qaYp<C-a>q→
qa 开始录制
Yp 复制行.
<C-a> 增加1.
q 停止录制.
@a → 在1下面写下 2
@@ → 在2 正面写下3
现在做 100@@ 会创建新的100行,并把数据增加到 103.
Vim 可视化选择v,V,<C-v>
一但被选好了,你可以做下面的事:
- J → 把所有的行连接起来(变成一行)
- < 或 > → 左右缩进
- = → 自动给缩进