猜你喜欢
精通 Vim

精通 Vim

书籍作者:Drew ISBN:9787121383281
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:5981
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。Vim普遍被推崇为类Vi编辑器中最好的一个。本书讲述的是更现代化的Vim编辑器――Vim 8以及NeoVim。作为公认的**的开源编码器之一,Vim有很多忠实的粉丝,他们包括一些编码水平很棒的程序员、黑客以及众多Linux系统管理员、运维工作人员等。作为一个初学者,虽然Vim的学习曲线有点陡峭,但是学成之后,会让他很快沉浸在Vim高效写代码、以及放弃鼠标的乐趣之中。

作者简介

Drew Neil 是一位独立程序员、作家和培训师。他在世界各地参加研讨会、经常在会议上发言,并专门从事制作教学视频的工作。他精通Vim的使用,著有Practical Vim一书,该书已被翻译成中文《Vim实用技巧》出版,受到读者的好评。
朱凯迪(笔名是死月),高级 Node.js 后端研发工程师,现在蚂蚁金服工作。著有《Node.js:来一打C++扩展》,受到读者的好评。

前言

译者序

虽然在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-p> 这样的表示时,如果你觉得它的意思是“按一次< 键,然后按C 键,再是- 键,然后……”就错了。<C-p> 等同于Ctrl-p,意思是“按住 Ctrl 键,然后按下p 键”。

其实我并没有什么理由去反驳 Ctrl-p 这种表示法,只是因为 Vim 的文档中使用了<C-p>,并且我们也能用这种表示法定义Vim 的自定义键位。有一些复杂的Vim 命令是由两种表示法共同表示的,例如下面这些表示:

表示意义

<C-n> 按住Ctrl 键,然后按一下 n 键

g<C-]> 按一下g 键,然后按住 Ctrl 键后,再按一下 ] 键

<C-r>0 按住 Ctrl 键后,按一下 r 键,放开后再按一下 0 键

<C-w><C-=> 按住 Ctrl 键后,按一下 w 键,放开 w 键后再按一下 = 键

占位符

很多Vim 命令都需要按多次键。有些命令后面的键输入是固定的,而有些则不是固定的。我们用花括号来包含命令序列某个位置中的有效按键集,例如:

表示意义

f{char} 按一下f 键,然后按任意字符键

`{a-z} 按一下 ` 键,然后按任意小写字母键

m{a-zA-Z} 按一下 m 键,然后按任意大小写字母键

d{motion} 按一下 d 键,然后键入任意动作命令

<C-r>{register} 按住 Ctrl 键后按一下 r 键,放开后键入任意一个寄存器地址

<C-v>{nondigit} 按住 Ctrl 键后按一下 v 键,放开后键入任意一个非数字键

特殊键

有些特殊键以其名字表示,下表列出了其中一些:

表示意义

<Esc> 按一下退出键

<CR> 按一下回车键

<Tab> 按一下 Tab 键

<S-Tab> 按住 Shift 键后按一下 Tab 键

<M-j> 按住 Meta 键后按一下 j 键

<Up> 按一下上光标键

<Down> 按一下下光标键

<Space> 按一下空格键

<Leader>g 按一下引导键,再按一下 g 键

值得注意的是,Meta 键需要视情况而定,它有可能是Option 键或者Alt 键。

引导键

<Leader> 引导键是可以自行定义的。在默认情况下,引导键为反斜杠,也有很多人喜欢将其设置为逗号 ,。可以在vimrc 文件中对其进行设置:

let mapleader = ','

所以当看到 <Leader>g 这种表示法的时候,就应该在脑海中将其翻译成 ,g,或者是g。如果引导键不是它们其中之一,那么就是你自行设置的mapleader 跟着g。


与命令行交互

我们时常会在 Vim 或者 shell 中执行一些命令。例如,在用Vim 打开一个随书源码文件之前,先进入相应的目录。在

这些实例中,你会看到一个 $ 命令提示符,这表示该命令运行在一个外部的shell 中:

? $ cd code/terminal/

? $ nvim readme.md

而在 Vim 中,按下 : 键会从普


目录

第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

标签
混口饭吃,vim