MIT2020补习班——(三)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以转义(macOS指令)。

基础

插入文本

在正常模式下,按i键进入插入模式。现在,Vim的行为类似于任何其他文本编辑器,直到您按<ESC>返回正常模式。这和上面解释的基础知识一起,是开始使用Vim编辑文件所需要的全部。

缓冲区、选项卡和窗口

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

默认情况下,Vim打开时只有一个选项卡,其中包含一个窗口。

命令行

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

:q退出(关闭窗口)
:w保存(“写入”)
:wq保存并退出
:e{name of file}打开要编辑的文件
:ls显示打开的缓冲区
:help{topic}打开帮助
:help:w打开:w命令的帮助
:help w打开w移动的帮助

Vim的接口是一种编程语言

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

移动

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

基本动作:hjkl(左、下、上、右)

单词:w(下一个单词)、b(单词开头)、e(单词结尾)

行:0(行首),^(第一个非空字符),$(行尾)

屏幕:H(屏幕顶部)、M(屏幕中部)、L(屏幕底部)

滚动:Ctrl-u(向上)、Ctrl-d(向下)

文件:gg(文件开头),G(文件结尾)

行号:{number}<CR>{number}G(行{number})

杂项:%(对应项)

查找:f{character}t{character}f{character}t{character}

  • 在当前行上查找/向前/向后{字符}

  • / 用于导航匹配项

搜索:/{regex},不适用于导航匹配项

选择

视觉模式:

  • 视觉纯文本
  • 视觉行
  • 视觉块

可以使用移动键进行选择。

编辑

你以前用鼠标做的每一件事,现在都是用键盘编辑命令,用移动命令组成。这里是Vim的接口开始看起来像编程语言的地方。Vim的编辑命令也称为“动词”,因为动词作用于名词。

i 进入插入模式

  • 但是对于操作/删除文本,希望使用的不仅仅是backspace

o/O 在下方/上方插入行

d{motion}删除{motion}

  • dw为删除字,d$为删除行尾,d0为删除行首

c{motion} 改变{motion}

  • cw是改变单词
  • 就像d{motion}后面跟着i

x 删除字符(等于 dl

s替代字符(等于xi

视觉模式+操作

  • 选择文本,d删除或c更改

u 撤消,<C-r>重做

y 复制/“yank”(其他一些命令,如d也复制)

p粘贴

还有很多需要学习的地方:例如,~ 翻转一个角色的情况

计数

你可以把名词和动词与一个数结合起来,这个数将执行一个给定的动作若干次。

3w向前移动3个字

5j向下移动5行

7dw删除7个字

修饰语

你可以用修饰语来改变名词的意思。有些修饰语是i,意思是“inner”或“innerside”,a,意思是“around”。

ci( 更改当前一对括号内的内容

ci[ 更改当前方括号对内的内容

da' 删除单引号字符串,包括周围的单引号

演示

下面是一个有错的fizz buzz实现:

def fizz_buzz(limit):
    for i in range(limit):
        if i % 3 == 0:
            print('fizz')
        if i % 5 == 0:
            print('fizz')
        if i % 3 and i % 5:
            print(i)

def main():
    fizz_buzz(10)

我们将解决以下问题:

  • main从未被调用
  • 从0开始而不是从1开始
  • 将“fizz”和“buzz”分别打印在15的几行上
  • 以5的倍数打印“fizz”
  • 使用硬编码参数10,而不是使用命令行参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值