精通Vim:用Vim 8和Neovim实现高效开发
  • 推荐0
  • 收藏1
  • 浏览932

精通Vim:用Vim 8和Neovim实现高效开发

Drew Neil (作者)  死月 (译者)

  • 书  号:978-7-121-38328-1
  • 出版日期:2020-03-24
  • 页  数:168
  • 开  本:16(170*240)
  • 出版状态:上市销售
  • 原书名: Modern Vim: Craft Your Development Environment with Vim 8 and Neovim
  • 原书号:9781680502626
  • 维护人:刘皎
纸质版 ¥69.00
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。Vim普遍被推崇为类Vi编辑器中最好的一个。
本书讲述的是更现代化的Vim编辑器——Vim 8以及NeoVim。作为公认的顶尖的开源编码器之一,Vim有很多忠实的粉丝,他们包括一些编码水平很棒的程序员、黑客以及众多Linux系统管理员、运维工作人员等。作为一个初学者,虽然Vim的学习曲线有点陡峭,但是学成之后,会让他很快沉浸在Vim高效写代码、以及放弃鼠标的乐趣之中。
基于Vim 8和NeoVim, 新增众多特性,程序员的强大利器
译者序
虽然在Linux 下偶尔用Vim 做一些简单的编辑,但是真正再拾起Vim 是2014 年我在花瓣网的实习期间。里面的同事们都非常Geek,大家都用着非Vim 即Emacs 的编辑器,在观察了他们的日常工作后,我深深地被这款简洁又高效的编辑器所吸引。于是,我也入了Vim 的坑。
Vim 虽好,但是它在终端下的性能其实已经逐渐不能满足我的日常开发了,尤其是在我安装了一堆性能不那么好的插件之后。还好,Vim 8 和Neovim 出来了。它们的各种异步API 使得一些计算不再那么卡。Vim 又流畅了。
这个时候我才感觉到,Vim 并没有被时代所抛弃,它跟上了时代的步伐。自从现代Vim 出来之后,我的tmux 加上Vim 的组合刀刃又锋利了许多。再加上丰富的生态,例如现在还有对Language Server Protocol 很好的支持,使得我
的开发环境无往不利。
如果说Visual Studio 是我认为最好的IDE 之一的话,那么Vim 无疑是我认为最好的代码编辑器之一。值得一提的是,我的《Node.js:来一打C++ 扩展》一书,就是使用Vim 写的Markdown 文件,又生成GitBook 文件,最终导出给
编辑的。
当我看到有这么一本书可以翻译的时候,我是很兴奋的。这么好的编辑器在焕发第二春的时候,我能将一本介绍它的书翻译成汉字,推广到国内的市场,这是多么美妙的一件事情!
在此,我非常感谢在国内的Vim 生态圈和开发者们。感谢给本书写中文推荐语的同行。感谢我的妻子:她的支持是对我最大的鼓励,如果不是她,这本书的问世也许会更晚。感谢我的父母,在我的背后默默支持我的事业。在我
小的时候,他们就一直支持我的梦想,才使我在编程领域一路走下来。感谢Vim 这个伟大的编辑器。

死月
2019 年11 月于杭州

