Vim编辑模式
vim具有多个操作模式
- 正常模式:着重于在文本中移动光标进行修改
- 插入模式:插入文本
- 替换模式:替换文本
- 可视化模式:其中又可以分为一般、行、块,选中文本块
- 命令模式:执行命令
不同的模式赋予了按键不同的意义,也是使得vim那么强大丝滑的原因(只要掌握的好)
esc
从任何模式返回到正常模式,其他模式都要从正常模式进入,i
插入模式,R
替换模式,v
一般可视模式,V
(大写)可视行,^V
可视块模式,:
命令模式、
基本操作
插入文本
i
进去,其余就打字就好了
有一个自动补齐功能,在 Insert 模式下,可以输入一个词的开头,然后按 <C-p>或是<C-n>
,自动补齐功能就出现l
缓存、标签页、窗口
Vim会维护一系列打开的文件,称为“缓存”。一个Vim包括了一系列标签页,每个标签页也包含了一些列窗口, 每个窗口显示了一个缓存。和浏览器不一样,Vim中一个缓存可以在多个窗口打开,可以方便查看一个文件的不同部分
默认下是打开包含一个窗口的一个标签页
命令行模式
在正常模式下键入 :
进入命令行模式。 这个模式有很多功能,包括打开,保存,关闭文件,以及 退出 Vim。
-
:q
退出(关闭窗口) -
:w
保存(写) -
:wq
保存然后退出 -
:e {文件名}
打开要编辑的文件 -
:ls
显示打开的缓存 -
:help {标题}
打开帮助文档
:help :w
打开:w
命令的帮助文档:help w
打开w
移动的帮助文档
移动
-
基本移动:
hjkl
(左, 下, 上, 右) -
词:
w
(下一个词),b
(词初),e
(词尾, 一个词的最后一个字母前) -
行:
0
(行初),^
(第一个非空格字符),$
(行尾),g_
到本行最后一个不是blank字符的位置 -
屏幕:
H
(屏幕首行),M
(屏幕中间),L
(屏幕底部) -
翻页:
Ctrl-u
(上翻),Ctrl-d
(下翻) -
文件:
gg
(文件头),G
(文件尾) -
行数:
:{行数}<CR>
或者{行数}G
({行数}为行数) -
杂项:
%
(找到配对,比如括号或者 /* */ 之类的注释对) -
查找:
f{字符}
,t{字符}
,F{字符}
,T{字符}
- 查找/到 向前/向后 在本行的{字符}
,
/;
用于导航匹配
(只能查找单个字符, f,t是向前,F,T是向后,f/F是移动到目标字符前)
-
搜索:
/{正则表达式}
,n
/N
用于导航匹配 -
%
: 匹配括号移动,包括(
,{
,[
. (需要把光标先移到括号上) -
*
和#
: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
选择
可视化模式:
- 可视化:
v
- 可视化行:
V
- 可视化块:
Ctrl+v
可以用移动命令(h,j,k,l)来选中。
主要命令格式为 <action> <obejct>
or `
- action可以是任何的命令,如
d
(删除),y
(拷贝),v
(可视模式选择)。 - object 可能是:
w
一个单词,W
一个以空格为分隔的单词,s
一个句字,p
一个段落。也可以是一个特别的字符:"、
'、
)、
}、
]。
编辑
所有需要用鼠标做的事, 都可以用键盘:采用编辑命令和移动命令的组合来完成。 这就是 Vim 的界面开始看起来像一个程序语言的时候。Vim 的编辑命令也被称为 “动词”, 因为动词可以施动于名词。
-
O
/o
在之上/之下插入行 -
d{移动命令}
删除 {移动命令},并把删除的行存到剪贴板里,准确来说应该是剪切
- 例如,
dw
删除词,d$
删除到行尾,d0
删除到行头,dl
单个字符。
- 例如,
-
c{移动命令}
改变 {移动命令},会将原先的词先删去,然后自动变成插入模式,等同于
d{移动命令}
再i
- 例如,
cw
改变词
- 例如,
-
x
删除字符(等同于dl
) -
s
替换字符(等同于xi
) -
可视化模式 + 操作
- 选中文字,
d
删除 或者c
改变
- 选中文字,
-
u
撤销,<C-r>
重做 -
y
复制 / “yank” (其他一些命令比如d
也会复制)按y后按方向键左右表示左/右复制,yy
是拷贝当前行,相当于ddP
, -
p
粘贴(当前位置之前),P
当前位置之后 -
~
改变字符的大小写 -
搜索替换
%s /oldString /newString
%s/foo/bar/g
在整个文件中将 foo 全局替换成 bar
计数
可以用计数和操作结合起来表示执行若干次
3w
向前移动三个词5j
向下移动5行7dw
删除7个词3yy
表示向下复制3行,3y
表示向左(右,靠左右方向键区分)3fa
表示当前行查找第三个出现的a.
→ (小数点) 可以重复上一次的命令100idesu [ESC]
→ 会写下 “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu- N
G
→ 到第 N 行 (意命令中的G是大写的),一般使用 : N 到第N行
修饰语
可以用修饰语改变“名词”的意义。修饰语有 i
,表示“内部”或者“在内“,和 a
, 表示”周围“。
ci(
改变当前括号内的内容ci[
改变当前方括号内的内容da'
删除一个单引号字符串, 包括周围的单引号
这些修饰语可以结合区域模式,比如vi"
就会选择单引号里面的内容
-
<start pos>
<command>
<end pos>
例如
0y$
命令意味着:0
→ 先到行头y
→ 从这里开始拷贝$
→ 拷贝到本行最后一个字符
可以输入
ye
,从当前位置拷贝到本单词的最后一个字符。也可以输入
y2/foo
来拷贝2个 “foo” 之间的字符串。还有很多时间并不一定你就一定要按y才会拷贝,下面的命令也会被拷贝:
-
d
(删除 ) -
v
(可视化的选择) -
gU
(变大写) -
gu
(变小写) -
……
太多啦太多啦,宏录制和分屏我等以后再说吧