技术分享
Vim编辑器学习笔记
00 分钟
2024-9-24
2024-11-2
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),跳转到上一处单词的结尾
  • gee 的反向版本

基于搜索的移动

行内搜索:

  • 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:取消搜索结果的高亮显示
 
上一篇
开发日志:作业管理系统
下一篇
MSA(多序列对比)工具(MAFFT, MUSCLE, Clustal Omega, T-coffee, ProbCons)的使用