Main Takeaway
Following missing semester of MIT to learn Vim.
希望通过Learn Vimscript the Hard Way (stevelosh.com)+Vim Adventures 来进一步练习Vim的使用
Vim(2)——Vim的进阶知识(我也还没用到宏,以后重新整理填坑)
双手离开鼠标!
Vim 进阶
一个好的对策是: 当你在使用你的编辑器的时候感觉 “一定有更好的方法来做这个”, 那么很可能真的有:上网搜寻一下。
缓存,标签页,窗口
Vim 会维护一系列打开的文件,称为“缓存”。一个 Vim 会话包含一系列标签页,每个标签页包含 一系列窗口(分隔面板)。每个窗口显示一个缓存。跟网页浏览器等其他你熟悉的程序不一样的是, 缓存和窗口不是一一对应的关系;窗口只是视角。一个缓存可以在多个窗口打开,甚至在同一 个标签页内的多个窗口打开。这个功能其实很好用,比如在查看同一个文件的不同部分的时候。
Vim 默认打开一个标签页,这个标签也包含一个窗口。
搜索和替换
:s (替换)命令(文档)。
%s/foo/bar/g- 在整个文件中将 foo 全局替换成 bar
%s/\[.*\](\(.*\))/\1/g- 将有命名的 Markdown 链接替换成简单 URLs
多窗口
- 用
:sp/:vsp来分割窗口 - 同一个可以buffer在多个窗口中显示。
宏
q{字符}来开始在寄存器{字符}中录制宏q停止录制@{字符}重放宏宏的执行遇错误会停止
{计数}@{字符}执行一个宏{计数}次宏可以递归
- 首先用
q{字符}q清除宏 - 录制该宏,用
@{字符}来递归调用该宏 (在录制完成之前不会有任何操作)
- 首先用
例子:将 xml 转成 json (
file
)
一个有 “name” / “email” 键对象的数组
用一个 Python 程序?
用 sed / 正则表达式
g/people/d%s/<person>/{/g%s/<name>\(.*\)<\/name>/"name": "\1",/g- …
Vim 命令 / 宏
Gdd,ggdd删除第一行和最后一行格式化最后一个元素的宏 (寄存器
1
e
)
- 跳转到有
<name>的行 qe^r"f>s": "<ESC>f<C"<ESC>q
- 跳转到有
格式化一个
的宏
- 跳转到有
<person>的行 qpS{<ESC>j@eA,<ESC>j@ejS},<ESC>q
- 跳转到有
格式化一个
标签然后转到另外一个的宏
- 跳转到有
<person>的行 qq@pjq
- 跳转到有
执行宏到文件尾
999@q
手动移除最后的
,然后加上[和]分隔符
自定义 Vim
Vim 由一个位于 ~/.vimrc 的文本配置文件(包含 Vim 脚本命令)。你可能会启用很多基本设置。
我们提供一个文档详细的基本设置,你可以用它当作你的初始设置。我们推荐使用这个设置因为它修复了一些 Vim 默认设置奇怪行为。 在这儿 下载Missing semester的设置,然后将它保存成 ~/.vimrc.
Vim 能够被重度自定义,花时间探索自定义选项是值得的。你可以参考其他人的在 GitHub 上共享的设置文件。 有很多好的博客文章也聊到了这个话题。尽量不要复制粘贴别人的整个设置文件, 而是阅读和理解它,然后采用对你有用的部分。
扩展 Vim
Vim 有很多扩展插件。跟很多互联网上已经过时的建议相反,你不需要在 Vim 使用一个插件 管理器(从 Vim 8.0 开始)。你可以使用内置的插件管理系统。只需要创建一个 ~/.vim/pack/vendor/start/ 的文件夹,然后把插件放到这里(比如通过 git clone)。
以下是一些好用的我们最爱的插件:
- ctrlp.vim: 模糊文件查找
- ack.vim: 代码搜索
- nerdtree: 文件浏览器
- vim-easymotion: 魔术操作
我们尽量避免在这里提供一份冗长的插件列表。可以查看missing semester讲师们的开源的配置文件 (Anish, Jon, Jose) 来看看我们使用的其他插件。 浏览 Vim Awesome 来了解一些很棒的插件。 这个话题也有很多博客文章:搜索 “best Vim plugins”。
References
编辑器 (Vim) · the missing semester of your cs education (missing-semester-cn.github.io)
【VS Code × Vim:提高你的编码效率】https://www.bilibili.com/video/BV1MX4y1b7nM?vd_source=93bb338120537438ee9180881deab9c1
VSCode vim 使用vimrc配置 vim使用系统剪切板配置_vscode vimrc_未知褶皱的博客-CSDN博客
[VSCode使用Vim插件心得_vscode vim插件_皛心的博客-CSDN博客](