Solution-编辑器 (Vim)
- 完成 vimtutor。 备注: 它在一个 80x24(80 列,24 行) 终端窗口看起来最好。
vimtutor - 下载我们的 vimrc,然后把它保存到
~/.vimrc。 通读这个注释详细的文件 (用 Vim!), 然后观察 Vim 在这个新的设置下看起来和使用起来有哪些细微的区别。 - 安装和配置一个插件:
ctrlp.vim.- 用
mkdir -p ~/.vim/pack/vendor/start创建插件文件夹 - 下载这个插件:
cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim
下载后需要在~/.vimrc 中添加如下设置,参考 这里set runtimepath^=~/.vim/pack/vendor/start/ctrlp.vim - 请阅读这个插件的 文档。 尝试用 CtrlP 来在一个工程文件夹里定位一个文件, 打开 Vim, 然后用 Vim 命令控制行开始 : CtrlP.

- 自定义 CtrlP: 添加 configuration 到你的 ~/.vimrc 来用按 Ctrl-P 打开 CtrlP
let g:ctrlp_map ='<c-p>' let g:ctrlp_cmd = 'CtrlP' let g:ctrlp_working_path_mode = 'ra' #设置默认路径为当前路径
- 用
- 练习使用 Vim, 在你自己的机器上重做演示。
- 下个月用 Vim 完成_所有_的文件编辑。每当不够高效的时候,或者你感觉 “一定有一个更好的方式”, 尝试求助搜索引擎,很有可能有一个更好的方式。如果你遇到难题, 来我们的答疑时间或者给我们发邮件。
- 在你的其他工具中设置 Vim 快捷键 (见上面的操作指南)。
- 进一步自定义你的 ~/.vimrc 和安装更多插件。
安装插件最简单的方法是使用 Vim 的包管理器,即使用 vim-plug 安装插件:
- 安装 vim-plug
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - 修改 ~/.vimrc
call plug#begin() Plug 'preservim/NERDTree' #需要安装的插件 NERDTree Plug 'wikitopian/hardmode' #安装 hardmode ..... # 更多插件 call plug#end() - 在 vim 命令行中执行
:PlugInstall
- 安装 vim-plug
-
(高阶)用 Vim 宏将 XML 转换到 JSON (例子文件)。 尝试着先完全自己做,但是在你卡住的时候可以查看上面 宏 章节。
可以先查看 转化后的 JSON 文件,了解最终的转换效果。
vim example-data.xml在
vim编辑页面中执行以下步骤:- 删除首尾两行
Gdd:跳转到最后一行,并删除该行ggdd: 跳转到第一行,并删除该行
- 录制寄存器
e,实现对<name>标签的处理/<name>,再键入Enter,然后键入N:查找<name>并跳转到文件的最后一个<name>- 接下来,录制宏(即寄存器
e):
qe:即将录制名为e的宏^r":^跳转到当前行的首个非空字符,即<name>的<,r"将<替换为"f>s": ":f>查找>,此处即匹配刚才的<name>的>;s"将>替换为": "<Esc>:回到正常模式f<C":查找下一个<,由于 xml 文件的特征,此时匹配到的是刚才修改的<name>对应的</name>的<;然后,将当前位置到本行末尾的内容删除,同时插入"<Esc>:回到正常模式q:停止录制,寄存器e完成- 寄存器
e的效果示例:将<name>Mike</name>修改为"name": "Mike"
- 寄存器
- 录制寄存器
p,实现对<person>标签的处理gg:跳转到文件开头(本例中,正好处于一个<person>标签)- 接下来,录制宏(寄存器
p)
qp:即将录制宏pS{:将当前行删除,并替换为{<Esc>:回到正常模式j@e:移到下一行,并执行宏e(因为本例的 xml 文件中,<person>的下一行为<name>)A,:在本行的末尾添加上,<Esc>j@e:移到下一行,并执行宏e(本例中,完成对<email>标签行的处理,其处理与<name>标签行的一致)jS},:跳转到下一行,并删除整行,同时添加上},(本例中该行内容为:</person>)<Esc>q:回到正常模式,并停止录制,完成宏p
- 录制寄存器
q,实现从一个<person>标签到另一个<person>标签的跳转/<person>:从第三步的位置开始查找下一个<person>标签qq:开始录制宏q@p:执行宏p,可以将这一组<person>标签包含的内容修改为 json 格式jq:移到下一行,并停止录制,完成宏q(此时,刚好处于下一个<person>标签行)
- 执行宏
q到文件尾999@q:执行 999 次宏q(本文档总行数为 1002 行,执行 999 次能确保到达文件末尾)
- 手动修改文件内容
ggO:(大写的o)在开头插入如下内容{ "people": { "person": [<Esc>/<email>:跳转到文件末尾唯一未处理的<email>标签行@e:对该标签行进行处理jS}:移到下一行,删除</person>标签<Esc>o:在文件末尾插入以下内容] } }
- 删除首尾两行
Licensed under CC BY-NC-SA.