1129-玩转Vim 从放弃到爱不释手

  1. 第1章 玩转vim 从放弃到爱不释手
    1. 1-1 玩转vim 从放弃到爱不释手-课程导学 (09:43)
  2. 第2章 初识 Vim,想说爱你不容易
    1. 2-1 初识 Vim,想说爱你不容易 (11:50)
    2. 2-2 Vim,为什么你有这么多模式 (09:15)
    3. 2-3 Vim 插入模式小技巧 (08:08)
    4. 2-4 Vim 快速移动大法 (15:11)
    5. 2-5 Vim快速增删改查 (13:29)
    6. 2-6 Vim 如何搜索替换 (07:15)
    7. 2-7 Vim 多文件操作 (15:01)
    8. 2-8 什么是 Vim 的 text object (06:49)
    9. 2-9 Vim复制粘贴与寄存器的使用 (16:51)
    10. 2-10 Vim 如何用宏完成强大的批量操作 (10:23)
    11. 2-11 Vim 补全大法 (07:33)
    12. 2-12 给 Vim 换个配色 (06:32)
    13. 2-13 本章小结:裸 Vim 也很强 (02:37)
  3. 第3章 编写 Vim 配置,我的 Vim 我做主
    1. 3-1 编写 vim 配置,我的 vim 我做主 (17:09)
    2. 3-2 Vim 映射迷人眼 (14:53)
    3. 3-3 本章小结:配置 Vim,让她更顺手 (01:16)
  4. 第4章 Vim 安装和使用插件
    1. 4-1 Vim 安装插件,竟如此简单 (08:40)
    2. 4-2 如何寻找自己需要的插件 (06:42)
    3. 4-3 vim美化插件,让你的 vim 与众不同 (09:57)
    4. 4-4 Vim文件目录和搜索插件,跳转文件so easy (12:20)
    5. 4-5 Vim快速定位插件,文件位置任我行 (05:58)
    6. 4-6 Vim-surround,编辑也要成双成对 (05:27)
    7. 4-7 强大的Vim模糊搜索与替换插件 (08:26)
    8. 4-8 愉快写 golang 之vim-go插件 (10:19)
    9. 4-9 python-mode把 vim 打造成轻量 Python IDE (07:11)
    10. 4-10 Vim tagbar,更愉快地浏览代码 (11:14)
    11. 4-11 强大的 vim 代码补全插件 (07:16)
    12. 4-12 Vim代码格式化与静态检查 (09:43)
    13. 4-13 Vim快速注释代码 (03:06)
    14. 4-14 vim和git,强强联手 (07:11)
    15. 4-15 本章小结:授人以渔,寻找自己需要的插件 (02:29)
  5. 第5章 与时俱进的 Vim
    1. 5-1 Vim和Tmux,天作之合 (08:27)
    2. 5-2 无处不在的 vim,让 vim 嵌入你的开发工具 (01:42)
    3. 5-3 与时俱进的 vim 之 neovim (02:07)
    4. 5-4 站在巨人的肩膀上,使用强大的开源配置 (03:37)
  6. 第6章 Vim虐我千百遍,我待Vim如初恋~
    1. 6-1 课程总结-vim虐我千百遍,我待 vim 如初恋 (03:17)
  7. vim配置

https://www.imooc.com/learn/1129

简介:Vim作为一个强大的编辑器,是很多巨佬的不二之选,但因为其较高的入门学习门槛劝退了很多人。中文的系统教程少之又少,讲vim插件使用的更是屈指可数,本课程从vim最基础的操作和概念开始讲起,带领大家学会使用和配置 vim,安装强大的 vim 插件,真正掌握编辑器之神 vim 的使用。

目录

  1. 第1章 玩转vim 从放弃到爱不释手
    1. 1-1 玩转vim 从放弃到爱不释手-课程导学 (09:43)
  2. 第2章 初识 Vim,想说爱你不容易
    1. 2-1 初识 Vim,想说爱你不容易 (11:50)
    2. 2-2 Vim,为什么你有这么多模式 (09:15)
    3. 2-3 Vim 插入模式小技巧 (08:08)
    4. 2-4 Vim 快速移动大法 (15:11)
    5. 2-5 Vim快速增删改查 (13:29)
    6. 2-6 Vim 如何搜索替换 (07:15)
    7. 2-7 Vim 多文件操作 (15:01)
    8. 2-8 什么是 Vim 的 text object (06:49)
    9. 2-9 Vim复制粘贴与寄存器的使用 (16:51)
    10. 2-10 Vim 如何用宏完成强大的批量操作 (10:23)
    11. 2-11 Vim 补全大法 (07:33)
    12. 2-12 给 Vim 换个配色 (06:32)
    13. 2-13 本章小结:裸 Vim 也很强 (02:37)
  3. 第3章 编写 Vim 配置,我的 Vim 我做主
    1. 3-1 编写 vim 配置,我的 vim 我做主 (17:09)
    2. 3-2 Vim 映射迷人眼 (14:53)
    3. 3-3 本章小结:配置 Vim,让她更顺手 (01:16)
  4. 第4章 Vim 安装和使用插件
    1. 4-1 Vim 安装插件,竟如此简单 (08:40)
    2. 4-2 如何寻找自己需要的插件 (06:42)
    3. 4-3 vim美化插件,让你的 vim 与众不同 (09:57)
    4. 4-4 Vim文件目录和搜索插件,跳转文件so easy (12:20)
    5. 4-5 Vim快速定位插件,文件位置任我行 (05:58)
    6. 4-6 Vim-surround,编辑也要成双成对 (05:27)
    7. 4-7 强大的Vim模糊搜索与替换插件 (08:26)
    8. 4-8 愉快写 golang 之vim-go插件 (10:19)
    9. 4-9 python-mode把 vim 打造成轻量 Python IDE (07:11)
    10. 4-10 Vim tagbar,更愉快地浏览代码 (11:14)
    11. 4-11 强大的 vim 代码补全插件 (07:16)
    12. 4-12 Vim代码格式化与静态检查 (09:43)
    13. 4-13 Vim快速注释代码 (03:06)
    14. 4-14 vim和git,强强联手 (07:11)
    15. 4-15 本章小结:授人以渔,寻找自己需要的插件 (02:29)
  5. 第5章 与时俱进的 Vim
    1. 5-1 Vim和Tmux,天作之合 (08:27)
    2. 5-2 无处不在的 vim,让 vim 嵌入你的开发工具 (01:42)
    3. 5-3 与时俱进的 vim 之 neovim (02:07)
    4. 5-4 站在巨人的肩膀上,使用强大的开源配置 (03:37)
  6. 第6章 Vim虐我千百遍,我待Vim如初恋~
    1. 6-1 课程总结-vim虐我千百遍,我待 vim 如初恋 (03:17)
  7. vim配置

第1章 玩转vim 从放弃到爱不释手

课程导学

1-1 玩转vim 从放弃到爱不释手-课程导学 (09:43)

什么是Vim?

Linux下两大编辑神器之一:Vim

  • Linux/Unix下使用最多的编辑器
  • Vi的改进版
  • 可能是最难上手的编辑器之一

为什么要学习Vim?

都21世纪了,为什么还要学习Vim?

  • 只要你用服务器,Vim就是一个必备技能
  • 后端和运维工程师必须掌握的编辑器,不然服务器上操作很尴尬
  • 可以纯键盘⌨️编辑,提升编辑效率

痛点