前言
关于Vim版本
在阅读本书之前,需要安装好最新的 Vim 版本。有两个选择:Vim 8 或者Neovim 0.2。
Vim 8
Vim 8 于 2016 年 9 月发布。它引入了一些我们在本书中将要学习的新特性,例如包特性以及任务控制机制。阅读本书的最低环境要求是,你安装的Vim 8 应当包含huge 特性集。关于安装方式,可以参考本书第1 章中的知识点1。
除了一些专为Neovim 所写的技巧之外,本书中所有的知识点中的示例都在Vim 8 中测试通过了。
Neovim
Neovim 是一个可以替代 Vim 的社区分支。它支持Vim 8 所支持的各种特性,也支持很多 Vim 8 没有的特性。你可以参考本书知识点2 中的介绍安装它。
本书中所有知识点中专为Neovim 编写的示例都在Neovim 0.2.2 中测试通过了。
术语
在很多方面,Vim 8 和 Neovim 都是相通的。如果我在书中使用“Vim”字眼,你可以认为该功能既可以在 Vim 8 中使用,也可以在 Neovim 中使用。如果我在书中特意指定“Vim 8”或者“Neovim”,那说明只能使用相应的编辑器。
如果你在一个知识点的开头看到这么一个标记,就说明它只在 Neovim 下有效:
Neovim only
如果标记是这样的,则说明它只在 Vim 8 下有效:
Vim 8 only
当然,如果没有任何标记,则说明两者都可用。书中大部分的知识点都是两个编辑器都支持的。
使用$VIMCONFIG 代入上下文Vim 8 和Neovim 遵循不同的约定保存配置文件。Vim 8 通常将配置文件放在~/.vim 目录中,而Neovim 则使用~/.config/nvim 目录,请记住这一点。
所以为了区分清楚,我使用环境变量$MYVIMRC、$VIMCONFIG、$VIMDATA来表示这些文件。当你看到$VIMCONFIG 的时候,你可以认为它是Vim 8 下的~/.vim 或者是Neovim 下的~/.config/nvim。
在本书第1 章中有关于Vim 的上下文指令和Neovim 的上下文指令的详细介绍。
其他软件要求
在本书中,很多地方都使用实际例子来介绍,也就是说,你如果跟着做会达到最佳学习效果,但有一些实例需要我们安装除 Vim 之外的软件。
JavaScript、Node.js 和npm书中的很多实例都使用的是JavaScript 这门近几年来比较通用的语言。所以即使你的主手武器不是 JavaScript,相信你也多多少少对其有所了解,这对你阅读本书来说绰绰有余了。而且就算你不想使用 JavaScript,使用其他语言也是可以的。
如果你想执行本书中的 JavaScript 实例,则需要安装 Node.js1 运行时环境和包管理工具npm2。你可以从它的官方网站获取详情。
1 见链接2所示网址。
2 见链接3所示网址。

