Vim是一个非常强大的文本编辑器。基本上所有的类Unix系统都会内置vi编辑器,Vim就是从vi发展来的一个编辑器。
使用vim编程基本可以脱离鼠标,在服务器编程将会更加舒服,同时具有高逼格,成为别人眼中的“电影里的程序员”。
vim有很多快捷键,可以使用默认配置,也可以在.vimrc
文件中自定义配置。
我是在VScode中使用vim插件,结合两者的优点。当然快捷键也会有冲突的,可以在设置中解决冲突,如果不常用的快捷键也可以置之不顾。
vim有三种模式,分别为:normal
、insert
、visual
。
从normal模式转到insert有多种方式:
i/I
:在光标之前插入/在行首插入。a/A
:在光标之后插入/在行尾插入。o/O
:在下一行/上一行插入。s/S
:删除当前字符/当前行并插入。
根据具体的情况使用不用的快捷键,但一般使用较多的为i、a、o、O
。
从insert返回到normal模式就只有两种方式了:一种为Esc
,另一种为<C-[>
(即Ctrl+[,下文的<C->
均为Ctrl +)。
光标移动
光标移动是很重要的,基本代替鼠标的操作。之后的修改删除等操作,也要先移动到该位置才能再操作,所以移动是一切的基础。
上下左右(k、j、h、l):向上下移动一行,或左右移动一个字符。除此之外,vim的一个重要思想就是数字与操作结合。例如下移10行使用
10j
,右移10个字符使用10l
。同时vscode编辑器会在最下方显示目前的行列信息。单词移动(b、B、w、W):
b/w
为向后/前移动一个单词,B/W
向后/前移动一个大单词。(如hello-world
,是大单词'hello-world',由三个单词'hello'、'-'、'world'三个单词组成)字符移动(f、F、t、T):
f/F
向后/前查找一个字符,如fa
查找下一个a
字符。t
向后查找一个字符,并移动到该字符的前一个字符;T
向前查找一个字符,并移动到该字符的后一个字符。如abcdefg
中,tg
命令会将光标移动到f
处,Ta
命令会将光标移动到b
处。行首尾移动(
0、$
):0
移动到行首,$
移动到行尾。首尾行移动(gg、G):
gg
移动到文件的首行,G
移动到文件的尾行。页移动:使用
<C-d>/<C-u>
向上/下移动半页,使用<C-f>/<C-b>
向上/下移动一页。行定位:使用
:n
移动到第n行。如:10
快速移动到第10行。zz
将光标移动到屏幕中间,zb
将光标移动到屏幕底部,zt
将光标移动到屏幕顶部。单词定位:使用
*/#
定位当前光标下的单词,并指向下/上一个。使用
gd
定位到当前变量的声明位置。使用
%
快速定位到配对字符,如括号的另一半。最后可以使用
<C-o>
回到光标上一次的位置。
编辑文本
d指delete,是所有修改操作的基础。
删除一个字符。删除一个字符可以使用
dl
代表删除右边的一个字符,dh
为删除左边的一个字符。x
相当于dl
,删除当前光标下的字符。删除特定单词。
daw
表示delete a word,删除当前光标下的单词,使用dw/db
从当前位置删除到后一个/前一个单词。删除括号里的文本。
di(
表示delete in (
但是不会删除括号,使用da(
会删除括号及括号内的文本。同理,di{
删除花括号等等。D
表示删除本行内目前光标下后的文本。使用
dd
删除整行文本。c
类似于d
,指change
。将上述操作中的d
更换为c
后,表示,删除之后进入Insert模式。y
指yank
,复制,将上述操作中的d
更换为y
后,表示复制内容使用
r
加特定字符,代替原来光标位置的字符。如a
使用rb
后,文本变为b
。在Insert模式下删除,
ctrl+h
可以向前删除一个字符,ctrl+w
可以向前删除一个单词。如果删除错误,可以使用
u
进行撤销操作。在vscode中无论是Normal模式还是Insert模式都可以使用<C-z>
进行撤销。
基本操作
基本操作包括:查找、替换、撤销、重做、复制、粘贴、保存等。
查找使用
/
后加需要查找需要词或表达式,如/const
查找const单词,n
查找下一个,N
查找上一个。替换使用
:s/aa/bb/g
,将aa
替换成bb
,g
代表全局替换。撤销使用
u
,可以与数字结合进行多次撤销操作。重做使用
<C-r>
。复制使用
yy
复制整行,也可以使用yi'
复制引号中的内容等。粘贴使用
p
。"*y
复制内容到系统剪切板。"*p
粘贴系统剪切板中的内容。使用
:reg
列出寄存器列表。
vimium
vimium是Chrome浏览器的一个插件,可以使用vim命令操作网页。最主要的还是有逼格。
在Chrome网上应用商店下载该插件,启用之后,即可使用vim的命令操作网页。
移动
移动与在编辑器中的移动有很大的相似,有部分简化,部分删除。
在编辑器中<C-u>
上移半页,在网页中,只需要u
就可以上移半页,d
为下移半页。
移动特定行之类的在网页中,不存在此类操作。
其他移动操作一致,如10j
、gg
等。
标签操作
针对标签页的操作。
使用
yy
复制当前页的url地址,yt
复制当前页面的url并在新标签页打开。使用
p
在当前标签页打开剪切板中的url链接,使用P
在新标签页打开剪切板中的url链接。使用
t
新建一个标签。使用
J/K
切换到前/后一个标签页。使用
^
切换到上一个历史标签页。g0
切换到第一个标签页,g$
切换到最后一个标签页。使用
x
关闭当前标签页,相当于<C-w>
,使用X
恢复关闭的标签页,相当于Ctrl+shift+t
。使用
<<
将当前标签页左移,使用>>
将当前标签页右移。使用
L
向前寻找历史记录,使用H
向后寻找历史记录。
其他操作
包括页面的跳转,页面的点击等操作。
输入:使用
gi
定焦到第一个可输入文本位置。元素定位器:使用
f
打开元素定位器,在当前页面打开,使用F
在新标签页打开。刷新页面:使用
r
刷新页面。gf
选择下一个frame。在当前页面查找内容,使用
/
后接需要搜索的内容,类似于Chrome的<C-f>
快捷键。使用n
定位到下一个,使用N
定位到上一个。-
搜索框。
使用
o
从url、书签、历史记录中搜索地址,tab
键选择,回车在当前页面打开。使用O
在新标签页打开。使用
b
仅从书签搜索地址,在当前页面打开,使用B
从新标签页打开。使用
T
搜索当前浏览器打开的所有标签,相当于标签页的切换。