Vim难上手,学习曲线陡

  • Vim视频学习资料很少,网上很多博客讲解零散、不够直观
  • 缺少系统的教程。Vim命令众多,难以学习和记忆
  • Vim学习曲线比较陡,需要较长时间才能上手,劝退很多初学者

课程目的

帮你驯服Vim

  • 了解和掌握Vim中的基本概念
  • 熟悉Vim基本使用方法,能够做到日常编辑(纯键盘编辑)
  • 知道如何自定义Vim,安装插件无限扩充Vim的功能

课程内容

如何学习Vim?Vim经常被诟病难易上手和使用

  • Vim的概念和基本操作,比如移动和增删改查
  • 如何配置Vim,编写自己的vimrc文件
  • 如何安装和使用插件,无限扩充Vim的功能

受众

哪些人可以从本门课程受益呢?

  • 运维工程师、后端工程师等
  • Linux用户
  • 对Vim感兴趣,想要提升开发效率的开发者,甚至普通用户

预备知识

不要求掌握Vim的基础知识,但最好使用Linux/Unix系统

  • 熟悉基本的命令行操作(一般Vim多在Linux服务器上使用)
  • 知道如何安装Vim
  • 有其他编辑器使用经验。几乎所有流行IDE和编辑器都有Vim扩展

课程特色

学习Vim非一日之功,得靠肌肉记忆

  • 由浅入深,循序渐进。从基本的概念和操作讲起
  • 授人以🐟,同时授人以渔。学会了插件自己扩充Vim功能
  • 大量实践技巧(所有演示均使用按键回显工具,让你看得更明白)

第2章 初识 Vim,想说爱你不容易

从基础的 Vim 操作讲起,学习 Vim 操作和涉及到的 Vim 概念。

2-1 初识 Vim,想说爱你不容易 (11:50)

下载与安装

作为开发者的你,安装Vim应该很简单

  • Linux/Unix(Mac)自带Vim,直接终端里输入vim即可进入
  • Windows用户可以下载安装Gvim等体验
  • 建议Windows用户可以尝试使用虚拟机来体验Linux下的Vim

初识Vim

据说StackOverflow帮助过上百万开发者退出过Vim!

  • 输入vim命令进入Vim

    ~                              VIM - Vi IMproved                                
    ~                                                                               
    ~                               version 8.0.1283                                
    ~                           by Bram Moolenaar et al.                            
    ~                 Vim is open source and freely distributable                   
    ~                                                                               
    ~                        Become a registered Vim user!                          
    ~                type  :help register<Enter>   for information                  
    ~                                                                          
    ~                type  :q<Enter>               to exit
    ~                type  :help<Enter>  or  <F1>  for on-line help
    ~                type  :help version8<Enter>   for version info
  • 进去之后似乎没法输入东西,起始默认进去是普通(normal)模式

  • 使用:q可以退出Vim

开始编辑

进入编辑模式就可以像其他编辑器一样编辑了

  • 使用i进入编辑模式,开始输入文字

  • 操作 说明
    i insert before character
    a append after character
    o open a line below
    I insert before line
    A append after line
    O open a line above
  • 使用Esc又可以回到普通(normal)模式。使用:wq保存退出

    insert -> normal:Esc

课后练习

用Vim靠的是肌肉记忆,赶紧自己操作练习一下吧

  • 通过搜索引擎学习如何安装,并在你的操作系统中安装好Vim
  • 进入Vim,使用i/a/o进入编辑(insert)模式输入文本
  • 退回到默认的普通(normal)模式,保存并退出Vim

2-2 Vim,为什么你有这么多模式 (09:15)

“怪异的Vim模式”

Vim和其他很多编辑器的区别在于多种模式

  • 进入Vim默认是普通(normal)模式?为什么不是编辑模式呢?

    答:在日常开发中更多的是浏览代码,而不是编辑代码

  • 使用i(insert)/a(append)等进入编辑模式

  • 还有:cmd命令模式和v(visual)可视化模式

  1. 为什么进入Vim不能插入—普通(Normal)模式

奇怪的是,为什么Vim进入之后不能像其他编辑器一样直接插入?

  • 进入Vim默认是普通(normal)模式。使用Esc从插入模式回到普通模式
  • 普通模式下可以进行各种命令操作和移动
  • 大部分情况下,你是在浏览而不是编辑。所以Vim默认是普通(normal)模式
  1. 插入(Insert)模式

插入模式下Vim可以直接编辑,和其他编辑器一样

  • 使用i(insert)/a(append)/o(open a line below)进入插入模式
  • 使用Esc退出插入模式到普通(normal)模式
  • 你来试试I/A/O如何进入插入模式的?
  1. 命令(Command)模式

普通(Normal)模式下输入:之后执行命令,比如保存退出:wq,一气呵成

  • 顾名思义,执行Vim命令。比如保存:w、退出:q
  • 比如分屏::vs(vertical split)、:sp(split)
  • 比如使用:% s/java/python/g全局替换,将java替换为python
  1. 可视化(Visual)模式

可视化(Visual)模式一般用来块状选择文本

  • 普通模式下,使用v进入字符选择
  • 使用V选择行
  • 使用Ctrl+v进入方块♦️选择

课后练习

理解和使用Vim常用的4种模式

  • 找一个文件编辑,在插入模式和普通模式之间切换
  • 使用命令模式替换单词
  • 尝试使用可视化(Visual)模式,想想它的使用场景是?

2-3 Vim 插入模式小技巧 (08:08)

如何快速纠错?

代码就像人生,总是经常出错,需要我们快速修正

  • 进入Vim之后,首先使用i/a/o进入插入模式

  • 尝试抛弃退格键,使用Ctrl快捷键来完成编辑删除工作

    操作 说明
    Ctrl+h 删除上一个字符
    Ctrl+w 删除上一个单词
    Ctrl+u 删除当前行
  • 以上几个快捷键可以用在很多地方,比如终端

    操作 说明
    Ctrl+a 快速移动到开头
    Ctrl+e 快速移动到结尾
    Ctrl+b 前移动
    Ctrl+f 后移动

快速切换普通(Normal)模式和编辑(Insert)模式

