名校课程推荐 | MIT《CS 实用工具课程》-编辑器

编辑器

编辑器的重要性

对于技术工程师来说,我们大部分时间都在编辑明文文件,所以花点时间掌握一个适合自己需求的编辑器是很值得的。

你一般如何学习使用一个新的编辑器?你会强迫自己使用这个编辑器一段时间,即使它会暂时影响你的工作效率,但很快就会适应它(两周时间足够学习基本知识了)。

我们这里会讲Vim编辑器,同时也鼓励你们体验其他编辑器,这取决于你们自己的选择。程序员们对自己使用的编辑器也都有着非常强的执念。

由于不可能在50分钟内教你学会一个编辑器的所有功能,我们会主要专注解释它的基础知识,并展示部分高级功能,然后告诉你们掌握这个工具所需要的资源。我们这堂课讲的是Vim编辑器,但大部分思想都可以转换到你目前使用的其他编辑器上(如果不能适用到你的编辑器上,那你可以考虑弃用它了)。

editor learning curves

上图编辑器们的学习曲线就很迷。学习一个编辑器的基础知识很简单(尽管可能需要几年的时间才能掌握)。

目前什么编辑器比较流行?看一下这个 Stack Overflow调查(可能会有失偏颇,因为Stack Overflow的用户并不能代表所有程序员)。

命令行编辑器

即使你最终决定使用GUI编辑器,也值得花时间学习一下命令行编辑器,以便在远程机器上轻松编辑文件。

Nano

Nano是一个简易上手的命令行编辑器。

  • 用方向键移动

  • 底部显示所有其他快捷方式(保存、退出等)

Vim

Vi/Vim是一个功能很强大的文本编辑器。它是一个命令行程序,通常在任何地方都有安装,有了它在远程设备上编辑文件就会很方便。

Vim还有图形版本,比如GVim和MacVim。它们有额外的功能,比如24位颜色、菜单和弹出窗口。

Vim的设计逻辑

  • 在进行编程时,大部分时间都花在阅读/编辑而不是写代码

    • Vim是一个多模态编辑器,它对于插入文本和操纵文本有不同的模式
  • Vim是可编程的(可以用Vimscript以及类似Python的其他语言进行编程)

  • Vim的接口本身就像一种编程语言

    • 用键入输入(以及其助记名)命令

    • 命令是可组合的

  • 不要使用鼠标:太慢了

  • 编辑器应该能跟得上你的思维速度

Vim入门

模式

Vim在左下角显示当前模式。

  • 普通模式:用于在文件中移动和编辑

    • 大部分时间都是这个模式
  • 插入模式:用于插入文本

  • 可视(一般、行或块)模式:用于选择文本块

你可以按<ESC>从任何其他模式切换回普通模式。在普通模式下,输入i进入插入模式,输入v进入可视(一般)模式,输入大写V进入可视行模式,输入<C-v>进入可视块模式。

使用Vim时你会经常用到<ESC>键,可以考虑把CapsLk(大小写锁定键)重映射成<ESC>键。

基础操作

在普通模式下Vim ex命令通过:{command}的形式发布

  • :q 退出(关闭窗口)

  • :w 保存

  • :wq 保存并退出

  • :e {文件名} 打开要编辑的文件

  • :ls 显示打开的buffer

  • :help {标题} 打开帮助文档

  • :help :w 打开 :w ex命令的帮助文档

  • :help w 打开 w 移动的帮助文档

移动

Vim中的移动是很高效的。在普通模式下使用移动命令浏览文件。

  • 禁用方向键避免习惯干扰

    nnoremap <Left> :echoe "Use h"<CR>
    nnoremap <Right> :echoe "Use l"<CR>
    nnoremap <Up> :echoe "Use k"<CR>
    nnoremap <Down> :echoe "Use j"<CR>
    
  • 基本移动:hjkl (左,下,上,右)

  • 词: w (下一个词), b (词首), e (词尾)

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

  • 屏幕: H (屏幕首行), M (屏幕中间), L (屏幕底部)

  • 文件: gg (文件头), G (文件尾)

  • 行数: :{行数}<CR> 或者 {行数}G (行{数})

  • 杂项: % (对应项)

  • 查找: f{字符}t{字符}F{字符}T{字符}

    • 在当前行中向前/向后查找(find/Find)/前往(to/To){字符}的位置
  • 重复N次:{number}{movement}, 比如 10j 向下移动10行

  • 搜索:/{regex},用 n / N 在结果中切换

选择

可视模式:

  • 可视化

  • 可视化行

  • 可视化块

可以使用移动按键来选中文本

操纵文本

