Vim 历史
- 1975 年 Ken Thompson 在伯克利分校任教,传播了 Unix 系统。
- 1976 年 Bill Joy 在研究生期间,自己实现了第一版 Vi 编辑器。
- 由于 Vi 编辑器有专利限制,之后 1991 Bram Moolenaar 开发维护了一个 Vi 克隆版本 Vim 一直维护到今天。
Vim 优势
- 全屏高效,可以使用不同的模式
- 使用 Vim 编辑文件非常高效
- Vim 是一个完全跨平台的编辑器
- Vim 是一个高度可定制、可扩展的编辑器
- Vim 有良好的生态环境
Vim 就是四个字”唯快不破“
场景
- Vim 主要是在 Unix 环境下编辑工作很方便。
理念
- 普通模式
- 插入模式
- 可是模式
- 命令模式
Mac 环境安装
# 编辑 .bash_profile
if [[ $PATH != "$HOME/bin"* ]]; then
PATH=~/bin:/usr/local/bin:/usr/local/sbin:`echo $PATH|sed -e "s!:$HOME/bin!!" -e 's!:/usr/local/bin!!'`
fi
brew install macvim
Vim 基本配置
Vim 模式
正常模式
- 正常情况下我们进入 Vim 后就是正常模式,或者在任何模式下面使用 ESC 键就可以回到正常模式。
插入模式
- 使用 i 或者 a 就可以进入插入模式。
可视模式
- 使用 v (小写) 可以进入可视模式。
命令模式
- 在正常模式下使用冒号:,就可以进入该模式,再输入完命令之后,我们必须按下回车键才能执行命令。
基本设置
- 设置编辑文件字符编码
- 设置临时交换文件地址
- 设置支持鼠标操作,共享面板
- 中文支持,设置
- set fileencodings=ucs-bom,utf-8,gb18030,latin1
光标移动
- 基本移动 h、j、k、l
- 跳转到行首命令是 0
- 跳转到行尾的命令是 $
- 单词的跳动:b/w 和 B/W
- 一行中最近跳动,f(find) 和 t(till)
- ( 和 ) 移动到上一句和下一句
- { 和 } 移动到上一段和下一段
- 直接去开头:gg
- 直接去结尾行:G
文本修改
- d 加动作来进行删除(dd 删除整行);D 则相当于 d$,删除到行尾。
- c 加动作来进行修改(cc 修改整行);C 则相当于 c$,删除到行尾然后进入插入模式。
- s 相当于 cl,删除一个字符然后进入插入模式;S 相当于 cc,替换整行的内容。
- i 在当前字符前面进入插入模式;I 则相当于 ^i,把光标移到行首非空白字符上然后进入插入模式。
- a 在当前字符后面进入插入模式;A 相当于 $a,把光标移到行尾然后进入插入模式。
- o 在当前行下方插入一个新行,然后在这行进入插入模式;O 在当前行上方插入一个新行,然后在这行进入插入模式。
- r 替换光标下的字符;R 则进入替换模式,每次按键(直到 )替换一个字符。
- u 撤销最近的一个修改动作;U 撤销当前行上的所有修改。
文本对象选择
if (message == “sesame open”) ## 假设光标停在“sesame”的“a”上
- dw(理解为 delete word)会删除 ame␣,结果是 if (message == “sesopen”)
- diw(理解为 delete inside word)会删除 sesame,结果是 if (message == “ open”)
- daw(理解为 delete a word)会删除 sesame␣,结果是 if (message == “open”)
- diW 会删除 “sesame,结果是 if (message == open”)
- daW 会删除 “sesame␣,结果是 if (message == open”)
- di” 会删除 sesame open,结果是 if (message == “”)
- da” 会删除 “sesame open”,结果是 if (message ==)
- di( 或 di) 会删除 message == “sesame open”,结果是 if ()da( 或 da) 会删除 (message == “sesame open”),结果是 if␣
更多操作可搭配
- 搭配 s(sentence)对句子进行操作——适合西文文本编辑
- 搭配 p(paragraph) 对段落进行操作——适合西文文本编辑,及带空行的代码编辑
- 搭配 t(tag)对 HTML/XML 标签进行操作——适合 HTML、XML 等语言的代码编辑
- 搭配 ` 和 ‘ 对这两种引号里的内容进行操作——适合使用这些引号的代码,如 shell 和 Python
- 搭配方括号(“[”和“]”)对方括号里的内容进行操作——适合各种语言(大部分都会用到方括号吧)
- 搭配花括号(“{”和“}”)对花括号里的内容进行操作——适合类 C 的语言搭配角括号(“<”和“>”)对角括号里的内容进行操作——适合 C++ 的模板代码
更快的移动
- 正常可以使用
和 来翻页,在 Vim 中还可以使用 和 分别代表 Backward 和 Forward。 - 翻半页操作
和 对应 Up 和 Down - 可以直接使用数字 + G 来跳转到某一行
- 直接使用 数字 + |,来跳到某一列中
- 在当前页的最上方,最下方和最中间,分别对应字母 H、L、M
- 针对于当前行的整体移动,使用快捷键 zt、zz、zb 分别使用。
重复操作
- ; 重复最近的字符查找(f、t 等)操作
- , 重复最近的字符查找操作,反方向
- n 重复最近的字符串查找操作(/ 和 ?)
- N 重复最近的字符串查找操作(/ 和 ?),反方向
- . 重复执行最近的修改操作