很多键盘的键位设置,Esc按起来不方便,不方便切换到普通模式

  • 使用Ctrl+c代替Esc(但是可能会中断某些插件)、Ctrl+[
  • gi快速跳转到最后一次编辑的地方,并进入插入模式
  • 在配置章节,我们会讲解如何映射方便的快捷键来代替Esc

让键盘适应工具

键盘的选择会影响你的编辑速度

  • 选择EscCtrl比较容易触碰到的键盘
  • 使用Vim,你可以使用HHKB或者Poker2这种迷你键盘
  • 使用软件修改键位,比如CapsLock改成频繁使用到的Ctrl
  • 码农神器之HHKB—专为Linux下Vim/Emacs设计

    码农神器之HHKB
  • 发烧之选—Poker2

    发烧之选---Poker2

2-4 Vim 快速移动大法 (15:11)

众所周知,vim normal模式使用了反人类的hjkl来移动

  • 编辑器作者在编写vim的时候,键盘还没流行上下左右按键
  • 左(h),下(j),上(k),右(l)。移动也不会让手指脱离主键盘区
  • 逼着自己使用hjkl一段时间之后,便会体会到它非常有效率

在单词之间「飞舞」

在单词之间移动是我们浏览操作中最常使用的命令

  • w/W移动到下一个word/WORD开头。e/E移动到下一个word/WORD结尾
  • b/B回到上一个word/WORD开头,可以理解为backword
  • word指的是以非空白符分割的单词,WORD指的是以空白符分割的单词

synyax on:打开高亮显示

行间搜索移动

同一行快速移动的方式其实是:搜索一个字符并且移动到该字符

  • 使用f{char}可以移动到char字符上,t{char}移动到char的前一个字符
  • 如果第一次没搜到,可以用分号;/逗号,继续搜索该行的下一个/上一个
  • 大写的F表示反过来搜索前面的字符

如何快速移动到一行的行首或者行尾呢?

  • 0移动到行首第一个字符,^移动到行首第一个非空白字符
  • $移动到行尾,_g移动到行尾非空白字符
  • 记住常用的0$就可以满足日常需求了。

Vim垂直移动

在句子(sentence)和段落(paragraph)间移动。(不常用)

  • 使用小括号()在句子间移动,可以使用:help (来查看帮助文档
  • 使用大括号{}在段落间移动
  • 插件章节会讲到如何使用easy-motion插件移动,这些命令就都不用记忆了

Vim页面移动

  • gg/G移动到文件开头和结尾,可以使用ctrl+o快速返回
  • H/M/L跳转到屏幕的开头(Head)、中间(Middle)、结尾(Lower)
  • ctrl+uctrl+f上下翻页(upward/forward)。zz把光标当前行置为屏幕中间

2-5 Vim快速增删改查 (13:29)

Vim增加字符

  • 进入插入模式编辑文本
  • a/i/oA/I/O

Vim快速删除

  • Vim在normal模式下使用x快速删除一个字符
  • 使用d(delete)配合文本对象快速删除一个单词daw(d around word)
  • dx都可以搭配数字来执行多次

Vim快速修改

  • r{char}(replace)、c(change)、s(substitute)

  • normal模式下使用r{char}可以替换一个字符char。s替换并进入插入模式

    R进入插入模式,将光标所在的字符直接替换为输入的字符。S删除整行,进入插入模式

  • 使用c配合文本对象可以快速进行修改。例如:ciwcawct"

    C删除整行,进入插入模式(不包含行首的非空白字符)

Vim查询

  • 使用/或者?进行前向或者反向搜索
  • 使用n/N跳转到下一个或者上一个匹配
  • 使用*或者#进行当前光标所在单词的前向或者后向匹配

2-6 Vim 如何搜索替换 (07:15)

Vim替换命令:

substitute命令允许查找并且替换文本,并且支持正则表达式

  • :[range] s[ubstitute]/{pattern}/{string}/[flags]
  • range表示范围。 比如:10,20表示10-20行,%表示全部
  • pattern是要替换的模式,string是替换后的文本,flags是替换标志位

替换标志位

  • g(flobal)表示全局范围内执行
  • c(confirm)表示确认,可以确认或者拒绝修改
  • n(number)报告匹配到的次数而不替换,可以用来查询匹配次数

例:

# 在全局范围内将self替换为this
:% s/self/this/g
# 在1-6行将self替换为this
:1,6 s/self/this/g
# 统计1-6行匹配到self的次数
:1,6 s/self//n
# 利用正则,将quack替换为jiao,而不替换do_quack
:% s/\<quack\>/jiao/g

u:撤销操作

Ctrl+r:反向撤销

课后练习:

  • 如何批量替换多个文件中的匹配呢?
  • 延伸:使用插件来批量搜索替换多个文件中的匹配

2-7 Vim 多文件操作 (15:01)

Buffer Window Tab:

  • Buffer是指打开的一个文件的内存缓冲区

  • Window是Buffer可视化的分割区域

  • Tab可以组织Window为一个工作区

    Buffer Window Tab

Buffer(缓冲区)

  • Vim打开一个文件后会加载文件内容到缓冲区
  • 之后的修改都是针对内存中的缓冲区,并不会直接保存到文件
  • 直到执行:w(write)的时候才会把修改的内容写入到文件里

Buffer切换

  • 使用:ls会列举出当前缓冲区,然后使用:b n跳转到第n个缓冲区
  • bprebnextbfirstblast
  • :b buffer_name:b filenametab会自动补全buffer_name

:e b.txt:编辑(edit)b.txt

Window窗口:

  • 一个缓冲区可以分割成多个窗口,每个窗口也可以打开不同的缓冲区
  • <Ctrl+w>s水平分割,<Ctrl+w>v垂直分割。或者:sp:vs
  • 每个窗口可以继续被无限分割(屏幕是否足够大)

分割窗口示例:

Window分割窗口示例

如何切换窗口:

命令 用途
<Ctrl+w>w 在窗口间循环切换
<Ctrl+w>h 切换到左边的窗口
<Ctrl+w>j 切换到下边的窗口
<Ctrl+w>k 切换到上边的窗口
<Ctrl+w>l 切换到右边的窗口

<Ctrl+w>L:将当前窗口移动到右边

<Ctrl+w>H:将当前窗口移动到左边

如何重排窗口?

重排窗口可以改变窗口的大小:h window-resize查看文档

命令 用途
<Ctrl+w>= 使所有窗口等宽、等高
<Ctrl+w>_ 最大化活动窗口的高度
`<Ctrl+w> `
[n] <Ctrl+w>_ 把活动窗口的高度设为[n]行
`[n] <Ctrl+w> `

Tab(标签页)将窗口分组

Tab是可以容纳一系列窗口的容器:h tabpage

  • Vim的Tab和其他编辑器有所不同,可以将其想象为Linux的虚拟桌面
  • 比如一个Tab全用来编辑Python文件,一个Tab全是HTML文件
  • 相比窗口,Tab一般使用较少,Tab太多管理起来也比较麻烦

Tab操作

命令 用途
:tabnew {filename} 在新标签中打开{filename}
:tabe[dit] {filename} 在新标签中打开{filename}
<Ctrl+w>T 把当前窗口移动到一个新标签页
:tabc[lose] 关闭当前标签页及其中的所有窗口
tabo[nly] 只保留活动标签页,关闭其他所有标签页

Tab切换操作

Ex命令 普通模式命令 用途
:tabn[ext] {N} {N} gt 切换到标签为{N}的标签页
:tabn[ext] gt 切换到下一个标签页
tabp[revious] gT 切换到上一个标签页

:vs c.txt:垂直分割打开c.txt

:tabnew duck.py:在新的标签页打开duck.py

课后练习

  • 尝试打开Vim一次操作多个文件
  • 窗口分割可以非常方便的查看代码,比如查看整个调用链
  • 延伸:插件篇会配合ctrlp插件和nerdtree快速操作多个文件

2-8 什么是 Vim 的 text object (06:49)

Text Object(文本对象)

  • Vim里文本也有对象的概念,比如一个单词、一段句子、一个段落
  • 很多其他编辑器经常只能操作单个字符来修改文本,比较低效
  • 通过操作文本对象来修改要比只操作单个字符高效

文本对象操作方式

之前已经使用过文本对象了,比如dw删除一个单词

  • [number] <command> [text object]。次数+命令+文本对象
  • number表示次数,command表示命令:d(delete)、c(chage)、y(yank)
  • text object是要操作的文本对象,比如单词w、句子s、段落p

iw:表示inner word。viw命令首先v进入选择模式,iw将选中当前单词

aw:表示around word。它不但会选中当前单词,还会包含单词之后的空格

ci":删除""中的内容,并进入插入模式。另外还有(){}[]等。

课后练习

摆脱低效的字符操作,使用文本对象提升效率

  • 如何删除一个单词?
  • 在Vim中尝试使用文本对象快速增、删、改一个单词
  • 延伸:有些插件扩展了文本对象。比如vim-go可以使用f表示一个函数

2-9 Vim复制粘贴与寄存器的使用 (16:51)

Normal模式复制粘贴

  • normal模式下复制粘贴分别使用y(yank)和p(put),剪贴dp

  • 可以使用v(visual)命令选中所要复制的地方,然后使用p粘贴

  • 配合文本对象。比如使用viw复制一个单词,yy复制一行

    Vim里的剪贴(cut)复制(copy)粘贴(paste)分别是delete/yank/put

Insert模式下的复制粘贴

  • 和其他文本编辑器一样,使用Ctrl+v或者cmd+v粘贴,但是粘贴代码有个坑
  • 很多人在.vimrc中设置了autoindent,粘贴Python代码缩进错乱
  • 这个时候需要在粘贴前后使用:set paste:set nopaste解决、使用系统剪贴板寄存器:"也可以解决

什么是Vim的寄存器?

  • Vim里操作的是寄存器而不是系统剪贴板。
  • 默认使用d删除或者y复制的内容都放到了“无名寄存器”
  • x删除一个字符放到无名寄存器,然后p粘贴,可以调换两字符

深入寄存器(register)

Vim不使用单一剪贴板进行剪贴、复制与粘贴,而是多组寄存器

  • 通过"{register}前缀可以指定寄存器,不指定则默认使用无名寄存器
  • 比如使用"ayiw复制一个单词到寄存器a中,"bdd删除当前行到寄存器b
  • Vim中,""表示无名寄存器,缺省使用,""p其实就等同于p"+系统剪贴板。

:reg a:查看寄存器a

其他常见寄存器

除了有名寄存器a-Z,Vim中还有一些其他常见寄存器

  • 复制专用寄存器"0,使用y复制文本同时会被拷贝到复制寄存器0

  • 系统剪贴板"+,可以在复制前加上"+复制到系统剪贴板。

    查看是否开启系统剪贴板::echo has('clipboard')

    设置:set clipboard=unnamed

  • 其他寄存器,比如"%当前文件名,".上次插入的文本

:e!:舍弃当前修改并重新加载文本内容

课后练习

了解normal/insert模式复制粘贴的方法,常见寄存器的用法

  • 找一段Python代码,尝试在Vim里粘贴进入
  • 试试将Vim中的内容复制到系统粘贴板
  • 尝试在服务器的Vim里粘贴系统剪贴板的内容

2-10 Vim 如何用宏完成强大的批量操作 (10:23)

从需求说起

从一个需求说起,给多行URL链接加上双引号

https://www.zhihu.com/question/54919485
https://www.zhihu.com/explore
https://www.zhihu.com/topic
https://www.zhihu.com/topic/19601308
https://www.zhihu.com/topic/19607351
https://www.zhihu.com/topic/19630716
https://www.zhihu.com/topic/19637932
https://www.zhihu.com/people/weikexin-67
https://www.zhihu.com/questton/267339149/answer/325252706
https://www.zhihu.com/question/267339149/answer/523371968
https://www.zhihu.com/people/zhang-jia-hao-15
https://www.zhihu.com/question/48510028
https://www.zhihu.com/question/267339149/answer/323414411
https://www.zhihu.com/people/ming-ming 0701
https://www.zhihu.com/question/267339149/answer/519709724
https://www.zhihu.com/question/answer/519709724
https://www.zhihu.com/question/22897152
https://www.zhihu.com/question/22130215
https://www.zhihu.com/question/19823813

什么是Vim宏(macro)

  • 宏可以看成是一系列命令的集合
  • 可以使用宏「录制」一系列操作,然后用于「回放」
  • 宏可以非常方便地把一系列命令用在多行文本上

如何使用宏

宏的使用分为录制和回放,与拍电影类似。

  • Vim使用q来录制,同时也是使用q结束录制
  • 使用q{register}选择要保存的寄存器,把录制的命令保存其中
  • 使用@{register}回放寄存器中保存的一系列命令

使用宏解决提出的问题

  • 先给一行加上双引号,然后再回放到其他所有行

  • 先使用q开始录制,给一行加上双引号,之后使用q退出

  • 在剩下所有行中回放录制的宏

    录制:

    qa
    I
    "
    <Esc>
    A
    "
    <Esc>
    j
    q

    调用方式一:

    10@a

    调用方式二:

    V
    GG
    :normal @a

课后练习

知道什么是宏,如何使用宏完成日常需求

  • 想象一下编辑代码或者文本什么时候会使用到宏?
  • 想一下还有没有其他方式来完成这个批量加引号的编辑需求
  • 尝试亲自操作一下宏命令编辑。

2-11 Vim 补全大法 (07:33)

什么是补全?

只要手速快,补全什么的都是浮云。

  • 补全是根据当前环境上下文由编辑器「猜」用户想要输入的内容
  • 比如补全一个单词、文件名,或者代码中的函数名、变量名等
  • Vim中提供了多种补全功能,还可以由插件扩展功能实现代码补全

Vim中常见的补全:

命令 补全类型
<C-n> 普通关键字
<C-x><C-n> 当前缓冲区关键字
<C-x><C-i> 包含文件关键字
<C-x><C-]> 标签文件关键字
<C-x><C-k> 字典查找
<C-x><C-l> 整行补全
<C-x><C-f> 文件名补全
<C-x><C-o> 全能(Omni)补全

常见的三种补全类型:

  • 使用<Ctrl+n><Ctrl+p>补全单词

    Ctrl+n:n(next)代表下一个补全的选项

    Ctrl+p:p(previous)代表上一个补全的选项

  • 使用<Ctrl+x>+<Ctrl+f>补全文件名

    Ctrl+w:回删一个单词

  • 使用<Ctrl+x><Ctrl+o>补全代码,需要开启文件类型检查,安装插件

    :filetype on:开启文件类型检查

    :set filetype:查看当前文件类型

:r! echo %:当前文件名(文件名)。"%p也可输出文件名

:r! echo %:p:当前文件名称(文件路径+文件名)

For more info:

:help read
:help filename-modifiers

课后练习:

知道如何在Vim中使用补全,补全的几种常见类型

  • 尝试使用Vim中的补全方式来补全单词
  • 在Vim中输入文件名的时候尝试补全,想想如何输入现有的文件名?
  • 延伸:目前补全都是基于文本匹配的,插件可是实现代码补全。

2-12 给 Vim 换个配色 (06:32)

Vim更换颜色

  • 使用:colorscheme显示当前的主题配色,默认是default
  • 使用:colorscheme <Ctrl+d>可以显示所有的配色
  • 有中意的配色后,使用:colorscheme 配色名就可以修改颜色

vim duck.go duck.py -O:打开两个文件并垂直分割。在一个窗口的一个Tab页中

从网上下载配色

默认的配色没有喜欢的怎们办?

课后练习

  • 尝试更改Vim的配色方案,想要持久化配置需要写到.vimrc
  • 在网上选一个喜欢的配色方案,下载并使用它,比如hybird
  • 下载多个配色方案到.vim/colors并且随时更换

2-13 本章小结:裸 Vim 也很强 (02:37)

裸的Vim

本节没使用配置过的Vim,而是用裸的Vim演示,目的何在?

  • 很多初学者Vim基本命令都不熟练就开始找一些复杂的强大配置
  • 不利于熟悉Vim,一旦出问题了还不知道怎们修复
  • 建议初学者从裸的Vim开始学习。有些场景,比如服务器或者容器上无法配置Vim

裸的Vim也很强

学习Vim之前,先用正确打字指法和盲打

  • 编辑代码,脑子🧠一般比手👋快,盲打有利于跟上你的大脑速度
  • 裸的Vim也有很多强大的功能和使用方式
  • 学会了使用Vim,可以在任何IDE上安装Vim插件,几乎所有流行的编辑器和IDE工具都支持Vim插件

下一步该学习什么?

前提是已经无障碍使用Vim,并且没有那么痛苦纠结了。

  • 学习Vim配置,我的Vim我做主
  • Vim也在与时俱进,探索学习各种炫酷和方便的插件
  • 用中学,学中用。慢慢就有了肌肉记忆

第3章 编写 Vim 配置,我的 Vim 我做主

学习如何编写Vim 的配置文件,自定义 Vim。

3-1 编写 vim 配置,我的 vim 我做主 (17:09)

什么是Vim配置

什么是Vim的配置,为什么要使用它呢?

  • Vim里有非常多常用的设置,比如:set number设置行号
  • 之前的使用都是在Vim里临时设置,没法持久化,每次打开文件都需要设置
  • .vimrc提供了一种持久化配置的方式,让用户自定义配置

如何编写Vim配置文件

  • Linux/Unix下新建一个隐藏文件vim ~/.vimrc
  • Windows系统vim $MYVIMRC,通过环境变量编辑配置文件
  • 接着就可以开始自定义配置

Vim配置都包含什么?

  • 常用设置。比如:set number设置行号、colorscheme hybrid设置主题
  • 常用的Vim映射。比如:noremap <leader>w :w<cr>保存文件
  • 自定义的vimscript函数(vim高手)和插件的配置(插件篇)

常用设置:

  • 可以把常用的设置写到.vimrc里,避免每次打开Vim重新设置
  • 比如设置行号set number、设置主题colorscheme hybrid
  • Vim里有非常多的配置,可以参考大佬的配置

Vim中的映射

Vim中的映射比较复杂,源于Vim有多种模式

  • 设置一下<leader>键,let mapleader = ',',常用的是逗号,或者空格<Space>
  • 比如用inoremap <leader>w <Esc>:w<cr>在插入模式保存
  • Vim中的映射概念稍微复杂,但是非常强大

Tmux使用Ctrl+B+%实现垂直分割屏幕

zt:将光标所在行定位于屏幕顶部

zz:将光标所在行定位于屏幕中部

jj:映射<Esc>键,退到普通normal模式

:FormatJSON:格式化JSON代码

Ctrl+h/j/k/l:映射<Ctrl-w>+h/j/k/l,光标在分屏窗口中移动

xp:普通模式下,对调字符

:h option-list:查看指令列表

Vim插件

现代化的Vim可以通过Vim插件管理器安装插件

  • 通过插件用户可以无限扩充Vim的功能
  • 想要使用插件需要具备一定的Vim配置知识

Vim脚本

Vim有自己的脚本语言Vimscript

  • Vim脚本对于Vim高级玩家来说可以实现强大的Vim插件
  • 初学者知道有这个概念就好,Vim脚本是一种简单的脚本语言
  • 可以通过vimscript实现更多Vim的控制,开发自己的插件

课后练习

掌握Vim配置需要对Vim本身很熟悉

  • 尝试自己建立一个~/.vimrc文件,加入常见的设置选项

  • 研究一下GitHub上vim-go教程vim-go-tutoial.vimrc文件

    https://github.com/fatih/vim-go-tutorial/blob/master/vimrc

  • 拿来主义、网上、很多人开源了自己的配置(dotfiles)可参考学习

    通过把.vimrc配置文件放到git版本库可以同步到其他电脑或者服务器上

课程讲师的.vimrc文件:

" 常用设置
" 设置行号
set number
colorscheme hybrid
" 按F2进入粘贴模式
set pastetoggle=<F2>
" 高亮搜索
set hlsearch
" 设置折叠方式
set foldmethod=indent

" 一些方便的映射
let mapleader=','
let g:mapleader=','

" 使用 jj 进入 normal模式
inoremap jj <Esc>`^
" 使用 <leader>+w 直接保存
inoremap <leader>w <Esc>:w<cr>
noremap <leader>w :w<cr>

" 切换 buffer
nnoremap <silent> [p :bprevious<cr>
nnoremap <silent> [n :bnext<cr>
" use ctrl+h/j/k/l switch window
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l

" Sudo to write
cnoremap w!! w !sudo tee % >/dev/null
" json 格式化
com! FormatJSON %!python3 -m json.tool


" 插件设置,这里使用了 vim-plug
call plug#begin('~/.vim/plugged')

" 安装插件只需要把 github 地址放到这里重启后执行 :PlugInstall 就好了
Plug 'mhinz/vim-startify'
Plug 'scrooloose/nerdtree'

call plug#end()


" 插件相关配置
" 禁止 stratify 自动切换目录
let g:startify_change_to_dir = 0

" nerdtree
nmap ,v :NERDTreeFind<cr>
nmap ,g :NERDTreeToggle<cr>


" 定义函数SetTitle,自动插入文件头
func SetTitle()
    if &filetype == 'python'
        call setline(1, "\#!/usr/bin/env python")
        call setline(2, "\# -*- coding:utf-8 -*-")
        normal G
        normal o
        normal o
        call setline(5, "if __name__ == '__main__':")
        call setline(6, "    pass")
    endif
endfunc

3-2 Vim 映射迷人眼 (14:53)

什么是Vim映射

Vim映射就是把「一个操作」映射到「另一个操作」

  • 如果你不满意现在的按键设置,比如Vim本来的命令
  • 或者想要映射一些方便的快捷键
  • 按照用户意愿定制Vim

基本映射

基本映射指的是在普通normal模式下的映射,当然还有其他模式的映射

  • 使用map就可以实现映射。比如::map - x-就会删除字符

    取消map映射使用:unmap -

  • :map <space> viw按空格键<space>就会选中光标所在的整个单词

  • :map <C-d> ddCtrl+d执行dd删除一行

模式映射

Vim常用模式normal/visual/insert都可以定义映射

  • nmap/vmap/imap定义映射,只在normal/visual/insert分别有效

  • :vmap \ U:把在visual模式下选中的文本大小写(u(小写)/U(大写)转化大小写)

  • 想想如何在insert模式下映射Ctrl+d来删除一行

    :imap <C-d> <Esc>ddi

现有映射的问题?

:nmap - dd
:nmap \ -

当按下\时,Vim会解析\-;因为又映射了-,Vim会继续解析-dd,即最终按下\会删除整行。(类似于递归解析映射)

递归映射和非递归映射

*map系列命令有递归的风险

  • 如果用户安装了一个插件,插件映射了同一个按键的不同行为,有冲突就会有一个失效
  • 想要保证插件映射没有冲突会非常痛苦
  • 解决方案就是使用非递归映射

非递归映射

Vim提供了非递归映射,这些命令不会递归解析

  • 使用*map对应的nnoremap/vnoremap/inoremap
  • 何时使用递归映射*map?何时使用非递归映射*noremap呢?
  • 「任何」时候都应该使用非递归映射,拯救自己同时也拯救了插件作者

``^:光标回到最后一次插入模式停止时光标的位置。:help ^查看帮助。

课后练习

3-3 本章小结:配置 Vim,让她更顺手 (01:16)

学习和使用配置

学习和使用Vim配置是Vim玩家进阶的必修之路

  • 了解常见的配置选项
  • 学习和使用Vim映射,用得不爽我就改
  • Vim进阶需要学习Vimscript。《笨发放学Vimscript》

下一步该学什么?

强大的Vim插件

  • Vim也在与时俱进,发布了Vim8,还有Neovim
  • 知道如何配置Vim之后,开始探索各种强大的Vim插件
  • 打好Vim配置映射的基础,开始学习如何安装和使用插件

第4章 Vim 安装和使用插件

学会如何安装和使用常见的 Vim 插件,增强 Vim 的功能。

4-1 Vim 安装插件,竟如此简单 (08:40)

什么是插件?

和其他现代流行编辑器一样,Vim同样支持强大的插件扩展

  • Vim插件是使用vimscript或者其他语言编写的vim功能扩展
  • 编辑器自带的功能有限,有了插件之后几乎可以无限扩充其功能
  • 网络上比如GitHub.com等有很多开源的Vim插件可以使用

如何安装插件?

原始的方式是直接clone插件代码,如今Vim有很多插件管理器

使用vim-plug安装插件

  • https://github.com/junegunn/vim-plug

  • 学习一个新东西的最好方式就是看官方文档

  • 按照官方的教程,就可以非常容易地了解它的使用方式

    curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
        https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

安装第一个插件vim-startify

一个好用的vim开屏插件

  • https://github.com/mhinz/vim-startify

  • 修改.vimrc配置文件,增加该插件的名称

  • 重新启动vim或者执行:source ~/.vimrc,执行:PlugInstall

    call plug#begin('~/.vim/plugged')
    Plug 'mhinz/vim-startify'
    call plug#end()

    :source ~/.vimrc

    :PlugInstall

  • 如果已经安装完成,退出并重新打开Vim查看效果

课后练习

打开Vim操练起来,首先下载vim-plug并浏览其文档

  • 安装vim-plug插件管理器
  • 安装vim插件vim-startify、nerdtree,看看能否生效

4-2 如何寻找自己需要的插件 (06:42)

4-3 vim美化插件,让你的 vim 与众不同 (09:57)

vim美化插件

更改vim的外观

vim配色方案

课后练习

  • 尝试使用vim-stratify快速打开最近使用的文件
  • 安装vim-airline美化状态栏
  • 安装indentline给vim增加代码缩进线

4-4 Vim文件目录和搜索插件,跳转文件so easy (12:20)

文件目录树

默认的文件目录管理比较简陋,nerdtree弥补了这个问题

文件目录树

文件管理器nerdtree

使用nerdtree插件进行文件目录树管理

  • https://github.com/scrooloose/nerdtree

    :NERDTree

    :NERDTreeFind

    :NERDTreeToggle

  • autocmd vimenter * NERDTree可以在启动vim的时候打开NERDTree‘

  • map <leader>v :NERDTreeFind<CR>查找文件位置

快速搜索文件

如何根据文件名快速查找打开一个文件

快速搜索文件

模糊搜索器

使用ctrlp插件快速查找并且打开文件

课后练习

快速定位文件是常用操作,需牢牢掌握提升效率

  • 安装nerdtree插件,加入快捷键映射
  • 安装ctrlp插件,然后使用快速定位文件
  • 改变自己之前低效的操作方式,适应新的操作方式

4-5 Vim快速定位插件,文件位置任我行 (05:58)

Vim移动命令:

在基础篇学习了很多Vim移动的命令

  • 比如,w/e基于单词移动,gg/G文件首尾,0/$行首尾,f{char}查询字符
  • Ctrl+fCtrl+u前后翻屏
  • 如果需要快速跳转到当前窗口显示区的任意位置需要怎们做?

如何快速移动到任意位置

可以使用vim的搜索/加上n跳转,但是使用easymotion更方便

课后练习

安装并使用easymotion插件

  • 回忆一下vim里常用的移动操作
  • 安装easymotion插件
  • 使用easymotion练习在文件窗口的任意位置跳转

4-6 Vim-surround,编辑也要成双成对 (05:27)

vim-surround

如何快速更换一对单引号为双引号?

vim-surround使用

normal模式下增加、删除、修改成对内容

  • ds(delete a surrounding)
  • cs(change a surrounding)
  • ys(you add a surrounding)

例子:

  • ysiw":给单词增加"
  • cs"':修改"'
  • cs(]:修改(],替换后的括号需要使用后括号,前括号会产生空格
  • ds':删除'
  • ds(:删除(

课后练习

vim-surround大法好

  • 使用vim-plug安装vim-surround插件
  • 使用练习修改成对的内容,比如修改单引号为双引号
  • 多练习几次,使用插件提升编辑效率

4-7 强大的Vim模糊搜索与替换插件 (08:26)

模糊搜索

经常需要在一个代码项目中模糊搜索一些文本,怎们办?

  • vim自带的搜索可以搜索当前文件,但是项目有很多个文件
  • 需要使用插件来模糊搜索多个文件内容
  • 使用Ag.vim或者fzf.vim,都可以很好的支持模糊搜索

fzf与fzf.vim

fzf是一个强大的命令行模糊搜索工具,fzf.vim集成到了vim里

例子:

:Files .:查看当前目录下的所有文件,再输入文件名实现搜索

:Ag {PATTERN}:查找文本内容。

此处遇到了一个问题:ag is not found

解决方法参考:https://github.com/junegunn/fzf.vim/issues/440

搜索替换插件far.vim

如果想要批量搜索替换,可以使用far.vim

课后练习

模糊搜索和替换是一个非常常用的操作

  • 使用vim-plug安装fzf.vim和far.vim
  • 使用fzf.vim在一个项目中搜索想要的文本
  • 使用far.vim批量替换一个项目下的文本

4-8 愉快写 golang 之vim-go插件 (10:19)

编辑器 VS IDE

IDE一代又一代,经典的编辑器却长久不衰

  • 除了Java,很多人用vim编写shell/php/golang/python/ruby
  • 前端很多人使用VSCode,sublime/Atom有没落之势
  • 很多后端和运维工程师使用vim,微信后台和阿里飞天系统很多代码出自在服务器上使用vim的工程师

vim-go

功能强大的golang插件vim-go

  • https://github.com/fatih/vim-go

  • 代码补全、重构、跳转、自动格式化、自动导入等功能

  • 基本可以满足golang日常开发

    命令 说明
    <Ctrl-x><Ctrl-o> 打开补全列表
    <Ctrl-p> 向上选择补全
    <Ctrl-n> 向下选择补全
    <Ctrl-]> 跳转到定义的方法
    <Ctrl-o> 跳转到上一次的地方
    <Ctrl-i> 跳转到上一次的地方
    命令 说明
    :GoFmt 格式化代码
    :GoRename 重构名称
    :GoImports 自动带入包
    :GoRun 运行代码
    :w 保存文件自动格式化代码
  • vimrc配置:

    autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4

课后练习

  • 安装vim-go插件,阅读vim-go-tutorial教程
  • 使用vim-go编写Go语言代码
  • 如果遇到了问题,请查看vim-go-tutorial教程或者vim-go文档

4-9 python-mode把 vim 打造成轻量 Python IDE (07:11)

Python-mode

Python插件使用比较多的是jedi-vim和Python-mode

  • 查看是否支持python:vim --version | grep python

  • vimrc配置

    let g:pymode_python = 'python3'
    let g:pymode_trim_whitespaces = 1
    let g:pymode_doc = 1
    let g:pymode_doc_bind = 'K'
    let g:pymode_rope_goto_definition_bind = '<C-]>'
    let g:pymode_lint = 1
    let g:pymode_lint_checkers = ['pyflakes', 'pep8', 'mccabe', 'pylint']
    let g:pymode_options_max_line_length = 120
命令 说明
<Ctrl-x><Ctrl-o> 打开补全列表
<Ctrl-p> 向上选择补全
<Ctrl-n> 向下选择补全
<Ctrl-]> 跳转到定义的方法
<Ctrl-o> 跳转到上一次的地方
<Ctrl-i> 跳转到上一次的地方
<Ctrl-C>ro 整理导入包的顺序
命令 说明
:PymodeLintAuto 自动Lint整理格式代码
:w 保存文件时做文件静态检查,并提示相应错误

课后练习:

  • 安装python-mode插件
  • 使用python-mode编写Python代码
  • 如果遇到了问题,尝试查询python-mode文档解决

4-10 Vim tagbar,更愉快地浏览代码 (11:14)

tagbar

代码大纲,支持多种编程语言

  • https://github.com/majutsushi/tagbar

  • 需要安装Universal Ctags生成对应的tag文件

  • 快速浏览当前文件代码结构,并且搜索跳转到对应代码块

  • vimrc配置

    nnoremap <leader>t :TagbarToggle<CR>

安装ctags:

命令 说明
:Tagbar 显示Tagbar
:TagbarToggle 显示Tagbar并定位到当前方法的目录
:ls 查看buffer
:b duck.py 跳转到duck.py的buffer

vim-interestingwords

高亮感兴趣的单词,浏览代码很有用

命令 说明
<leader>k 高亮单词
u/U 下/上一个高亮
<leader>K 取消所有高亮

课后练习

  • 安装tagbar,开启文件代码大纲
  • 安装interestingwords,高亮感兴趣的单词
  • 如果遇到了问题,尝试查询插件的官方文档/Google搜索/vim help解决

4-11 强大的 vim 代码补全插件 (07:16)

deoplete.nvim

一个强大的neovim/vim8异步补全插件

安装:

if has('nvim')
  Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
  Plug 'Shougo/deoplete.nvim'
  Plug 'roxma/nvim-yarp'
  Plug 'roxma/vim-hug-neovim-rpc'
endif

如若报错请安装依赖:

pip3 install --user pynvim

配置:

let g:deoplete#enable_at_startup = 1

其他代码补全插件

  1. deoplete-jedi:

    Python语言代码补全,可以补全自己所写的库

    https://github.com/deoplete-plugins/deoplete-jedi

  2. deoplete-go:

    Go语言代码补全

    https://github.com/deoplete-plugins/deoplete-go

coc.nvim

一个强大的neovim/vim8补全插件。LSP支持

LSP(Language-Server-Protocol)

课后练习

  • 安装deoplete.nvim和coc.nvim
  • 安装对应的编程语言扩展
  • vim/neovim补全插件很多,有些支持异步。

4-12 Vim代码格式化与静态检查 (09:43)

格式化与静态检查

为什么需要这些工具呢?能让工具做的就不用让人去费心

  • 把精力集中在代码逻辑本身,而不是整理格式这些浪费精力的事情上
  • 静态检查是为了让编写的代码更加规范。golint/pylint/eslint等
  • 无论编写何种编程语言,最好都加上自动格式化和静态检查

Neoformat

vim-autoformat和Neoformat是两种使用较多的格式化插件,这里使用neoformat

安装依赖:

pip3 install autopep8

:Neoformat:格式化Python代码

静态检查Lint

neomake和ale是两种常见的lint插件,这里使用ale

安装依赖:

pip3 install pylint

课后练习

让插件帮助完成代码的格式化和静态检查吧。

  • 安装noeformat插件和相关的格式化库,格式化代码
  • 安装ale和对应语言的lint库,修复代码的缺陷
  • 需要自定义检查功能(比如忽略某些检查错误),参考官方文档

4-13 Vim快速注释代码 (03:06)

vim-commentary

vim注释插件有很多,推荐使用轻量的vim-commentary

行注释:

  • gcc:注释代码
  • gcgc:取消注释代码

块注释:

  • gc:注释/取消注释代码

课后练习

  • 安装vim-commentary插件
  • 尝试打开Python文件并快速注释一段代码
  • 打开不同类型的文件,比如go文件,试试注释一段代码或文字

4-14 vim和git,强强联手 (07:11)

Fugitive

在vim里使用git

vim-gitgutter

在vim里显示文件变动

配置:

set updatetime = 100

gv.vim

在命令行查看提交记录,命令行工具tig

tig

课后练习

  • 安装三个git插件
  • 使用:Gblame等命令
  • vim和tmux配合使用

4-15 本章小结:授人以渔,寻找自己需要的插件 (02:29)

Vim插件千千万

本章介绍了如何安装使用常用的插件

  • Vim插件很多,不可能都全部介绍。学会自己寻找个安装
  • 通过搜索引擎Google关键词、vimawesome、参考开源配置寻找插件
  • 学会阅读插件的README文件和doc里的帮助文件,学习插件使用

缺什么就找什么插件吧!

第5章 与时俱进的 Vim

介绍如何安装和使用现有的开源配置,什么是 Neovim 等,站在巨人的肩膀上。

5-1 Vim和Tmux,天作之合 (08:27)

Tmux

强大的终端复用工具。通过brew(Mac)、apt-get(ubuntu)安装

  • 可以复用终端、分屏、托管进程等
  • 在服务器上即使退出服务器也不会被kill,托管进程也很方便
  • 可以方便地分割屏幕,实现多个进程公用屏幕

Tmux使用文章:手把手教你使用终端复用神器 Tmux,丢掉鼠标不是梦

<Ctrl-b>%:垂直分屏

<Ctrl-b>":水平分屏

<Ctrl-b>c:创建新tmux窗口

<Ctrl-b>n:跳转到下一个tmux窗口

<Ctrl-b>p:跳转到上一个tmux窗口

<Ctrl-b>h:向左切换分屏

<Ctrl-b>l:向右切换分屏

<Ctrl-b>s:查看所有会话

<Ctrl-b>d:脱离当前会话。d(etach)

tmux ls:查看会话列表

tmux new -s <session_name>:创建会话

tmux att -t <session_name>:链接会话。att(ach)

课后练习

在系统或者服务器上安装tmux

  • 使用tmux分割屏幕
  • 尝试一个窗口编写代码,另一个窗口使用shell命令
  • 尝试退出和重新attach到一个tmux的会话

5-2 无处不在的 vim,让 vim 嵌入你的开发工具 (01:42)

几乎流行的编辑器和IDE都支持VIM插件

让vim嵌入开发工具,甚至Chrome都有vimium插件

  • 即使不用vim作为主力编辑器,依然可以使用它的编辑方式
  • 几乎流行的开发工具都支持vim插件,以vim的方式编辑
  • 比如VSCode/Atom/PyCharm等都支持安装vim插件

课后练习

  • 搜索相应开发工具的vim插件
  • 安装vim插件到开发工具里
  • 尝试在各种开发工具中使用vim的方式编辑提升效率

5-3 与时俱进的 vim 之 neovim (02:07)

Neovim

一个新的vim版本,支持异步特性(vim8也支持)

感兴趣的同学可以使用neovim代替vim啦!

5-4 站在巨人的肩膀上,使用强大的开源配置 (03:37)

开箱即用

如果你已经熟悉了vim配置,可以从网上直接使用一些开源配置

课后练习

  • 找到一个合适的开源配置,尝试安装它
  • 阅读其他文档,了解使用方式。一般开源配置都安装了很多插件
  • 对于新手来说,配置太复杂太强大有时候可能会出现很多小问题

第6章 Vim虐我千百遍,我待Vim如初恋~

Vim虐我千百遍,我待Vim如初恋~

6-1 课程总结-vim虐我千百遍,我待 vim 如初恋 (03:17)

可以用一生的编辑器

vim从诞生到现在已经走过了快30个年头

  • 几十年之间,无数的编辑器或者开发工具昙花一现
  • 但是vim一直到现在依然有很多人在使用,甚至嵌入到各种开发工具
  • 如今vim/neovim依然在活跃开发,很多开发者贡献插件

学习方法

熟悉vim靠的是肌肉记忆。脱离鼠标编辑能提升编辑效率

  • 讲了很多,但是vim中依然有很多东西没有讲到,时不时发现一些使用技巧
  • 在学中练,在练中学。熟能生巧,肌肉记忆
  • 衡量投入产出比,是点到为止还是继续深入

继续练级

网络上有很多vim的资源,甚至练习的小游戏

  • 《Practical vim》、中文版《Vim实用技巧》
  • 《笨方法学vimscript》
  • 学习和开发自己的插件

vim配置

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"                                 Sample vimrc                                 "
"                                                                              "
"                                 Provided by:                                 "
"                                     Tuyk                                     "
"                                                                              "
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

syntax on " 自动语法高亮
" colorscheme xcode-default " 更换主题配色

" ======================...Basic Start...====================== "
" Turn on line numbering " 显示行号
set number
" Save 1,000 items in history " 设置历史行号
set history=1000
" Show the line and column number of the cursor position " 设置光标的位置值
set ruler
" Display the incomplete commands in the bottom right-hand side of your screen.  
set showcmd
" Display completion matches on your status line
set wildmenu
" Show a few lines of context around the cursor
set scrolloff=5
" Highlight search matches " 设置查找的值高亮显示
set hlsearch
" Enable incremental searching " 设置边搜索边高亮
set incsearch
" Ignore case when searching " 设置忽略查找选项的大小写
set ignorecase
" Override the 'ignorecase' option if the search pattern contains upper case characters.
set smartcase
" Turn on file backups
set backup
" Don't line wrap mid-word.
set lbr
" Copy the indentation from the current line. " 设置自动复制上一行的缩进到下一行
set autoindent
" Enable smart autoindenting. " 设置自动识别“{}”缩进,写代码非常有用
set smartindent
" Use spaces instead of tabs " 使用空格替换tab
set expandtab
" Enable smart tabs
set smarttab
" Make a tab equal to 4 spaces
set shiftwidth=4 " 默认缩进4个空格
set tabstop=4 " tab 代表4个空格
set softtabstop=4 " 使用tab时 tab空格数
" 按F2进入粘贴模式
set pastetoggle=<F2>
" 设置折叠方式
" set foldmethod=indent
" 开启系统剪贴板
set clipboard=unnamed
" 解决中文乱码
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
" Tell vim what background you are using " 设置背景颜色
" set bg=light
" set bg=dark
" 退格删除键不能用
set backspace=indent,eol,start
" ======================...Basic End...====================== "




" ======================...Mapping Start...====================== "
" Map Y to act like D and C, i.e. yank until EOL, rather than act like yy " Map 映射
" map Y y$
" Remap VIM 0 to first non-blank character
" map 0 ^
noremap <space> viw

" change the mapleader from \ to , " 一些方便的映射
" NOTE: This has to be set before <leader> is used.
let mapleader=','
let g:mapleader=','

" 使用 jj 进入 normal模式
inoremap jj <Esc>`^
" 使用 <leader>+w 直接保存
inoremap <leader>w <Esc>:w!<cr>
noremap <leader>w :w!<cr>

" 切换 buffer
nnoremap <silent> [p :bprevious<cr>
nnoremap <silent> [n :bnext<cr>
" use ctrl+h/j/k/l switch window
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l

" Sudo to write
cnoremap w!! w !sudo tee % >/dev/null

" NERDTree
map <leader>v :NERDTreeFind<CR>
map <leader>g :NERDTreeToggle<CR>

" ctrlp.vim
let g:ctrlp_map = '<c-p>'

" vim-easymotion
nmap ss <Plug>(easymotion-s2)

" vim-go
autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4

" python-mode
let g:pymode_python = 'python3'
let g:pymode_trim_whitespaces = 1
let g:pymode_doc = 1
let g:pymode_doc_bind = 'K'
let g:pymode_rope_goto_definition_bind = '<C-]>'
let g:pymode_lint = 1
let g:pymode_lint_checkers = ['pyflakes', 'pep8', 'mccabe', 'pylint']
let g:pymode_options_max_line_length = 120

" tagbar
nnoremap <leader>t :TagbarToggle<CR>

" deoplete.nvim
let g:deoplete#enable_at_startup = 1
set completeopt -=preview " 关闭预览窗口

" vim-gitgutter
set updatetime =100
" ======================...Mapping End...====================== "




" ============================================================================== "
" json 格式化
com! FormatJSON %!python3 -m json.tool
" ============================================================================== "




" ======================...Plugins Start...====================== "
" 插件设置,这里使用了 vim-plug
call plug#begin('~/.vim/plugged')

" 安装插件只需要把 github 地址放到这里重启后执行 :PlugInstall 就好了
Plug 'mhinz/vim-startify'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'Yggdroot/indentLine'
Plug 'scrooloose/nerdtree'
Plug 'ctrlpvim/ctrlp.vim'
Plug 'easymotion/vim-easymotion'
Plug 'tpope/vim-surround'
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
Plug 'ggreer/the_silver_searcher'
Plug 'brooth/far.vim'
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
Plug 'python-mode/python-mode', { 'for': 'python', 'branch': 'develop' }
Plug 'majutsushi/tagbar'
Plug 'lfv89/vim-interestingwords'
if has('nvim')
  Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
  Plug 'Shougo/deoplete.nvim'
  Plug 'roxma/nvim-yarp'
  Plug 'roxma/vim-hug-neovim-rpc'
endif
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'sbdchd/neoformat'
Plug 'dense-analysis/ale'
Plug 'tpope/vim-commentary'
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
Plug 'junegunn/gv.vim'
call plug#end()


" 插件相关配置
" 禁止 stratify 自动切换目录
let g:startify_change_to_dir = 0
" 启动时自动打开NERDTree
" autocmd vimenter * NERDTree
" ======================...Plugins End...====================== "




" ======================...Function Start...====================== "
" 定义函数SetTitle,自动插入文件头
func SetTitle()
    if &filetype == 'python'
        call setline(1, "\#!/usr/bin/env python")
        call setline(2, "\# -*- coding:utf-8 -*-")
        normal G
        normal o
        normal o
        call setline(5, "if __name__ == '__main__':")
        call setline(6, "    pass")
    endif
endfunc
" ======================...Function End...====================== "

" For more options see ":help option-list" and ":options".

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 tuyrk@qq.com

文章标题:1129-玩转Vim 从放弃到爱不释手

文章字数:14.6k

本文作者:神秘的小岛岛

发布时间:2019-11-05, 15:52:21

最后更新:2019-11-05, 16:03:00

原始链接:https://www.tuyrk.cn/imooc/1129-vim/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