文章目录
写在前面
本篇 Udemy - Vim Masterclass 系列课程的最后一篇正式课自学笔记,后面剩下的三节课是讲师 Jason 的两次线上问答互动和他的其他课程优惠促销活动,我将一并附在本篇末尾。这节课主要介绍了 Vim 的图形化操作界面 gvim 的相关用法。之所以放到最后,是因为 GUI 版 Vim 在操作效率上确实远远不如 Vim 命令行。但 gvim 也有它的用武之地,比如与系统剪贴板的交互。gvim 的很多操作不必死记硬背,针对具体场景各取所需就好。
Section 12:Vim Graphical User Interfaces: Gvim and MacVim
S12L47 Vim Graphical User Interfaces: Gvim and MacVim
本节演示文件:vimclass/gvim.txt
。
1 图形界面 Vim 的应用场景
绝大部分 Vim
命令行操作在其图形界面(GUI)环境下仍然有效,GUI 版的典型的场景包括:
- 同步操作习惯的需要:希望将远程服务器中
Vim
的操作习惯同步迁移到其他桌面环境中(如桌面版Linux
、Mac
、Windows
等系统); - 保持一致的图形化工作流:如果工作流主要集中在图形环境而非命令行环境,使用 GUI 版
Vim
会更加高效; - 需要 GUI 特定的功能:如系统剪贴板、文件资源管理器、鼠标滚轮操作等。
2 GUI 版 Vim 的启动
Windows
:开始菜单搜gVim
、桌面快捷方式、运行窗口输入gvim
+ EnterMac
:搜MacVim
Unix
/Linux
:菜单栏启动、命令行输入gvim
+ Enter
安装好命令行版 Vim
后通常也会安装 GUI 版 Vim
,但也有例外。如果 gVim
/ MacVim
启动失败,则需要手动安装:
- 到
Vim
官网安装:https://www.vim.org/
; Linux
用户:也可以通过包管理工具安装,例如vim-X11
、vim-gnome
等。
3 gVim 与 Vim 的主要区别
gVim
有图形化的菜单、工具栏,而Vim
没有;- 各菜单项的底层也是执行对应的
Vim
命令
【图:47-1:gVim 最大的不同在于拥有菜单和工具栏,但底层也是执行对应的 Vim 命令】
平心而论,纯菜单的操作效率并不高,尤其是知晓 Vim
等效命令的前提下(对比:重复执行 100 次的菜单操作和命令行操作,高下立判)。这也是为何将 gVim
放到最后介绍的原因。
:set hls!
对应的菜单位置:
【图 47-2:切换高亮搜索 hls 的菜单位置(Windows 版 gVim)】
再如,:set scrolloff=5
对应的菜单位置:
【图 47-3:设置 scrolloff 行数的菜单位置(极其繁琐)】
此外,gVim
还支持鼠标滚轮操作,也可以拖动右侧滚动条。
4 gVim 中的特殊寄存器
4.1. 加号寄存器
"+
:剪贴板寄存器,负责存放从图形操作系统拷贝来的内容(即选中文字后按 Ctrl + C)
要将该内容粘贴到 gVim
中,需执行命令 "+P
或 "+p
。这与菜单栏中的命令有所不同:
【图 47-4:将图形界面复制的文本粘贴到 gVim,菜单栏提供的命令与手动执行的命令有所不同】
可以看到,"+gP
相较于 "+P
多了一个 g
命令,它可以让光标自动定位到粘贴内容末尾的下一个字符(如果有余裕的话);而 "+P
只会让光标定位到粘贴内容的最后一个字符:
【图 47-5:对比命令 "+gP 和 "+P 的区别:前者不会定位到目标内容的最后一个字符】
4.2. 星号寄存器
"*
在不同的操作系统有不同的行为特征:
Mac
/Windows
:星号寄存器"*
与加号寄存器"+
相同,二者可互换;Linux
:"*
可以存放 鼠标选中的文字内容
另外,不仅其他 GUI 应用可以复制内容到 gVim
,反向操作也同样支持(对于 Windows
系统,使用星号和加号寄存器都是等效的)。
5 Vim 剪贴板的相关设置
在 Vim
中,设置 :set clipboard=unnamed
后,Vim 会使用系统的剪贴板来处理所有的剪切(delete)、复制(yank)、更改(change)和粘贴(put)操作。这意味着从其他应用程序中复制的文本内容可以直接在 Vim
中粘贴,反之亦然。
对 clipboard
选项设置 unnamed
后,每次复制粘贴都无需再指定特殊寄存器("+
或 "*
),只需直接使用常规的复制(y
)和粘贴(p
)命令即可。
而对于 Linux
系统,则需要运行 :set clipboard=unnamedplus
+ Enter 来实现同样的效果。
补充说明
:set clipboard=unnamed
对于gVim
始终有效,但对于Vim
是否生效,取决于当前Vim
的编译版本是否支持剪贴板,只有支持剪贴板的Vim
才会生效。这可以通过命令
:echo has('clipboard')
+ Enter 进行检测:
- 返回结果为
1
,则表示该版本支持剪贴板;- 若返回
0
,则表示不支持。此外也可以通过查看
:version
版本中是否包含+clipboard
字样进行判定,有则表示支持。
6 gVim 的配置文件
配置文件的文件名:
Windows
:_gvimrc
Linux
/Mac
:.gvimrc
具体路径可在 gVim
版本信息中查看:
【图 47-6:在 gVim 的版本信息中查看 gvimrc 文件的具体存放路径】
注意
gvimrc
文件的加载顺序位于Vim
配置文件 之后,这样可以设置特定于 GUI 图形界面的配置项。
7 gVim 显示字体的设置
使用命令 :set guifont=*
+ Enter 或 :set gfn=*
+ Enter
此时会弹出字体窗口:
【图 47-7:用 gfn 选项设置 gVim 的显示字体样式】
该命令对应的菜单位置如下:
【图 47-8:gVim 设置显示字体样式对应的菜单项位置】
此外,也可以直接手动设置字体及字号,例如::set gfn=Courier\ New:h14
+ Enter
注意:上述写法中字体名称不能使用引号,因此中间的空格字符必须 用反斜杠转义。
更多 gVim
字体设置方法,可以参考 Vim
的帮助文档::set gui
+ Enter。
DIY 拓展:设置为 Cascadia Mono PL 字体
实测时发现,除了用
hXX
设置字号外,指定字体Cascadia Mono PL
、字号为13
后,输入命令:set gfn?
+ Enter 查看gfn
最终取值为guifont=Cascadia_Mono_PL:h13:cANSI:qDRAFT
:
【图 47-9:实测 gVim 字体设置看到的其他配置项】
根据文档,这里的
:cANSI
是指定字符级为ANSI
;:qDRAFT
则表示字体的质量设置为DRAFT
:
【图 47-10:gfn 帮助文档对 cXX 和 qXX 的官方说明】
S13L48 Live Q&A Call #1
主讲:Jason Cannon
本次通话为 Vim
大师课的首次在线问答。
- 问答形式
- 开始时回答预先提交的问题。
- 参会者需保持静音,提出问题时可解除静音。
- 也可通过电子邮件或聊天框提交问题。
- 预先提交的问题概述
- 第一个问题:如何在Vim和终端之间快速切换
- 使用多个终端标签或窗口。
- 推荐使用
screen
或tmux
作为命令行窗口管理器。
- 第二个问题:新程序员安装 Gvim 的重要性
- 使用
Gvim
与命令行版本的Vim
取决于工作环境和个人喜好。 Gvim
适合需要图形界面的用户,尤其是处理剪贴板等功能时。
- 使用
- 第三个问题:学习课程的顺序
- 推荐先学习
Vim
,再学习Python
编程。 - 学习
Linux
基础非常重要,有助于后续的Shell
脚本课程。
- 推荐先学习
- 第一个问题:如何在Vim和终端之间快速切换
- 关于Vim的用途
- 编程与文本处理
Vim
适用于编程、LaTeX
文档创建和HTML
编辑。- 有许多人在科研和数学领域使用
Vim
处理LaTeX
文档。
- 编程与文本处理
- 结束语
- 通话结束,提醒下次通话的时间。
- 鼓励参会者随时联系以解决问题。
S13L49 Live Q&A Call #2
主讲:Jason Cannon
本次通话为 Vim
大师课的第二次在线问答。
-
提问方式
- 提问可通过解除静音、电子邮件或聊天框进行。
- 当前有一条预先提交的问题。
-
预先提交的问题
- 关于脚本的安全性
- 如何使用
GitHub
上的脚本安装MQ
。 - 建议在虚拟机中测试脚本,确保安全后再执行。
- 可以使用
curl
下载并通过命令行执行脚本。
- 如何使用
- 关于脚本的安全性
-
未来的Vim发展
- 维持
Vim
的主要维护者是 Bram,仍在积极维护。 - 认为
Vim
及其分支(如Neovim
)有光明的未来。
- 维持
-
插件安装
Vim 8.0
及以上版本支持插件,安装过程简单。- 通过创建目录结构并下载插件来添加插件。
-
Vim 中的文本处理
- 介绍了如何使用视觉模式(
v
、V
、Ctrl+V
)选择文本。 - 讨论了如何在不使用视觉模式的情况下,使用命令处理文本。
- 介绍了如何使用视觉模式(
-
Shell 脚本与 Ansible 的关系
Shell
脚本与Ansible
可以互补,Ansible 简化了一些操作。- 建议掌握
Shell
脚本基础,以便更好地使用Ansible
。
-
结束语
- 感谢参与者的提问与反馈。
- 会议结束后将发布录音和聊天记录,期待下一次会议。
S14L50 Bonus Lecture
享受折扣优惠的相关课程推荐:
- LPI Linux Essentials Certification Course:通过学习您需要掌握的确切 Linux 技能,今天就为您的职业生涯加速,顺利通过 LPI Linux Essentials 考试!
- Learn Linux in 5 Days:参加本课程以掌握 Linux 操作系统的基础知识。
- Linux System Administration:如果你想学习 Linux 系统管理并提升你的职业生涯,这就是适合你的课程。
- Linux Shell Scripting Projects:如果你想学习 shell 脚本并且你通过实践学习效果最好,那么这个课程适合你。通过完成真实世界的项目,成为一名 shell 脚本专家。
- Shell Scripting and Bash Programming:准备好学习如何像专业人士一样编写 shell 脚本,解决现实世界的问题,或自动化重复和复杂的任务吗?那么就参加这个课程吧。
- Docker: A Project-Based Approach to Learning:如果你想学习一个关键的 DevOps,并且你最擅长通过实践学习,那么这个课程适合你。通过完成真实世界的项目,成为 Docker 专家。
- DevOps in the Real World:学习包括 Linux 管理、Elasticsearch、Logstash、Kibana、Grafana、Vagrant、Icinga2 等在内的基本 DevOps 技能和工具,以提升您的职业生涯!
- Linux Security and Hardening:通过保护您的 Linux 系统免受黑客、攻击者和入侵者的攻击,让您和您的公司远离新闻的关注!
- Linux Logical Volume Manager:学习如何使用 LVM 管理磁盘和卷。扩展文件系统并迁移数据,所有操作无需停机。
- CompTIA Linux+ XK0-005 Practice Exams:你想最终获得 Linux 认证吗?你想尽快做到这一点吗?如果是的话,这个适合你!
- Linux Man Page Masterclass:完成本课程后,您将不再需要搜索使用哪个命令或如何使用任何命令。您将能够找到所需的正确命令,确定要使用的确切选项,并在运行命令之前自信地知道该命令将执行什么。
- Python Programming:轻松学习 Python 编程。包含示例、测验、练习和更多内容。
后记
这是《Vim Masterclass》专栏的最后一篇笔记,但不是各位精进 Vim 技艺的最后一篇文章。我按照之前的计划顺利完成了 Udemy 这套课程知识点的完整复盘梳理,还比原计划提前了三天(如果不是昨天临时抽身去写博客之星主题文章,应该还会提前一天)。我也用实际行动向各位再次验证了目标清晰、明确、可量化对于做成一件事的极端重要性。本专栏近期的更新计划图也一并分享出来供大家参考:
相信一路陪伴我学到这里的朋友们,也一定是持续精进自学能力的终身成长者、长期主义的坚定践行者;对于小伙伴们的默默关注、支持和鼓励再次表示最衷心地感谢!后期我还会基于Vim
推出更多优质原创内容,敬请期待!