所有以前需要用鼠标做的事,现在都可以用键盘(以及强大的命令组合)来完成。

  • i 进入插入模式

    • 但是对于操纵/删除文本,除了退格之外还有更多方法
  • o /O在上一行/下一行插入行

  • d{motion} 删除{motion}

    • 例如, dw 删除词, d$ 删除到行尾, d0 删除到行首。
  • c{motion} 修改{motion}

    • 例如, cw 是修改词

    • 相当于把 d{motion} 之后接 i

  • x 删除字符(等同于 dl

  • s 替换字符(等同于 xi

  • 可视化模式+ 操作

    • 选中文本,用 d 删除或者用 c 修改
  • u 撤销, <C-r> 恢复

  • 还有更多: 比如 ~ 改变字符的大小写

资源

  • vimtutor 是Vim 安装时自带的教程

  • Vim Adventures 是学习使用Vim的一个游戏

自定义Vim

Vim 通过一个位于 ~/.vimrc 的文本配置文件(包含Vimscript命令)进行自定义。可能有很多你想启用的基础设置。

你可以在GitHub上参考其他人的配置文件,但不要直接复制粘贴别人的整个配置文件。看完他们的配置文件之后自己消化理解,然后取你需要的部分。

一些可以考虑的自定义:

  • 语法高亮显示:syntax on

  • 配色方案

  • 行号:set nu / set rnu

  • 退格键何时可以删除光标之前的字符:set backspace=indent,eol,start

Vim进阶

下面的几个例子可以进一步展示Vim编辑器的厉害之处。我们不能把所有内容都教授给你们,你们可以自己在使用过程中慢慢学习。如果你在使用编辑器的过程中认为"一定有更好的方法来实现这个",很可能真的就有,方法就是上网查找。

搜索和替换

:s 命令用来查找和替换字符串。

  • :%s/foo/bar/g

    • 在全局范围(%)查找foo 并替换成bar
  • %s/\[.\*\](\(.\*\))/\1/g

    • 将命名的Markdown 链接替换成简单URLs

多窗口

  • sp / vsp 拆分窗口

  • 同一个buffer可以在多个窗口中显示

鼠标支持

  • set mouse+=a

    • 可以点击、滑动选择

宏命令

  • q{character} 开始在寄存器{character}中录制宏

  • q停止录制

  • @{character} 重放宏

  • 宏命令遇错会停止

  • {number}@{character}将宏执行{number}次

  • 宏可以是递归的

    • 首先用q{character}q清空宏

    • 录制宏时,用 @{character} 来递归调用宏(在录制完成之前不会有任何操作)

  • 例子:将xml 转成json (文件)

    • 一个对象数组,键为"name"/"email"

    • 要使用Python 吗?

    • 还是用sed /regexes?

      • g/people/d

      • %s/<person>/{/g

      • %s/<name>\(.\*\)<\/name>/"name": "\1",/g

    • Vim 命令/宏

      • Gddggdd 删除第一行和最后一行

      • 格式化一个元素的宏(使用寄存器 e

        • 跳转到有 <name> 的行

        • qe^r"f>s": "<ESC>f<C"<ESC>q

      • 格式化一个对象的宏

        • 跳转到有 <person> 的行

        • qpS{<ESC>j@eA,<ESC>j@ejS},<ESC>q

      • 格式化一个对象然后跳转到下一个对象的宏

        • 跳转到有 <person> 的行

        • qq@pjq

      • 执行宏到文件尾

        • 999@q
      • 手动删除最后的然后加上 [] 分隔符

扩展Vim

Vim有很多扩展插件。

首先,设置一个插件管理器比如 vim-plug, Vundle, or pathogen.vim

一些插件:

插件列表:

其他程序的Vim模式

对于很多流行的编辑器(如vim和emacs),很多其他工具都支持编辑器模拟。

  • Shell

    • 如果你是Bash 用户,用 set -o vi

    • 如果你用Zsh,用bindkey -v

    • export EDITOR=vimgit等程序使用的环境变量)

  • ~/.inputrc

    • set editing-mode vi

网络浏览器也有vim按键绑定扩展,一些流行的扩展:谷歌Chrome的Viimium和火狐的Tridactyl

资源

练习

  1. 尝试一些编辑器。尝试至少一个命令行编辑器(如Vim)以及一个GUI编辑器(如Atom)。通过vimtutor(或其他编辑器的同样教程)这类教程学习使用编辑器。要对一个新编辑器有感觉,你需要连续几天使用这个编辑器进行你的任务。

  2. 定制你的编辑器。参照在线的提示和技巧,以及其他人的配置(通常他们都有详细的文档)。

  3. 尝试为你的编辑器添加插件。

  4. 使用一个功能强大的编辑器至少几个星期,使用几个星期后你就应该能看到它的好处了。在某些情况下,你应该让编辑器的工作速度跟得上你的速度。

  5. 安装一个代码分析包(例如python的三方包pyflakes)链接到你的编辑器,并测试它是否工作。

客服