编辑器(Vim)

2020-06-06 11:08:57

写英语单词和写代码是截然不同的活动。在编程时,与编写长流相比,您需要花费更多的时间来切换文件、读取、导航和编辑代码。有不同类型的程序用来编写英文单词和代码(例如,Microsoft Word和Visual Studio代码),这是有道理的。

作为程序员,我们大部分时间都在编辑代码,所以花时间掌握一个适合您需要的编辑器是值得的。以下是你学习网络编辑的方法:

坚持使用编辑器来满足您的所有文本编辑需求(即使它最初会降低您的速度)。

边走边查:如果看起来应该有更好的方法去做某事,那么很可能就是有更好的方法。

如果您遵循上述方法,完全承诺将新程序用于所有文本编辑目的,则学习复杂的文本编辑器的时间表如下所示。在一两个小时内,您将学习基本的编辑器功能,如打开和编辑文件、保存/退出和导航缓冲区。一旦你使用了20个小时,你应该和以前的编辑一样快。之后,好处就开始了:你会有足够的知识和记忆,使用新的编辑器可以节省你的时间。现代文本编辑器是一种奇妙而强大的工具,所以学习永远不会停止:你学得越多,速度就会越快。

今天哪些编辑很受欢迎?请看这份堆栈溢出调查(可能会有一些偏见,因为堆栈溢出用户可能不能代表整个程序员)。visual StudioCode是最流行的编辑器。Vim是最流行的基于命令行的编辑器。

这门课的所有讲师都使用Vim作为他们的编辑器。Vim有着丰富的历史;它起源于Vi编辑器(1976),至今仍在开发中。Vim背后有一些非常好的想法,因此,很多工具都支持Vim仿真模式(例如,已经有140万人为VS代码安装了Vim仿真)。即使您最终切换到其他文本编辑器,Vim也可能值得学习。

要在50分钟内教授Vim的所有功能是不可能的,所以我们将重点讲解Vim的原理,教您基本知识,向您展示一些更高级的功能,并给您提供掌握该工具的资源。

在编程时,您将大部分时间花在阅读/编辑上,而不是写作上。因此,Vim是一个模态编辑器:它有不同的插入文本和操作文本的模式。Vim是可编程的(使用Vimscript和其他语言,如Python),Vim的界面本身是一种编程语言:击键(带有助记符名称)是命令,并且这些命令是可组合的。Vim避免使用鼠标,因为它太慢;Vim甚至避免使用箭头键,因为它需要太多的移动。

最终结果是编辑器可以与您认为的速度相匹配。

Vim的设计基于这样的理念,即程序员将大量时间花在阅读、导航和进行小编辑上,而不是编写长长的文本流。因此,Vim有多种操作模式。

按键在不同的操作模式下有不同的含义。例如,字母x在插入模式下将只插入文字字符‘x’,但在正常模式下,它将删除光标下的字符,而在视觉模式下,它将删除所选内容。

在默认配置中,Vim在左下角显示当前模式。初始/默认模式为正常模式。您通常会在正常模式和插入模式之间花费大部分时间。

您可以通过按<;Esc>;(退出键)从任何模式切换回正常模式来更改模式。从普通模式进入插入模式,用I替换模式,用R替换模式,用v替换可视模式,用V替换可视行模式,用<;C-v>;(Ctrl-V,有时也写成^V)进入可视块模式,用:替换命令行模式。

在使用Vim时,您经常使用<;Esc>;键:请考虑将Caps Lock重新映射为Escape(macOS说明)。

在正常模式下,按I进入插入模式。现在,Vim的行为与任何其他文本编辑器一样,直到您按<;Esc>;键返回正常模式。这一点,加上上面解释的基础知识,就是开始使用Vim编辑文件所需的全部内容(尽管效率不是特别高,如果您将所有时间都花在从插入模式进行编辑的话)。

Vim维护一组打开的文件,称为“缓冲区”。Vim会话有多个选项卡,每个选项卡都有多个窗口(拆分窗格)。每个窗口都显示一个缓冲区。与您熟悉的其他程序(如Web浏览器)不同,缓冲区和窗口之间不存在一对一的对应关系;窗口仅仅是视图。给定的缓冲区可以在多个窗口中打开,甚至在同一选项卡中也可以打开。例如,要同时查看文件的两个不同部分,这可能非常方便。

在正常模式下,可以通过键入以下命令进入命令模式。按下:后,光标将跳转到屏幕底部的命令行。此模式具有许多功能,包括打开、保存和关闭文件,以及退出Vim。

Vim中最重要的思想是,Vim的接口本身就是一种编程语言。击键(带有助记符名称)是命令,这些命令由以下命令组成。这可以实现高效的移动和编辑,特别是当命令变成肌肉记忆时。

