vim (一)
很久没有写博客了,想了想决定坚持写下去。
今天分享的是一个叫vim
的editor软件,这篇博客的标题就来自于它。维基百科上有一个叫编辑器之战的词条,参战双方分别是vim和emacs,很有意思。:wq
是vim中的保存退出命令,经常会用到。 vim
最初叫vi
(Visual Editor), 是Bill Joy在1976年为BSD Unix系统开发的。vim则是对vi做了改进,即vi improved。
先说说vim的好处,头一个是速度快。在使用vim编辑代码时,不需要频繁地使用鼠标,因为vim使用键盘来移动光标,仅这一点,vim就比其他编辑器快了不少。另一个好处是适用的地方很多,比如下载一个vimium
浏览器插件,在浏览网页的时候就可以用简单的vim语法来代替鼠标,而另一个插件wasavi
则可以让你在网页上的文本输入框中使用vim语法,不仅网页,一众编辑器都支持vim语法,比如在vscode
和Qt Creator
中都可以使用vim语法来编辑(不过部分vim操作暂未实现)。
接下来总结一些vim语法和编辑器命令,持续更新。
Part One
前言
vim语法是什么:vim语法指的是你在vim的normal
模式下执行的操作,比如完成删除光标所在行的代码这一操作只需在normal
模式下执行dd
。
vim模式是什么:vim的模式可以在编辑器左下角找到。对于初学者来说两种模式就够了:insert
模式用于编写代码,normal
模式用于执行vim操作,比如光标移动、复制粘贴等。本文内容一半是normal下的vim操作。
编辑器命令:对vim编辑器的设置,比如:syntax on
开启vim的语法高亮,:vs
垂直分屏。要在normal模式下执行。这是本文另一半的内容
如何下载vim:建议先在vscode里安装一个vim插件,体验一下,英文好的推荐下载一个learn vim插件,边学边练,效果非常好。
linux与vim:这两都跟Unix有很大关系。不妨把学习vim当作学习linux的第一步,毕竟使用linux的过程中需要大量的文本编辑,而且现在的linux发行版大多都默认安装了vim。
打开/关闭vim
如果使用的是linux上的vim或者windows的gvim,首先遇到的将会是如何新建文件,如何以某个文件名保存以及如何退出vim等问题。
- 新建时指定文件名
比如在linux命令行中执行vim helloworld.c
新建一个名为helloworld.的C源代码文件,编辑结束后执行:wq
保存该文件并退出。
- 保存时指定文件名
比如执行vim
打开vim编辑器但不指定文件名,编辑结束后执行:wq helloworld.c
将文件保存为helloworld.c并退出。
模式切换
打开vim时,默认处于normal
模式,这时执行vim操作i
就切换到了insert
模式。输入字符完毕后,按下Esc
或者Ctrl+[
切换到normal
。如果长期用vim,一般会将Caps
大写锁定映射成Esc
。
光标移动
normal
模式下:
- 单个字符移动:
k
上j
下h
左l
右
- 单个字词移动:
w
跳转到下一字词开头e
跳转到下一字词末尾b
跳转到上一字词开头
- 单个文本串移动:
这里的“文本串”特指以空格分隔的文本
与单个字词类似地:
W
跳转到下一个以空格分隔的文本串开头E
…B
…
- 行首行末移动:
数字0
移动到当前行的首字母,$
移动到尾字母
- 上下行移动:
j
下一行k
上一行 (单行代码压缩成多行的情况使用gj
,gk
)
- 文本首尾跳转:
G
跳转到文本最后一行,gg
跳转到文本首行
复制粘贴删除行
normal
下:
yy
复制光标所在行p
粘贴到光标所在行的下一行P
粘贴到上一行dd
删除光标所在行并且待在normal模式cc
删除光标所在行并且切换insert模式
undo与redo
u
撤销Ctrl+r
重做
vim语法
如果熟练掌握上述vim操作,下面这些就不难了:
- vim操作与数字结合
行/字词跳转:比如
3j
向下跳转到第3行4e
跳转到第4个字词末尾 以及3B
等…复制粘贴:
y1k
(相当于yk)复制当前行和上一行y2j
复制当前行和下两行 以及2P
等…
- vim操作互相结合
- 删除下一个字符/字词:
dl
/dw
- 删除当前行和下一行并切换insert模式:
cj
- 复制/删除当前行光标之前和后的文本:
y0
/d0
和y$
/d$
事实上这些vim操作不是很好分类,列出的也只是一些简单例子
假如当前行有10个字母a
, 光标位于第一个字母a上执行4d2l
你将剩下几个a呢?
只有多多练习使用vim最后才能达到随心所欲的效果 👍
搜索与重复
- 搜索
/item1
:在文本中搜索item1
,按下/
后vim左下角会变成搜索的目标字词,输入完要搜索的字词后按下回车,vim会自动向后跳转到首个搜索结果,同时左下角会显示当前光标下的字词是第几个搜索结果。
?item1
:同/,只不过是向前跳转到首个搜索结果
- 跳转
n
:跳转到下一个搜索结果
N
:跳转到上一个搜索结果
- 重复
.
操作用于重复上一vim操作,经常跟/
一起使用。
比如文本中有10个print
,需要搜索后逐一跳转并删除该字词。首先搜索print,执行/print
后按下回车,光标向后跳转到第一个匹配的搜索结果,执行dw
删除首个print,之后再执行9次 n.
操作即可。
快速搜素光标下的字词
gd
操作*
操作
编辑器命令 : 分屏
- 分屏
:vs
垂直方向分屏 左右分(vertical split):sp
水平方向分屏 上下分
- 分屏间切换
Ctrl+w j
:从上半屏到下半屏Ctrl+w l
:从左半屏到右半屏
- 关闭当前窗口/分屏
Ctrl+w q
- 交换分屏位置
Ctrl+w Shift+l
:光标在左屏时执行,交换左右分屏,上下类似