Bash Shell 或者其他Shell
有时需要在shell 中执行命令。本书假设你使用 Bash shell,毕竟它是很多操作系统默认的shell 工具。
这并不意味着你只能使用 Bash。如果你更习惯使用 zsh、fish 或者其他的一些shell 工具也是可以的。相信使用其他shell 的你有能力将本书中的一些命令适配成你的shell 工具所使用的命令。不用担心,我们只使用Bash 最基本的功能。
Git
你会发现Git 的命令贯穿全书,例如clone、init 以及commit 等。所以需要安装一个最新版本的Git。可以在网上学习如何安装Git。
1Ripgrep
本书中多次使用到Andrew Gallant 编写的Ripgrep 工具。Ripgrep2 工具的主要功能是在多个文件中进行搜索,这和grep 很像。本书中的知识点13 介绍了如何使用类Grep 搜索器搜索文件。实际上,Ripgrep 还有一个功能,那就是
通过ripgrep --file 命令列出当前目录下的所有文件,除了版本控制工具忽略的文件。知识点7 中在进行模糊文件匹配时使用了这个特性。可以使用你的操作系统上的包管理器安装Ripgrep。如果不能安装成功,则可以查看它在 GitHub3 上的版本发布页面,那里有Linux 或者macOS 下的二进制文件。
Vim按键表示
Ctrl-s 是一个最常用的快捷键输入表示法。它的意思是“按住Ctrl 键,然后按下s 键”,但是这对于Vim 并不友好。在本书中,我会使用另外的表示法表示各种按键。
命令输入
在普通模式下,“命令”是一系列的键盘输入,就和在钢琴上演奏旋律一样,例如下面这些命令输入:表示意义
x 按下一次 x 键,dw 按下一次 d 键,然后按下一次 w 键,dap 按下一次 d 键,然后按下一次 a 键,然后是 p 键
本书中大多数的命令输入都在两三个键左右,但也不排除有更长的序列。解读 Vim 普通模式下的各种命令序列可能会耗费一些脑力,但是熟练之后就不是问题了。
组合键
当你看到形如 这样的表示时,如果你觉得它的意思是“按一次< 键,然后按C 键,再是- 键,然后……”就错了。 等同于Ctrl-p,意思是“按住 Ctrl 键,然后按下p 键”。
其实我并没有什么理由去反驳 Ctrl-p 这种表示法,只是因为 Vim 的文档中使用了,并且我们也能用这种表示法定义Vim 的自定义键位。有一些复杂的Vim 命令是由两种表示法共同表示的,例如下面这些表示:
表示意义
按住Ctrl 键,然后按一下 n 键
g 按一下g 键,然后按住 Ctrl 键后,再按一下 ] 键
0 按住 Ctrl 键后,按一下 r 键,放开后再按一下 0 键
按住 Ctrl 键后,按一下 w 键,放开 w 键后再按一下 = 键
占位符
很多Vim 命令都需要按多次键。有些命令后面的键输入是固定的,而有些则不是固定的。我们用花括号来包含命令序列某个位置中的有效按键集,例如:
表示意义
f{char} 按一下f 键,然后按任意字符键
`{a-z} 按一下 ` 键,然后按任意小写字母键
m{a-zA-Z} 按一下 m 键,然后按任意大小写字母键
d{motion} 按一下 d 键,然后键入任意动作命令
{register} 按住 Ctrl 键后按一下 r 键,放开后键入任意一个寄存器地址
{nondigit} 按住 Ctrl 键后按一下 v 键,放开后键入任意一个非数字键
特殊键
有些特殊键以其名字表示,下表列出了其中一些:
表示意义
按一下退出键
按一下回车键
按一下 Tab 键
按住 Shift 键后按一下 Tab 键
按住 Meta 键后按一下 j 键
按一下上光标键
按一下下光标键
按一下空格键
g 按一下引导键,再按一下 g 键
值得注意的是,Meta 键需要视情况而定,它有可能是Option 键或者Alt 键。
引导键
引导键是可以自行定义的。在默认情况下,引导键为反斜杠\,也有很多人喜欢将其设置为逗号 ,。可以在vimrc 文件中对其进行设置:
let mapleader = ','
所以当看到 g 这种表示法的时候,就应该在脑海中将其翻译成 ,g,或者是\g。如果引导键不是它们其中之一,那么就是你自行设置的mapleader 跟着g。

与命令行交互
我们时常会在 Vim 或者 shell 中执行一些命令。例如,在用Vim 打开一个随书源码文件之前,先进入相应的目录。在
这些实例中,你会看到一个 $ 命令提示符,这表示该命令运行在一个外部的shell 中:
? $ cd code/terminal/
? $ nvim readme.md
而在 Vim 中,按下 : 键会从普通模式切换至命令模式。在命令模式中,可以输入一些 Ex 命令,例如 :write 和:quit。按下 键就可以执行这些命令。
在这种情况下,: 提示符后跟着命令:
? :s/cool/awesome/g
? :write
只要看到了这种带有 : 提示符的 Ex 命令,都表示最后需要按下回车键。
如果不按,则不会有什么反应。
在 Neovim 中,可以通过:terminal 命令在终端缓冲区运行一个shell(详见第5 章中关于Neovim 的内置终端模拟器的内容)。在这种情况下,? 提示符就表示在终端缓冲区的shell 中执行命令:
? ? cat readme.md
? ? top
有如下这些提示符:
表示意义
: 在 Vim 的命令模式下执行 Ex 命令
$ 在外部shell 中执行命令
? 在终端缓冲区的 shell 中执行命令
最小化配置
在运行本书例子之前,应该确保设置了'nocompatible',且开启了文件类型检测特性。在 Vim 8 之前,应该如下这样配置vimrc 文件:
set nocompatible
filetype plugin indent on
在 Vim 8 发布之后,这些就变成了默认配置(详见 :help default.vim)。这也就意味着你的vimrc 中不必再包含它们了,除非你想兼容老版本的 Vim。可以通过下面的方式来看看你是否开启了文件类型检测特性:
? :filetype
? filetype detection:ON plugin:ON indent:ON
确保你看到了detection:ON,否则书中的有些实例你运行不了。
使用出厂设置
本书中的有些知识点假设你的Vim 是“出厂设置”。
如果你想跟着这些知识点做,则可以将你的自定义Vim 配置文件移动到一个不会被 Vim 启动加载的位置下。举个例子来说,如果你用的是 Vim 8,那么可以将你的配置文件重命名为
? $ mv ~/.vim ~/.xvim
? $ mv ~/.vimrc ~/.xvimrc
? $ mkdir ~/.vim
之后,可以将配置文件移回来,恢复你原来的配置:
? $ rm -r ~/.vim
? $ mv ~/.xvim ~/.vim
? $ mv ~/.xvimrc ~/.vimrc
而对于 Neovim 来说,也是一样:
? $ mv ~/.config/nvim ~/.config/xnvim
? $ mkdir ~/.config/nvim
同样可以通过下面的命令恢复你的配置:
? $ rm -r ~/.config/nvim
? $ mv ~/.config/xnvim ~/.config/nvim
下载样例
在本书中,我们进行实践的时候,通常是在修改之前先展示一下样例的原始内容。所以在展示的时候,在代码块之前会带上该文件的路径,例如:
green-bottles.txt
10 green bottles hanging on the wall.
所以每当你看到这种形式的代码时,就意味着你可以先下载样例。下载后,建议你在Vim 中打开该文件,然后开始练习。这是学习的最好方法。
可以在出版社网站本书的相关页面1 下载样例2。如果你阅读的是电子书,则可以通过直接触摸或者点击代码块上的文件名进行跳转。先试一下上面的这个样例吧。