您应该将大部分时间花在正常模式下,使用移动命令来导航缓冲区。Vim中的动作也称为“名词”,因为它们指的是文本块。

以前用鼠标做的所有事情,现在都是用键盘做的,使用与移动命令组成的编辑命令。这就是Vim的界面开始看起来像编程语言的地方。Vim的编辑命令也称为“动词”,因为动词作用于名词。

d{Motion}DELETE{Motion}例如,dw是删除词,d$是删除到行尾,d0是删除到行首。

您可以将名词和动词与计数组合在一起,这将执行给定的操作次数。

你可以使用修饰语来改变名词的意思。有些修饰语是i,意思是“内部”或“内部”,还有a,意思是“周围”。

定义fizz_buzz(限制):对于范围内的i(限制):如果I%3==0:打印(';fizz';)如果I%5==0:打印(';fizz';)如果I%3和I%5:打印(I)def main():fizz_buzz(10)。

以15的倍数在不同的行上打印“冒泡”和“嗡嗡”

请参阅演示的讲座视频。将使用Vim进行上述更改的方式与使用另一个程序进行相同编辑的方式进行比较。请注意,在Vim中只需很少的击键,就可以按照您认为的速度进行编辑。

Vim通过~/.vimrc中的纯文本配置文件(包含Vimscript命令)进行自定义。可能有很多您想要打开的基本设置。

我们提供了文档齐全的基本配置,您可以将其用作入门级配置。我们推荐使用它,因为它修复了Vim的一些奇怪的默认行为。在此处下载我们的配置并将其保存到~/.vimrc。

Vim是高度可定制的,值得花时间探索定制选项。您可以在GitHub上查看人们的点文件以获取灵感,例如,您的教师的Vim配置(Anish、Jon(使用nevim)、Jose)。在这个话题上也有很多很好的博客帖子。尽量不要复制和粘贴用户的完整配置,而要阅读、理解并获取您需要的内容。

有大量用于扩展Vim的插件。与您可能在互联网上找到的过时建议相反,您不需要使用Vim的插件管理器(从Vim8.0开始)。相反,您可以使用内置的包管理系统。只需创建目录~/.vim/pack/vendor/start/,然后将插件放入其中(例如,通过git克隆)。

我们试图避免在这里给出一个压倒性的插件列表。您可以查看讲师的dotfile(Anish,Jon,Jose)以了解我们还使用了哪些其他插件。查看Vim Awese以获得更棒的Vim插件。还有大量关于此主题的博客文章:只需搜索“Best Vimplugins”即可。

许多工具都支持Vim仿真。质量从好到好各不相同;根据工具的不同,它可能不支持更花哨的Vim特性,但大多数都很好地涵盖了基本功能。

如果您是Bash用户,请使用set-ovi。如果使用Zsh,请使用bindkey-v。对于Fish,为fish_vi_key_bindings。此外,无论您使用哪种shell,都可以导出EDITOR=vim。这是一个环境变量,用于确定当程序想要启动编辑器时启动哪个编辑器。例如,git将使用此编辑器处理提交消息。

许多程序使用GNUReadline库作为它们的命令行界面。Readline还支持(基本)Vim模拟,可以通过将以下行添加到~/.inputrc文件来启用该功能:

甚至还有针对网络浏览器的VIM键绑定扩展--一些流行的扩展是针对Google Chrome的Vimium和针对Firefox的Tridactyl。你甚至可以在JupyterNotebook上买到Vim的装订。

这里有几个示例向您展示编辑器的威力。我们不能教你所有这些东西,但你会边学边学。一个很好的启发式方法:每当你使用你的编辑器,并且你认为“肯定有更好的方法来做这件事”时,很可能会有:在网上查一下。

宏可以是递归记录宏,使用@{character}递归调用宏(在记录完成之前不会执行任何操作)。

Vimtutor是随Vim一起安装的教程-如果安装了Vim,您应该能够从shell运行Vimtutor。

Vim Golf是编码高尔夫,但是编程语言是Vim的UI

下载我们的基本vimrc并将其保存到~/.vimrc。通读注释良好的文件(使用Vim!),并观察Vim在使用新配置时的外观和行为略有不同。

安装并配置插件:ctrlp.vim。阅读插件的文档。尝试使用CtrlP定位文件,方法是导航到项目目录,打开Vim,然后使用Vim命令行启动:CtrlP。

使用Vim进行下个月的所有文本编辑。每当某件事看起来效率低下,或者当你认为“一定有更好的方法”时,试着在谷歌上搜索一下,很可能是有的。如果您被困住了,请来办公时间或给我们发电子邮件。

(高级)使用Vim宏将XML转换为JSON(示例文件)。尝试自己完成此操作,但如果遇到问题,可以查看上面的宏部分。