写作与写代码其实是两件非常不同的事情,当我们写代码的时候其实大部分时间都在思考代码结构与编写模块上,这使得我们经常在文件之间切换,浏览,阅读,编辑代码
作为程序员选择一个适合自己的代码编辑器是十分重要的
学习一个编辑器
学习一个编辑器的过程包以下的步骤
- 阅读教程并摸索
- 坚持使用这个编辑器来完成自己的编辑工作
- 折腾一些更高效率的操作(插件/按键重映射)
学习编辑器后效率是曲线上升的,最开始可能会降低编写代码效率,但是随着使用时间的上升,大约在20小时之后,编写代码的效率便会回到原来的水平,然后效率会越用越高
vim
vim起源于vi编辑器,是互联网初期发展时期的产物,同时现在也在不断更新与完善,出现了许多基于vim的编辑器比如neovim这类功能更加强大的编辑器,但是底层思想依旧没有改变
vim哲学
课程上这一节叫做vim的哲学,但是我认为这个应该叫vim的优势区间
在我们编程的时候我们会把大量的时间花费字啊阅读和编辑代码而不是从0 to 1 的书写上.所以,vim的多模态功能便起到了作用
- vim对插入文字以及操控文字有着不同的摸索
- vim是可编程的,其本身的一些接口都是一个程序语言
- vim几乎只使用纯粹的键盘来进行编辑工作,避免了使用鼠标来提升编辑速度
编辑模式
Tips
在vim的按键中,我们需要区分大小写即
X
与x
的区别,前者需要我们键入Shift + x
而后者只需要键入x
即可
同时还有约定俗称的表示方法如<C-v>
表示Ctrl + v
,有时候也会写成^v
以及<CR>
表示回车
vim的设计以大多数时间都在阅读,浏览和进行少量改动为基础,因此其具有多种操作模式
- 正常模式: 在文件中四处移动光标进行修改
- 插入模式: 插入文本
- 替换模式: 替换文本
- 可视化模式(又可以细分为一般,行,块模式): 选择文本块
- 命令模式: 执行命令
在不同模式中敲击键盘按键的意义也不一样,当你在插入模式中按下 x
时候会输入字母x,但是在正常模式下会删除当前光标所在的字母,而在可视化模式下会删除所选择的文本块
在默认设置下,vim会在左下角显示当前的模式.启动时候的默认模式是正常模式.
我们可以按下 ESC
从任何其他的模式退回到正常模式,而在正常模式下
- 按
i
进入插入模式(insert
) - 按
R
进入替换模式(Replace
) - 按
v
进入(一般)可视化模式(view
)- 按
V
进入(行)可视化模式 - 按
C-v
进入(块)可视化模式
- 按
- 按
:
进入命令模式
基本操作
插入文本
在正常模式下按 i
进入插入模式,在轻度使用vim进行编辑工作的话,前面操作 + 会插入文本 + 会保存退出其实已经完全够用了把vim用成记事本
缓存,标签页,窗口
vim会维护一系列打开的文件,然后这些被打开的文件被称为”缓存”. 一个Vim会话包含一系列标签页,每个标签页包含一系列窗口(分隔窗口),窗口只是缓冲区的视图。一个缓存可以在多个窗口打开,甚至在同一个标签页内的多个窗口打开
Vim默认打开一个标签页,这个标签页也包含一个窗口
命令行
在正常模式下键入 :
进入命令模式,在键入 :
后,光标会跳转到屏幕下方的命令行(当然如果你使用了插件或者Lazyvim可能会有所不同)
一些常见的vim命令
:q
退出(关闭窗口)(随机字符串生成器):w
写入(保存):wq
保存并退出:e{文件名称}
打开要编辑的文件:ls
显示打开的缓存:help {标题}
打开帮助文档:help :w
打开:w
命令的帮助文档:help w
打开w
移动的帮助文档
vim接口
vim的设计思想表示vim的界面本身就是一个程序语言,键入操作(以及其助记名)本身就是命令.这些命令可以组合使用.这就使得移动和编辑变得更加高效,特别是一旦形成了肌肉记忆
移动
多数的时候在我们会在正常模式下,使用移动命令在缓存中进行移动.在Vim中移动也被称为”名称”,因为其指向文本块
- 基本移动:
hjkl
(左上下右) - 词:
w
下一个词,b
词初,e
词尾 - 行:
0
行初,^
第一个非空格字符,$
行尾 - 屏幕:
H
屏幕首行,M
屏幕中间,L
屏幕底部 - 翻页:
<C-u>
上翻,<C-d>
下翻 - 文件:
gg
文件头,G
文件尾 - 行数:
:{行数}<CR>
或者{行数}G
- 杂项:
%
(找到配对,比如找到括号对以及注释对之类的) - 查找:
f{字符}
,t{字符}
,F{字符}
,T{字符}
- 查找/到 → 向前/向后的字符
,
/;
用于导航匹配
- 搜索:
/{正则表达式}
,n
/N
用于导航匹配
选择
现在我们可以使用键盘代替我们的鼠标,我们可以采用编辑命令与移动命令来组合完成对文本的编辑,vim的编辑命令也被称为”动词”,因为动词可以施动与名词
i
进入编辑模式- 对于操作/编辑文本可以使用退格键完成
O/o
在 之上/之下 插入d{移动命令}
删除{移动命令}的行列- 例如
dw
删除词,d$
删除到行尾 ,d0
删除到行头
- 例如
c{移动命令}
改变{移动命令}- 等价与
d{移动命令}
后加i
- 例如,
cw
等价于dwi
- 等价与
x
删除字符 (等价于dl
)s
替换字符 (等价于xi
)- 可视化模式 + 操作
- 选择文字,
d
删除 或c
改变
- 选择文字,
u
撤销 ,<C-r>
回撤y
复制p
粘贴- 还有一些不在此处列出
计数
我们可以使用一些数字来结合名词或者动词
3w
向后移动三个词5j
向下移动5行7dw
删除7个词
修饰语
你可以使用修饰语来改变”名词”的意义,修饰语有 i
表示在内部, a
表示周围
ci(
改变当前括号内的内容ci[
改变当前方括号的内容da'
删除一个单引号字符串,包括周围的单引号