本书中“ 链接1”、“ 链接2” 等指定的具体网址可访问http://www.
broadview.cn/38328 下载“38328 网址文件.docx”查询。

目录

第1章 获取新一代Vim1
知识点1 安装 Vim 8 2
知识点2 转战Neovim 4
知识点3 为 Neovim 开启 Python 支持 8
第2章 安装插件11
知识点4 脚本(Script)、插件(Plugin)以及包(Package)11
知识点 5 往包里安装插件14
知识点6 使用minpac 管理插件19
第3章 打开文件24
知识点7 模糊文件匹配24
知识点 8 语义寻径32
知识点 9 跳转到轮换文件(Alternate file)37
第4章 使用Quickfix列表41
知识点10 构建和错误跳转41
知识点 11 切换编译器48
知识点 12  Lint 当前文件53
知识点 13 使用类Grep 搜索器查找文件60
知识点 14 运行测试并查看失败项68
第5章 Neovim的内置终端模拟器75
知识点15 终端模式(Terminal mode)初体验77
知识点 16 在终端缓冲区中运行程序81
知识点 17 管理终端缓冲区窗口86
知识点 18 在终端缓冲区使用普通模式的命令89
知识点 19 向终端缓冲区发送命令92
知识点20 在终端缓冲区中自定义命令行95
知识点21 防止嵌套Neovim 实例96
知识点22 将打开的nvim 实例作为首选编辑器99
第6章 会话103
知识点23 保存和恢复会话104
知识点24 持久化撤销(Undo)107
知识点25 恢复会话时重启终端进程109
第7章 配置Vim114
知识点26 使用自动命令(Autocommand)响应事件114
知识点27 项目规约121
知识点28 为每个项目设置Buffer 级别的配置126
附录1 未来的发展137

读者评论

  • 能打印在书上的内容非要搞一个网址,结果书上的网址还尼玛404了,引流自己的垃圾网站也就算了,还引流微信公众号,什么**玩意。

    sbboardview发表于 2020/12/29 14:48:35
  • 什么垃圾

    sbboardview发表于 2020/12/29 14:46:03
  • 请问随书源码在哪下载。

    piaoyii发表于 2020/11/13 17:19:18
    • https://pragprog.com/titles/modvim/modern-vim/

      小鳥遊死月发表于 2020/11/25 12:39:15
  • 请问隋书下载在哪里。

    chk发表于 2020/5/7 21:45:43
    • https://pragprog.com/titles/modvim/modern-vim/

      小鳥遊死月发表于 2020/11/25 12:39:18

下载资源