【shell学习】missing-semester-3-编辑器Vim

编辑器(Vim)

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

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

  • 从一个教程开始(即这个讲座,加上我们指出的资源)
  • 坚持使用编辑器来满足你所有的文本编辑需求(即使它一开始会减慢你的速度)
  • 你可以一边做一边查:如果看起来应该有更好的方法去做某件事,那很可能确实有

学哪个编辑器?

程序员对他们的文本编辑器有强烈的意见冲突。

哪些编辑器现在很受欢迎?请参阅此Stack Overflow调查(可能会有一些偏见,因为Stack Overflow用户可能不能代表所有程序员)。Visual Studio Code是最受欢迎的编辑器。Vim是最流行的基于命令行的编辑器。

Vim

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

在50分钟内讲完Vim的所有功能是不可能的,所以我们将专注于解释Vim的原理,教给你基本的功能,展示一些更高级的功能,并为你提供掌握该工具的资源。

Vim的哲学

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

最终的结果是编辑器可以匹配您的思考速度。

模态编辑

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

  • Normal:用于移动文件并进行编辑
  • Insert:用于插入文本
  • Replace:用于替换文本
  • Visual(普通的,行的或块的):用于选择文本块
  • Command-line:用于运行命令

在不同的操作模式下,按键有不同的含义。例如,字母x在Insert模式下只会插入一个文字字符’ x ',但在Normal模式下,它会删除光标下的字符,而在Visual模式下,它会删除所选内容。

在其默认配置中,Vim在左下角显示当前模式。初始/默认模式为“Normal模式”。通常大部分时间都在普通模式和插入模式之间。

你可以通过按(退出键)来更改模式,以从任意模式切换回Normal模式。在Normal模式中,使用i进入Insert模式,使用R进入Replace模式,使用v进入Visual模式,使用v进入Visual Line模式,使用 (Ctrl-V,有时也写^ v)进入Visual Block模式,使用:进入命令行模式。

基础

插入模式

从普通模式,按i进入插入模式。现在,Vim的行为与任何其他文本编辑器一样,直到你按下以返回正常模式。这些,加上上面解释的基础知识,就是开始使用Vim编辑文件所需要的全部(尽管如果你把所有的时间都花在从Insert模式编辑文件上,那么效率不是特别高)。

缓冲区、选项卡和窗口

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

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

命令行

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

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

Vim的界面是一种编程语言

Vim中最重要的思想是,Vim的界面本身就是一种编程语言。键击(带有便于记忆的名称)是命令,这些命令可以组合。这使得有效的移动和编辑成为可能,尤其是当命令变成肌肉记忆时。

移动

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

  • 基本动作:hjkl(左、下、上、右)
  • 单词:w(下一个单词),b(单词的开头),e(单词的结尾)
  • 行:0(行首),^(第一个非空字符),$(行尾)
  • 屏幕:H(屏幕顶部),M(屏幕中部),L(屏幕底部)
  • 滚动:Ctrl-u(上),Ctrl-d(下)
  • 文件:gg(文件开始),G(文件结束)
  • 行号::{number}{number}G(行号{number})
  • 杂项:%(对应项)
  • 查找:f{character},t{character},F{character},T{character}
    • 在当前行中/向前/向后查找{character}
    • , /;导航到匹配
  • 搜索:/{regex},n/N导航到匹配

选择

Visual模式:

  • Visual:v
  • Visual行:V
  • Visual块:Ctrl-v

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

