Open Nliuco opened 3 months ago
Gmeek-html<img src="https://nliuco.github.io/1.vim.png">
最近在学习python, 环境用的是云端linux服务器, 跟着oeasy老师用vim编辑器, 碍于之前用git合并时,命令行总是弹出的提示输入merge信息, 默认也是vim的文本编辑器, 导致只会:q的我每次都不写merge info, 因为一旦进入了vim的insert模式, 我就不能通过 ctrl shift home/end ↑/↓/←/→ 这些按键的组合键方式移动光标了, 一旦写错, 编辑起来十分痛苦. 每次看到有大佬用vim写代码都有一种敬畏感, 之前读过一篇 采访Snipaste开发者 的文章, 其中有句话我很认同: 如果想要学会一个高级工具,那学习成本自然也是要的,世界上并不存在不需要学习成本但却很强大的工具. 强大的工具通常还有一个共性,就是一旦你掌握了它,它带给你的回报远远超过你当时付出的时间和精力成本.
最近在学习python, 环境用的是云端linux服务器, 跟着oeasy老师用vim编辑器, 碍于之前用git合并时,命令行总是弹出的提示输入merge信息, 默认也是vim的文本编辑器, 导致只会:q的我每次都不写merge info, 因为一旦进入了vim的insert模式, 我就不能通过 ctrl shift home/end ↑/↓/←/→ 这些按键的组合键方式移动光标了, 一旦写错, 编辑起来十分痛苦.
:q
ctrl
shift
home/end
↑/↓/←/→
每次看到有大佬用vim写代码都有一种敬畏感, 之前读过一篇 采访Snipaste开发者 的文章, 其中有句话我很认同:
如果想要学会一个高级工具,那学习成本自然也是要的,世界上并不存在不需要学习成本但却很强大的工具. 强大的工具通常还有一个共性,就是一旦你掌握了它,它带给你的回报远远超过你当时付出的时间和精力成本.
Gmeek-html<img src="https://nliuco.github.io/2.WhyVim.png">
首先是由于Vim极其轻量, 启动或退出都十分迅速, 对于仅仅编辑文本而言, Vim完美契合“小而美”的特点, (用了很久的Sublime text也是出于这个原因), 其次是普及广, 除了windows系统, 几乎所有主流系统都预装, 甚至安卓也能用, 加上主流编辑器也支持vim, 完美做到一次学习, 到处使用!. 最后就是最重要的生态, Vim的生态极其丰富,拥有大量的插件和社区支持,可以满足各种不同的编辑需求.无论是编程开发、文本处理、还是系统运维,Vim都能提供强大的工具和高效的编辑体验. 唯一的成本, 就是学习vim需要一些时间, 而且使用习惯需要适应, 毕竟可能程序员都会提出 “如何退出vim?” 这种世纪难题......
首先是由于Vim极其轻量, 启动或退出都十分迅速, 对于仅仅编辑文本而言, Vim完美契合“小而美”的特点, (用了很久的Sublime text也是出于这个原因),
其次是普及广, 除了windows系统, 几乎所有主流系统都预装, 甚至安卓也能用, 加上主流编辑器也支持vim, 完美做到一次学习, 到处使用!.
最后就是最重要的生态, Vim的生态极其丰富,拥有大量的插件和社区支持,可以满足各种不同的编辑需求.无论是编程开发、文本处理、还是系统运维,Vim都能提供强大的工具和高效的编辑体验.
唯一的成本, 就是学习vim需要一些时间, 而且使用习惯需要适应, 毕竟可能程序员都会提出 “如何退出vim?” 这种世纪难题......
Gmeek-html<img src="https://nliuco.github.io/1.jhkl.png">
在Windows中, 常用快捷键对光标快速定位的人都应该离不开 ctrl shift home/end ↑/↓/←/→ 这些按键/组合键. 但在vim中会发现移动光标(左,下,上,右)的按键分别是h j k l.
h
j
k
l
有人说是因为 Bill Joy 在创建 vi 文本编辑器时, 用的机器机器是 ADM-3A 终端机,这台机器就是把 h j k l 键作为方向键. ( vim编辑器就是后来Bram Moolenaar基于vi开发的). 对于一个没有方向键的终端, 把手从键盘拿开去够鼠标, 当然没有直接按下键盘移动更加高效.
Bill Joy
vi
ADM-3A
vim
Bram Moolenaar
也有人说, vim编辑器出现以前, 各类键盘有所不同, 以前的键盘是不含如今多个工作区的键盘, 即: (含数字区、上下左右键区), 故含数字区、上下左右键区可能在某些情况下不生效! (如: 插入模式下, 数字区不生效! ) 总之, vim的设计初衷可能是为了在各种终端和键盘布局下提供一致的操作体验, 掌握 h j k l 这些键的使用, 对于提高编辑效率和适应各种终端环境是非常重要的, 毕竟什么键盘也不太可能少了这几个键.
Gmeek-html<img src="https://nliuco.github.io/1.jhkl.gif">
上下左右仅仅是光标移动的开始, 下列快速移动转跳都可以使用对应vim快捷键进行替换.
b
Ctrl
←
w
→
0
^
Home(插入模式亦生效)
Home
$
g_
End(插入模式亦生效)
End
gg
G
值得注意的是光标移动到行首尾的快捷键有很多, Home/End和0/$效果是一样的, 不多赘述, 具体说一下^/g_和0/$的区别:
将光标移到当前行第一个/最后一个非空白字符上: 在一行文本中,光标会移动到这一行中行首/行尾不是空格、制表符或其他空白字符的地方. 举个例子: 如果一行文本是 Hello, World! , 其中文本前后都有空格(空白字符), 使用^/ g_ 会将光标移动到H/!非空白字符上, 使用0/$会将光标移动第一个/最后一个空格上. 相比于Home/End+ ctrl + →/`ctrl + ←的组合操作, 短而快的^/g_的优势就体现出来了🐶.
将光标移到当前行第一个/最后一个非空白字符上: 在一行文本中,光标会移动到这一行中行首/行尾不是空格、制表符或其他空白字符的地方. 举个例子: 如果一行文本是 Hello, World! , 其中文本前后都有空格(空白字符), 使用^/ g_ 会将光标移动到H/!非空白字符上, 使用0/$会将光标移动第一个/最后一个空格上.
第一个
最后一个
行首
行尾
H
!
相比于Home/End+ ctrl + →/`ctrl + ←的组合操作, 短而快的^/g_的优势就体现出来了🐶.
ctrl + →
`ctrl + ←
Gmeek-html<img src="https://nliuco.github.io/1.^/g_&&0/$.gif">
接下来是一些快速翻页、转跳行的操作
Page Up
f
Page Down
u
d
:[行号]
}
{
无限进步 抢第一
Gmeek-html<img src="https://nliuco.github.io/1.vim.png">
写在前面
Gmeek-html<img src="https://nliuco.github.io/2.WhyVim.png">
一、快捷键操作
1.1 使用键盘移动光标
Gmeek-html<img src="https://nliuco.github.io/1.jhkl.png">
在Windows中, 常用快捷键对光标快速定位的人都应该离不开
ctrl
shift
home/end
↑/↓/←/→
这些按键/组合键. 但在vim中会发现移动光标(左,下,上,右)的按键分别是h
j
k
l
.有人说是因为
Bill Joy
在创建vi
文本编辑器时, 用的机器机器是ADM-3A
终端机,这台机器就是把h
j
k
l
键作为方向键. (vim
编辑器就是后来Bram Moolenaar
基于vi
开发的). 对于一个没有方向键的终端, 把手从键盘拿开去够鼠标, 当然没有直接按下键盘移动更加高效.也有人说,
vim
编辑器出现以前, 各类键盘有所不同, 以前的键盘是不含如今多个工作区的键盘, 即: (含数字区、上下左右键区), 故含数字区、上下左右键区可能在某些情况下不生效! (如: 插入模式下, 数字区不生效! ) 总之,vim
的设计初衷可能是为了在各种终端和键盘布局下提供一致的操作体验, 掌握h
j
k
l
这些键的使用, 对于提高编辑效率和适应各种终端环境是非常重要的, 毕竟什么键盘也不太可能少了这几个键.Gmeek-html<img src="https://nliuco.github.io/1.jhkl.gif">
上下左右仅仅是光标移动的开始, 下列快速移动转跳都可以使用对应vim快捷键进行替换.
b
Ctrl
+←
w
Ctrl
+→
0
/^
/Home(插入模式亦生效)
Home
$
/g_
/End(插入模式亦生效)
End
gg
Ctrl
+Home
G
Ctrl
+End
值得注意的是光标移动到行首尾的快捷键有很多,
Home
/End
和0
/$
效果是一样的, 不多赘述, 具体说一下^
/g_
和0
/$
的区别:Gmeek-html<img src="https://nliuco.github.io/1.^/g_&&0/$.gif">
接下来是一些快速翻页、转跳行的操作
Ctrl
+b
Page Up
Ctrl
+f
Page Down
Ctrl
+u
Ctrl
+d
:[行号]
Ctrl
+G
(在一些编辑器中)}
{
gg
Ctrl
+Home
G
Ctrl
+End