
vim学习笔记

Vim简介
Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。
Vim适用于纯文本的编辑(代码、markdown文件、LaTeX源码等)
优势:
- 高效的移动
- 高效的编辑
- 高效的批量处理
“Edit Test at the Speed of Thought”

Vim基础知识和学习路线
强烈建议去b站看up bililbili@郁结YuJie关于vim的教程,做的非常的好!以下的总结是对其讲述内容的总结

一、基础知识
Vim的操作有四种模式:
- Normal模式:默认进入的模式,也是最常用的模式
- Insert模式:插入模式,像正常的文本编辑器一样输入
- Command模式:命令模式,在底部输入命令,可以完成很多批量的功能
- Visual模式:可视模式,对文本进行选择
Normal模式:基础移动
hjkl
:上下左右gg
:跳到第一行G
:跳到最后一行<Ctrl-u>/<Ctrl-b>
:往上翻半页/一页(Up / Backward)<Ctrl-d>/<Ctrl-f>
:往下翻半页/一页(Down / Forward){lineon}gg
:跳到第lineon
行zz/zt/zb
:光标行设置为 屏幕居中/屏幕第一行/屏幕最后一行 (Zone / Zone Top / Zone Button)
进入Insert模式
Normal模式下通过特定的命令进入Insert模式
i
:当前光标之前开始插入(insert)a
:当前光标之后开始插入(append)o
:下方插入新的一行,然后开始输入s
:删除当前光标的字符,然后开始输入I
:在本行的开头开始输入A
:在本行的结尾开始输入O
:上方插入新的一行,开始输入S
:删除当前行,开始输入
进入Command模式
Normal模式下输入:
进入Command模式
:w
保存当前文件:q
退出:q!
放弃当前更改,然后退出:wq
保存当前更改,然后退出h {command}
显示关于命令的帮助<Esc>
回到Normal模式
进入 Visual 模式
Normal 模式下按v进入可视模式
进入可视模式后可以用 Normal 模式下的移动命令选择文本
- 可视模式下
x
/y
:剪切/复制;回到 Normal 模式下p
:粘贴 - Normal 模式下按
<V>
进入行可视模式,一次选中一整行,在需要选中多行时很方便 <Esc>
回到 Normal 模式
二、移动和编辑
简单的hjkl
无法实现快速的移动,因此我们需要一些更加高效的移动
基于单词的移动
w
:word,跳转到下一处单词的开头b
:back,跳转到上一处单词的开头e
:end,跳转到下一处单词的结尾ge
:e
的反向版本,跳转到上一处单词的结尾
wbe
大写版本WBE
对应的单词是连续的非空字符
基于搜索的移动
行内搜索:
f<char>/t<char>
:跳转到本行下一个char
字符出现处/前;/,
:快速向后/向前重复ft
查找F<char>/T<char>
:跳转到本行上一个char
字符出现处/前(向前搜索)
文件中搜索:
/<pattern>
:跳转到本文件中下一个pattern
出现的地方?<pattern>
:跳转到本文件中上一个pattern
出现的地方pattern
可以是正则表达式*
:跳转到本文件中下一个和当前光标下的单词相同的单词处nN
:快速重复/
查找 (n
:正向找,m
:反向找)
基于标记的移动
m{mark}
:把当前位置标记为mark
'{mark}
:跳转到名为mark
的标记位置
mark
是a~z
的字符
内置标记:
''
:回到上次跳转前的位置'.
:回到上次修改的位置'^
:回到上次插入的位置
记住一个就可以
mm
,方便按,然后修改完别的地方按''
即可回到标记处
一些实用的跳转
^/$
:跳转到本行的开始/结尾(分别对应shift+6和4,其中6是开始,4是结尾,和按的时候是反过来)%
:跳到匹配的配对符(括号,大括号等)处
简单的公式:Operation+Motion=Action
{operation}{motion}
:一次编辑操作
常见的:
c
:代表”change”,删除内容并进入插入模式d
:代表”delete”,删除y
:代表”yank”,复制v
:代表”visual”,选中文本,进入可视模式
例如:
dgg
:从当前位置删除到第一行ye
:复制到单词结尾d$
:删除到行结尾dt;
:删除当前位置到分号之前的内容
“操作符+移动”是很重要的操作逻辑,类似鼠标拖动之后操作
大部分操作符连续按两次(cc/yy/dd
):将其作用在一行上
例如 dd
:删除一行
重复操作
.
:重复上次的操作u
:撤回 (相当于ctrl+z)<Ctrl-r>
:重做 (相当于ctrl+y)
.
省去了重复输入命令,大大提高效率
批量操作:数字+动作
{count}{action}
:重复 count
次 action
操作
比如移动,编辑
4j
:向下移动四行3dw
:向后删除三个单词2yy
:复制两行4p
:粘贴4次
.
操作可以直观地看到每一次的变化,在合适的时候停下来
数字+动作则需要预先知道动作的次数
技巧:使用相对行号确定移动范围
:set relativenumber
:开启相对行号
:set norelativenumber
:关闭相对行号
总结
[count]{operator}{motion}
操作逻辑
三、文本对象操作
介绍 {operator}{textobjects}
操作逻辑
{textobjects}
:语义化的文本片段
常见的对象:
w/W
,s
,p
:单词、句子、段落(
/)
,[
/]
,{
/}
,<
/>
,'
/"
:配对符定义的对象
i
表示inner;a
代表append,额外包括周围的空格或者配对符
文本对象提供了为文本赋予了结构化的含义,因此可以以一个语义对象作为操作单元
[count]{operator}{textobjects}
diw
:删除一个单词ci(
:修改小括号内部yi{
:复制大括号内部
textobjects VS motion
{operator}{motion}
与{operator}{textobjects}
解耦了操作与操作的对象,大大提升了操作的效率
motion
是能够移动光标的指令,可以独立使用(如wbe
)- 文本对象只能跟在
operator
后面,不能独立使用(如iw
) motion
通过光标的移动确定operator
的作用范围,范围更加灵活但是不够明确textobjects
则是显示地指定操作的对象,范围明确
一些操作符的补充
gu
/gU
/g~
:操作符(因此后面要接textobjects或者motion),转小写/转大写/翻转大小写J
:join,连接两行<
/>
:左右缩进(连按两下可以本行缩进)
建议:让你的命令更加模块化
尽量让你的命令更加模块化,具有清晰的含义和作用范围,以便于与
.
等命令协同例如:
daw
比dw
具有更加清楚的语义,也更模块化练习技巧:用
v
先可视化修改的范围一开始不熟练,可能不确定
motion
或textobjects
具体覆盖了哪部分文本,可以先用v{motion}/v{textobjects}
将其选中,再执行c/d/y
等操作但是熟练后,尽可能直接使用完整的命令继续宁操作,因为相比于
viwd
,diw
更加模块化,也更容易进行重复操作
- Title: vim学习笔记
- Author: Chandery
- Created at : 2024-10-10 02:24:52
- Updated at : 2024-12-11 10:43:51
- Link: https://chandery.chat/2024/10/10/vim学习笔记/
- License: This work is licensed under CC BY-NC-SA 4.0.