编辑

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

  • i:进入insert模式
    • 但是对于操作/删除文本,需要使用退格键以外的东西
  • o/O在上面/下面插入一行
  • d{motion}删除{motion}
    • 例如,dw是删除字,d$是删除行尾,d0是删除行首
  • c{motion}改变{motion}
    • 例如,cw是改变单词
    • 就像d{motion}后面跟着i
  • x 删除字符(相当于dl
  • s 替换字符(相当于xi)
  • Visual模式+操作
    • 选择文本,d删除它,c更改它
  • u是撤销,是重做
  • y是复制/“yank”(其他一些命令,如d也复制)
  • p是粘贴
  • 还有很多要学的:例如~可以翻转一个字符的大小写

数字

你可以将名词和动词与数字组合在一起,count将多次执行给定的操作。

  • 3w向前移动3个单词
  • 5j向下移动5行
  • 7dw删除7个单词

修改

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

  • 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

  • 为15的倍数在两行打印“fizz”和“buzz”

  • 为5的倍数打印“fizz”

  • 使用硬编码的10参数,而不是接受命令行参数

请参阅演示的讲座视频。将将使用Vim进行上述更改的方式与使用其他程序进行相同编辑的方式进行比较。注意,在Vim中只需要很少的按键,允许你以你认为的速度进行编辑。

定制Vim

Vim是通过~/.vimc中的明文配置文件定制的(包含Vimscript命令)。可能有许多你想要打开的基本设置。

我们提供了一个文档齐全的基本配置,你可以使用它作为起点。我们建议使用它,因为它修复了Vim的一些古怪的默认行为。在**这里下载我们的配置并保存到~/.vimrc**。

Vim具有很强的可定制性,值得花时间研究定制选项。你可以在GitHub上查看人们的配置文件来获得灵感,例如,你的导师的Vim配置(Anish, Jon(使用neovim), Jose)。关于这个话题也有很多不错的博客文章。尽量不要复制粘贴人们的全部配置,而是阅读它,理解它,并采纳你需要的。

扩展Vim

有大量的插件用于扩展Vim。与你可能在互联网上找到的过时建议相反,你需要为Vim使用插件管理器(从Vim 8.0开始)。相反,您可以使用内置的包管理系统。只需创建目录~/.Vim /pack/vendor/start/,然后把插件放进去(比如通过git clone)。

下面是一些我们最喜欢的插件:

  • ctrlp.vim:模糊的文件查找器
  • ack.vim:代码搜索
  • nerdtree:文件资源管理
  • vim-easymotion:神奇的动作

我们尽量避免在这里给出一个过于冗长的插件列表。你可以查看讲师的配置文件(Anish, Jon, Jose),看看我们使用的其他插件。查看Vim Awesome中更多令人敬畏的Vim插件。也有很多关于这个话题的博客文章:只要搜索“最佳Vim插件”。

其他程序中的vim模式

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

shell

如果你是Bash用户,使用set -o vi。如果你使用Zsh,使用bindkey -v。对于Fish,使用fish_vi_key_bindings。此外,无论使用什么shell,都可以export EDITOR=vim。这是一个环境变量,用于在程序想要启动编辑器时决定启动哪个编辑器。例如,git将使用这个编辑器来提交消息。

逐行读取

许多程序使用GNU Readline库作为它们的命令行界面。Readline也支持(基本的)Vim模拟,可以通过向~/.inputrc`文件添加如下行:

set editing-mode vi

例如,通过这个设置,Python REPL将支持Vim绑定。

其他

甚至还有针对网络浏览器的vim键绑定扩展-一些流行的是针对谷歌Chrome的Vimium和针对Firefox的Tridactyl。你甚至可以在Jupyter笔记本中获得Vim绑定。这里是一长串具有vim类键绑定的软件列表。

先进的Vim

这里有几个例子向你展示编辑器的力量。我们不能教会你所有这些东西,但你会随着学习而学会。一个很好的启发:每当你使用编辑器时,你会想“一定有更好的方法来做这件事”,那可能就是:上网查一下。

查询替换

:s(替代)命令(文档)。

  • %s/foo/bar/g
    • 在文件全局使用bar替换foo
  • %s/\[.*\](\(.*\))/\1/g
    • 用普通url替换命名的Markdown链接

多重窗口

  • :sp/:vsp分割窗口
  • 同一个缓冲区可以有多个视图。

宏命令

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

  • q停止记录

  • @{character} 回放宏

  • 宏执行错误时停止

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

  • 宏可以递归

    • 首先通过q{character}q清除宏

    • 记录宏,用@{character}递归调用宏

      (在记录完成之前不会操作)

  • 示例:将xml转换为json(文件)

    • 带有键" name " / " email "的对象数组
    • 使用Python程序?
    • 使用sed / regex
      • g/people/d
      • %s//{/g
      • %s/\(.*\)<\/name>/"name": "\1",/g
    • Vim命令/宏
      • Gddggdd删除第一行和最后一行
      • 宏格式化单个元素(寄存器e)
        • 转到具有的行
        • qe^r"f>s": "fq
      • 宏格式化一个实例
        • 转到的行
        • qpS{j@eA,j@ejS},q
      • 宏格式化一个实例并转到下一个实例
        • 转到的行
        • qq@pjq
      • 执行宏直到文件结束
        • 999@q
      • 手动删除最后一个并添加[]分隔符

资源

  • vimtutor是一个与Vim一起安装的教程—如果安装了Vim,您应该能够从您的shell运行vimtutor
  • Vim Adventures是一款学习Vim的游戏
  • Vim Tips Wiki
  • Vim Advent Calendar有各种各样的Vim提示
  • Vim Golf是代码高尔夫,但编程语言是Vim的UI
  • Vi/Vim Stack Exchange
  • Vim Screencasts
  • Practical Vim (book)

练习

  1. 完成vimtutor。注意:它在80x24(80列× 24行)终端窗口中看起来最好。

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

  3. 安装并配置一个插件:ctrlp.vim。

  4. 通过mkdir -p创建插件目录

`~/.vim/pack/vendor/start`
  1. 下载插件:cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim

  2. 阅读该插件的文档。尝试使用CtrlP来定位一个文件,通过导航到一个项目目录,打开Vim,然后使用Vim命令行启动:CtrlP

  3. 通过向~/.vimrc添加配置来定制CtrlP,实现通过按Ctrl-P打开CtrlP。

  4. 要练习使用Vim,请在自己的机器上重新做一次演示。

  5. 使用Vim进行下个月的所有文本编辑。当某些事情看起来效率低下时,或者当你认为“一定有更好的方法”时,试着在谷歌上搜索一下,很可能有。

  6. 配置其他工具以使用Vim绑定(请参阅上面的说明)。

  7. 进一步定制你的~/.vimrc并安装更多的插件。

  8. (高级)使用Vim宏将XML转换为JSON(示例文件)。试着自己做这个,但是如果遇到问题,你可以查看上面的宏部分。


title: 【shell学习】missing-semester-3-编辑器Vim
date: 2022-05-31 18:35:48
tags:


编辑器(Vim)

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

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

  • 从一个教程开始(即这个讲座,加上我们指出的资源)
  • 坚持使用编辑器来满足你所有的文本编辑需求(即使它一开始会减慢你的速度)
  • 你可以一边做一边查:如果看起来应该有更好的方法去做某件事,那很可能确实有

学哪个编辑器?

程序员对他们的文本编辑器有强烈的意见冲突。

哪些编辑器现在很受欢迎?请参阅此Stack Overflow调查(可能会有一些偏见,因为Stack Overflow用户可能不能代表所有程序员)。Visual Studio Code是最受欢迎的编辑器。Vim是最流行的基于命令行的编辑器。

Vim

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

在50分钟内讲完Vim的所有功能是不可能的,所以我们将专注于解释Vim的原理,教给你基本的功能,展示一些更高级的功能,并为你提供掌握该工具的资源。

Vim的哲学

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

最终的结果是编辑器可以匹配您的思考速度。

模态编辑

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

  • Normal:用于移动文件并进行编辑
  • Insert:用于插入文本
  • Replace:用于替换文本
  • Visual(普通的,行的或块的):用于选择文本块
  • Command-line:用于运行命令

在不同的操作模式下,按键有不同的含义。例如,字母x在Insert模式下只会插入一个文字字符’ x ',但在Normal模式下,它会删除光标下的字符,而在Visual模式下,它会删除所选内容。

在其默认配置中,Vim在左下角显示当前模式。初始/默认模式为“Normal模式”。通常大部分时间都在普通模式和插入模式之间。

你可以通过按(退出键)来更改模式,以从任意模式切换回Normal模式。在Normal模式中,使用i进入Insert模式,使用R进入Replace模式,使用v进入Visual模式,使用v进入Visual Line模式,使用 (Ctrl-V,有时也写^ v)进入Visual Block模式,使用:进入命令行模式。

基础

插入模式

从普通模式,按i进入插入模式。现在,Vim的行为与任何其他文本编辑器一样,直到你按下以返回正常模式。这些,加上上面解释的基础知识,就是开始使用Vim编辑文件所需要的全部(尽管如果你把所有的时间都花在从Insert模式编辑文件上,那么效率不是特别高)。

缓冲区、选项卡和窗口

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

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

命令行

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

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

Vim的界面是一种编程语言

Vim中最重要的思想是,Vim的界面本身就是一种编程语言。键击(带有便于记忆的名称)是命令,这些命令可以组合。这使得有效的移动和编辑成为可能,尤其是当命令变成肌肉记忆时。

移动

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

  • 基本动作:hjkl(左、下、上、右)
  • 单词:w(下一个单词),b(单词的开头),e(单词的结尾)
  • 行:0(行首),^(第一个非空字符),$(行尾)
  • 屏幕:H(屏幕顶部),M(屏幕中部),L(屏幕底部)
  • 滚动:Ctrl-u(上),Ctrl-d(下)
  • 文件:gg(文件开始),G(文件结束)
  • 行号::{number}{number}G(行号{number})
  • 杂项:%(对应项)
  • 查找:f{character},t{character},F{character},T{character}
    • 在当前行中/向前/向后查找{character}
    • , /;导航到匹配
  • 搜索:/{regex},n/N导航到匹配

选择

Visual模式:

  • Visual:v
  • Visual行:V
  • Visual块:Ctrl-v

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

编辑

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

  • i:进入insert模式
    • 但是对于操作/删除文本,需要使用退格键以外的东西
  • o/O在上面/下面插入一行
  • d{motion}删除{motion}
    • 例如,dw是删除字,d$是删除行尾,d0是删除行首
  • c{motion}改变{motion}
    • 例如,cw是改变单词
    • 就像d{motion}后面跟着i
  • x 删除字符(相当于dl
  • s 替换字符(相当于xi)
  • Visual模式+操作
    • 选择文本,d删除它,c更改它
  • u是撤销,是重做
  • y是复制/“yank”(其他一些命令,如d也复制)
  • p是粘贴
  • 还有很多要学的:例如~可以翻转一个字符的大小写

数字

你可以将名词和动词与数字组合在一起,count将多次执行给定的操作。

  • 3w向前移动3个单词
  • 5j向下移动5行
  • 7dw删除7个单词

修改

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

  • 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

  • 为15的倍数在两行打印“fizz”和“buzz”

  • 为5的倍数打印“fizz”

  • 使用硬编码的10参数,而不是接受命令行参数

请参阅演示的讲座视频。将将使用Vim进行上述更改的方式与使用其他程序进行相同编辑的方式进行比较。注意,在Vim中只需要很少的按键,允许你以你认为的速度进行编辑。

定制Vim

Vim是通过~/.vimc中的明文配置文件定制的(包含Vimscript命令)。可能有许多你想要打开的基本设置。

我们提供了一个文档齐全的基本配置,你可以使用它作为起点。我们建议使用它,因为它修复了Vim的一些古怪的默认行为。在**这里下载我们的配置并保存到~/.vimrc**。

Vim具有很强的可定制性,值得花时间研究定制选项。你可以在GitHub上查看人们的配置文件来获得灵感,例如,你的导师的Vim配置(Anish, Jon(使用neovim), Jose)。关于这个话题也有很多不错的博客文章。尽量不要复制粘贴人们的全部配置,而是阅读它,理解它,并采纳你需要的。

扩展Vim

有大量的插件用于扩展Vim。与你可能在互联网上找到的过时建议相反,你需要为Vim使用插件管理器(从Vim 8.0开始)。相反,您可以使用内置的包管理系统。只需创建目录~/.Vim /pack/vendor/start/,然后把插件放进去(比如通过git clone)。

下面是一些我们最喜欢的插件:

  • ctrlp.vim:模糊的文件查找器
  • ack.vim:代码搜索
  • nerdtree:文件资源管理
  • vim-easymotion:神奇的动作

我们尽量避免在这里给出一个过于冗长的插件列表。你可以查看讲师的配置文件(Anish, Jon, Jose),看看我们使用的其他插件。查看Vim Awesome中更多令人敬畏的Vim插件。也有很多关于这个话题的博客文章:只要搜索“最佳Vim插件”。

其他程序中的vim模式

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

shell

如果你是Bash用户,使用set -o vi。如果你使用Zsh,使用bindkey -v。对于Fish,使用fish_vi_key_bindings。此外,无论使用什么shell,都可以export EDITOR=vim。这是一个环境变量,用于在程序想要启动编辑器时决定启动哪个编辑器。例如,git将使用这个编辑器来提交消息。

逐行读取

许多程序使用GNU Readline库作为它们的命令行界面。Readline也支持(基本的)Vim模拟,可以通过向~/.inputrc`文件添加如下行:

set editing-mode vi

例如,通过这个设置,Python REPL将支持Vim绑定。

其他

甚至还有针对网络浏览器的vim键绑定扩展-一些流行的是针对谷歌Chrome的Vimium和针对Firefox的Tridactyl。你甚至可以在Jupyter笔记本中获得Vim绑定。这里是一长串具有vim类键绑定的软件列表。

先进的Vim

这里有几个例子向你展示编辑器的力量。我们不能教会你所有这些东西,但你会随着学习而学会。一个很好的启发:每当你使用编辑器时,你会想“一定有更好的方法来做这件事”,那可能就是:上网查一下。

查询替换

:s(替代)命令(文档)。

  • %s/foo/bar/g
    • 在文件全局使用bar替换foo
  • %s/\[.*\](\(.*\))/\1/g
    • 用普通url替换命名的Markdown链接

多重窗口

  • :sp/:vsp分割窗口
  • 同一个缓冲区可以有多个视图。

宏命令

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

  • q停止记录

  • @{character} 回放宏

  • 宏执行错误时停止

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

  • 宏可以递归

    • 首先通过q{character}q清除宏

    • 记录宏,用@{character}递归调用宏

      (在记录完成之前不会操作)

  • 示例:将xml转换为json(文件)

    • 带有键" name " / " email "的对象数组
    • 使用Python程序?
    • 使用sed / regex
      • g/people/d
      • %s//{/g
      • %s/\(.*\)<\/name>/"name": "\1",/g
    • Vim命令/宏
      • Gddggdd删除第一行和最后一行
      • 宏格式化单个元素(寄存器e)
        • 转到具有的行
        • qe^r"f>s": "fq
      • 宏格式化一个实例
        • 转到的行
        • qpS{j@eA,j@ejS},q
      • 宏格式化一个实例并转到下一个实例
        • 转到的行
        • qq@pjq
      • 执行宏直到文件结束
        • 999@q
      • 手动删除最后一个并添加[]分隔符

资源

  • vimtutor是一个与Vim一起安装的教程—如果安装了Vim,您应该能够从您的shell运行vimtutor
  • Vim Adventures是一款学习Vim的游戏
  • Vim Tips Wiki
  • Vim Advent Calendar有各种各样的Vim提示
  • Vim Golf是代码高尔夫,但编程语言是Vim的UI
  • Vi/Vim Stack Exchange
  • Vim Screencasts
  • Practical Vim (book)

练习

  1. 完成vimtutor。注意:它在80x24(80列× 24行)终端窗口中看起来最好。

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

  3. 安装并配置一个插件:ctrlp.vim。

  4. 通过mkdir -p创建插件目录

`~/.vim/pack/vendor/start`
  1. 下载插件:cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim

  2. 阅读该插件的文档。尝试使用CtrlP来定位一个文件,通过导航到一个项目目录,打开Vim,然后使用Vim命令行启动:CtrlP

  3. 通过向~/.vimrc添加配置来定制CtrlP,实现通过按Ctrl-P打开CtrlP。

  4. 要练习使用Vim,请在自己的机器上重新做一次演示。

  5. 使用Vim进行下个月的所有文本编辑。当某些事情看起来效率低下时,或者当你认为“一定有更好的方法”时,试着在谷歌上搜索一下,很可能有。

  6. 配置其他工具以使用Vim绑定(请参阅上面的说明)。

  7. 进一步定制你的~/.vimrc并安装更多的插件。

  8. (高级)使用Vim宏将XML转换为JSON(示例文件)。试着自己做这个,但是如果遇到问题,你可以查看上面的宏部分。

你可能感兴趣的:(linux,编辑器,vim,学习)