type
status
date
slug
summary
tags
category
icon
password
+ Vim操作高效,支持键盘快捷键,无需鼠标。
+ 功能强大,支持插件扩展,个性化定制。
+ 社区活跃、插件丰富、生态优秀
+ 支持多模式,正常模式和插入模式切换灵活。
Edit Text at the Speed of Thought.
Vim其实是非常非常强大的一款编辑器,可惜笔者很长一段时间对其了解仅仅局限于按i键进入Insert模式。
📝 Vim的四种模式
Normal模式:基本移动
Normal模式是默认进入的模式。
hjkl
:左下上右
gg
:跳到第一行
G
:跳到最后一行
<Ctrl+u>
:往上翻半页(PageUp)
<Ctrl+d>
:往下翻半页(PageDown)
{#}gg
:跳转到第#行
zz
/zt
/zb
:光标所在行设置为屏幕居中/屏幕第一行(Top)/屏幕最后一行(Buttom)
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进入可视模式
- 进入Visual模式后可以用Normal模式下的移动命令选择文本
- 可视模式下
x
/y
:剪切/复制;回到Normal模式下p:粘贴
- Normal模式下按
V
进入行可视模式,一次选中一整行,在需要选中多行时很方便
<Esc>
回到Normal模式
📝 Vim:移动与编辑
简单的
hjkl
显然无法满足我们的需要w
:(word),跳转到下一处单词的开头
b
:(back),跳转到上一处单词的开头
e
:(end),跳转到上一处单词的结尾
ge
:e
的反向版本
基于搜索的移动
行内搜索:
- f{char}/t{char}:跳转到本行下一个char字符出现处/出现前
- ;/,:快速向后/向前重复ft查找
- F{char}/T{char}:向前搜索而非往后
文件中搜索
- /{pattern}:跳转到本文件中下一个pattern出现的地方
- ?{pattern}:跳转到本文件中上一个pattern出现的地方
- pattern可以是RegExp(正则表达式)
- *:等价与/{pattern},pattern是当前光标下的单词
- nN:快速重复/查找
基于标记的移动
- m{mark}:把当前位置标记为mark
- `{mark}:跳转到名为mark的位置
- mark是a-z的字符
使用场景:当需要临时离开当前光标处,做一些事情再快速地回来
内置标记:
- ``:上次跳转前的位置
- `.:上次修改的位置
- `^:上次插入的位置
其他实用的跳转
- ^/$:跳转到本行的开始/结尾
- %:跳到匹配的配对符(括号等)处
Operator+Motion=Action
{operator}{motion}:一次编辑动作
常见操作符:
- c:代表change,修改,删除内容并进入编辑模式
- d:代表delete,删除
- y:代表yank,复制
- v:代表visual,选中文本,进入可视模式
e.g.
- dgg:删除到第一行
- ye:复制到单词结尾
- d$:删除到行尾
- dt;:删除直到分号为止的内容
大部分操作符连续按两次(cc/dd/yy):将其作用在这一行上
e.g. dd:删除这一行
重复操作
- .:重复上一次修改
- u:撤销上一次修改
- <Ctrl+r>:重做上一次修改
.命令非常适合用于需要多次重复某一个动作的场景,省去了重复输入命令,大大提高效率
批量操作:数字+动作
{count}{action}:重复count次action动作
动作可以是移动或编辑动作
- 4j:向下移动4行
🎖️文本对象操作
{operator}{textobject}
textobject:语义化的文本片段,格式:i/a对象
常见的对象:
- w/W,s, p:单词,句子,段落
- (/),[/],{/},</>,’/”:通配符定义的对象
i代表inner,只包括内部的内容
a包括周围的空格或通配符
文本对象提供了为文本赋予了结构化的含义,允许我们以一个语义对象作为操作单元[conut]{operator}{textobjects}
e.g.
- diw:删除一个单词
- ci(:修改小括号内部
- yi{:复制大括号内部
🗂️ 寄存器与宏
寄存器(Registers)
Vim的寄存器功能允许你存储、管理不同的剪切、复制内容,并且支持与系统剪贴板互动。通过合理使用寄存器,你可以同时处理多个文本片段,极大提高编辑效率。
基础操作
"
:指定使用特定寄存器,紧跟寄存器名称
"aY
:复制当前选中的文本到寄存器a
"ap
:从寄存器a粘贴内容
"ayiw
:复制当前光标下的单词到寄存器a
"adw
:删除当前单词并保存到寄存器a
特殊寄存器
""
:默认寄存器,存储最后一次的删除或复制操作
"_
:黑洞寄存器,删除内容不存入任何寄存器
"+
:系统剪贴板寄存器,可与系统剪贴板交互(支持从Vim复制到系统或粘贴外部内容)
寄存器功能非常适合处理复杂的剪切、复制操作,特别是在多次剪切复制之间切换时,可以轻松管理不同的内容。
宏(Macros)
宏功能用于录制并重复执行一系列操作,特别适用于需要多次重复相同编辑任务的场景。
宏的使用
- q{register}:开始录制宏,宏会保存到指定的寄存器中(例如qa录制到寄存器a)
- 录制过程中,执行所有需要重复的操作
- q:停止录制宏
- @{register}:运行录制在寄存器{register}中的宏
- @@:重复执行上一次的宏
宏示例
假设你需要删除多行末尾的句号并添加分号,可以按如下方式操作:
- qa:开始录制到寄存器a
- A<Backspace>a;:进入行末插入模式,删除句号,添加分号
- <Esc>j:回到Normal模式并移动到下一行
- q:结束录制
- @a:执行宏操作
这会在每行末尾执行相同操作,并且你可以使用@@快速重复宏,极大地减少重复工作。
💻 命令模式(Command Mode)
命令模式是Vim的强大核心功能之一,用于执行文件操作、文本替换、搜索、运行外部命令等。进入命令模式的方法是在Normal模式下按:
文件操作
:w
:保存当前文件
:q
:退出Vim
:wq
:保存并退出
:q!
:强制退出(放弃修改)
:x
:保存并退出(相当于:wq)
:e {filename}
:打开指定文件
:r {filename}
:将指定文件内容插入当前文件
外部命令
Vim支持在命令模式下运行外部命令,并将结果返回到编辑器中。
:!{command}
:执行外部命令(如:!ls会列出当前目录下的文件)
:r !{command}
:将外部命令的结果插入当前文件(如:r !date插入当前日期)
搜索高亮与行号显示
:set number
:显示行号
:set nonumber
:隐藏行号
:noh
:取消搜索结果的高亮显示
- 作者:Larry
- 链接:https://www.larryivanhan.blog/article/vim_tutorial
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。