写在前面
今天是 2022-09-09,开始学习vim,感觉vim很神奇也很硬核,慢慢学习掌握吧
现在是 2023-3-17,有了半年的使用和学习经验,重新编辑vim-tutorial
- 优化内容排版结构
- 给出更明确的学习路线
- 这篇文章,看起来内容很多,其实,很多东西可以不用看,没必要(来自半年后的自我否定
学习路线
经过半年多的使用之后,对于vim的学习建议如下:
- 先能够习惯/熟练掌握vim的操作方式后再进入配置环境环节。
- 在熟练操作方式前,使用ide的vim插件。如vscode的vim插件。
- 利用vimtutor学习指令。比直接背网上的指令集(包括我的)有效得多。
- 学习MIT的公开课学习vim多模态设计,接触宏(其实我也不用宏和正则表达式)
- 大量的练习形成肌肉记忆
- 开始接触命令行环境,neovim,以及插件市场。(强烈推荐lazy插件管理器
vim/vimium 学习资料
- vimtutor,强力推荐,在
terminal
中输入vimtutor
,就会进入vim的官方教程,附带 手把手 带着做的练习题(前提是安装了vim) - vimium的知乎文章
- 安装完vimium后,插件有效页面输入
?
,会弹出所有指令清单(感觉比我记的大段文本好很多) - MIT 公开课the missing semester专门有一章节讲vim,非常推荐
以下资料只能当作补充吧,但感觉有点多余
- ThePrimeagen 的油管视频,也有阿b搬运 感觉?也就一般
- vim-adventure: 前3章是免费的,hjkl web为止,但是后面10个地牢需要25美刀的订阅(完全不推荐)
vim及vim-like插件
简单介绍Vim和Vimium
vim
平时都是用 macbook 写的博客,macos 环境会自带 vim,linux 也一样。
vimium
vimium 是 chrome 的一个插件,使用类vim 的指令来控制 chrome 页面,进行一个浪的冲。
vim
这里正式开始vim的tutorial,其他的类似vim操作指令的插件、快捷键配置其实都大差不差,可以举一反三。
有时候觉得,自己的tutorial远不如 MIT的公开课 以及 vimtutor要好。
更多时候,是作为自己查找指令的字典使用。
Lesson 1
这一节主要设计vim的基本移动操作,以及个别模式切换。
vim 的多模态
vim 是一个 多模态(multi-modal) 编辑器
- normal mode: 正常情况下的模式
- insert mode: 输入i normal mode->insert mode, esc 退出
- visual mode: v/V < ctrl-v > 进入可视化模式,分别进入 一般,行可视化,块可视化(其实就是选取文本
- command-line mode: 输入“:“ 之后接命令
normal 下的基础指令
hjkl
normal模式下主要处于光标移动操作:
1 | h: 光标左移一格 |
** Typing a number before a motion repeats it that many times. **
复制/粘贴/撤回
分别对应 ctrl+c, ctrl+v, ctrl+z 但是略有不同
1 | y: yank 将可视化模式选中的文本,导入寄存器 |
WEB 单词级跳跃
w/e/b和W/E/B 能够实现在normal mode 下 word 和 WORD 级别的跳跃
1 | w: 跳至下一个word的词头 |
word or WORD
word: 在英语文本下,空格隔开的单词。中文环境下是,由字母符号隔开的短句。
WORD: 在英语文本下,单词和符号连起来的由空格隔开的文本段。中文一样。
一些其他关键字
i: (insert)进入insert mode,它有俩常用相关关键字
o: 在所在行下插入空白行,并且进入insert mode.
O: shift+o 可以在所在行上行插入空白行,并且进入insert mode.
A: 跳转至所在行最后,并且进入insert mode.
Lesson 2
normal mode 进阶指令
这个节主要是,进入insert mode 的几种
a/A i/I 0
A:shift+a 跳至行末并且进入 insert mode
a:在光标后,进入 insert mode
I:shift+i 跳至行首并且进入 insert mode
i: 在光标前,进入 insert mode
0: 跳转到本行开头.
d motion
dw: delete the word.
dd: delete the line.
d$: delete the sentence until the end of the line.
d [motion]:
1 | where: |
** Typing a number with an operator repeats it that many times. **
In the combination of the delete operator and a motion mentioned above you insert a count before the motion to delete more:
d number motion
- 额外补充,D: shift+d 删除本行 cursor 到最后的全部内容
c command
** To change until the end of a word, type ce . **
Notice that
ce deletes the word and places you in Insert mode.
cc does the same for the whole line.
ce 删除并在 插入模式 中替代该词汇
cc 在同一行中做一样的事情
change command 和 delete command 的唯一不同在于,change command会在删除操作后直接进入 insert mode。
- 而外补充,C: shift+c 删除本行 cursor 到最后的全部内容,并且进入insert mode。
r command
THE REPLACE COMMAND
** Type rx to replace the caracter at the cursor with x. **
在光标所在位置输入用字符 x 替代原字符。
s command
同样的有 s command 删除一个字符(同 x)然后进入 insert mode
S: shift+s 删除整行,然后进入 insert mode。
p command
** Type p to put previously deleted text after the cursor. **
the words or line deleted by d motion will be stored in a Vim register. And then, p command can paste the content below the current line or behind the cursor.
P: shift+p paste the content in the line ABOVE cursor.
Lesson 3
这一节主要涉及一些vim的行间操作,如何在行间进行快速准确的光标跳转。毕竟wwwww,eeeeee挺蠢的。
vim的行间跳转
f/t
f: find, fx 在本行中(cursor后),找到第一个字符是 “x”的位置,并且实现光标跳转。
F: FIND, Fx 在本行中(cursor前),找到第一个字符是 “x”的位置,并且实现光标跳转。
t: to, tx 在本行中(cursor后),找到第一个字符是 ”x“的位置,并跳转到前一个位置。
T: TO, Tx 在本行中(cursor前),找到第一个字符是 “x“的位置,并跳转到后一个位置。
前后查找到的字符切换:
;跳转到后一个查找到的字符。
,跳转到前一个查找到的字符。
Notice:
因为 f/t 扩展了motion的灵活性,所以 d/c command 可以结合 f/t 来实现精准操作。
e.g. command: dt) 能够删除 cursor到)前的所有内容。
/ 查找
等同于各种ide常用的 CTRL+f content <enter>
在normal mode下, 输入command: /content <enter>
这里的检索查找设计与 vimium 是一样的
- n 查找下一个关键词
- N 查找上一个关键词
Ctrl+D/U 翻页
这个设计跟 vimium 大差不差,只是会加上 CTRL。
CTRL+D: DOWN half page.
CTRL+U: Up half page.
zb: 当前cursor所在处,移动到页面末行。
zt: 当前cursor所在处,移动到页面顶行。
zz: 当前cursor所在处,移动到页面中央。
lesson 4
这节主要是阅读情景下的文页跳转
vim 文本级跳转
G 与 gg
G: 跳转到文本的最后一行行首。
gg: 跳转到文本的第一行行首。
ctrl+g: 会打印光标所在行信息。
光标循迹
指定行跳转
如果跳转到,xxx行的两种方法:
- xxxG
- :xxx
** 两种方法的输入一样多,神不神奇 **
当页首尾跳转
H
M
L
匹配括号跳转
%: 实现了已匹配的括号间跳转。
{ or <shift+[>: 实现了光标跳转到上一个空行。
} or <shift+]>: 实现了光标跳转到下一个空行。
substitute command
- :s/old/new 在光标所在行首个old用new替代。
- :s/old/new/g 在光标所在行所有old用new替代。
- :#,#s/old/new/g 在两#间用的所有old用new替代,#是一种数字。
- :%s/old/new/g 在全文件范围内进行模式的匹配和替换。
- :%s/old/new/gc 在全文件范围内进行模式匹配与替换,并显示信息提醒。
Lesson 5
vim 的文件操作
执行拓展指令
** Type :! followed by an external command to execute that command. **
大概就是 :! 后可以接很多命令行,e.g. :! ls 新窗口显示 ls 的打印信息,再次输入 〈Enter〉 恢复
All : commands must be finished by hitting <Enter>
写入文件操作
** To save the changes made to the text, type :w FILENAME **
- 会保存更改的内容,如果输入 FILENAME,会生成一个叫做 FILENAME 的文件,保存了当前file的内容。
** To save part of the file, type v motion :w FILENAME **
- 进入 visual mode 后,再执行 :w FILENAME
- 在选择文段后,输入 :(colon) 会给提示符 ‘<,>’
- 最后的输入现实为 :’<,>’w TEST
Note: Pressing v starts Visual selection. You can move the cursor around to make the selection bigger or smaller. Then you can use an operator to do something with the text. For example, d deletes the text.
文件的模块式导入
RETRIEVING: 索回,挽回
** To insert the contents of a file, type :r FILENAME **
- 能将 FILENAME 里面的所有内容直接插入到 cursor 所在处。
Note: we can also read the output of an external command. For example, :r !ls reads the output of the ls command and puts it below the cursor.
SUMMARY
Lesson 6
这一节主要是 各种插入 操作,其实在之前的小节已经写过,此处快速浏览
vim 的行插入
** Type o to open a line below the cursor and place you in Insert mode. **
o: 所在行下新增一列,并进入 Insert mode。
O: 所在行上新增一列,并进入 Insert mode。
** Type a to insert text AFTER the cursor. **
a: 所在光标后进入 Insert mode(i是光标前)。
A: 在光标所在行后进入 Insert mode。
** Typa a capital R to replace more than one character. **
R: 输入R后,输入的字符都会往后替代。
r: 紧接着的字符会替代原字符。
SET OPTION
这个设定感觉还挺有意思的。
** Set an option so a search or substitute ignores case **
:set ic, 可以设置大小写识别,取消,:set noic
:set hls, 对于搜索到的 pattern 的进行高亮
:set is, 在输入 pattern 的时候就进行 search
if you want to ignore case for just one searchcommand, use \c in the phrase: .ignore\n <Enter>
SUMMARY
Lesson 7
vim 拓展指令
:help
** Use the on-line help system **
Vim has a comprehensive on-line help system.
- press the
key (if you have one) - press the
key (if you have one)
type :help <Enter>
Read the text in the help window to find out how the help works.
- Type CTRL-W CTRL-W to jump from one window to another.
- CTRL-W + hjkl: 进行一个各个小窗的跳转。
- Type :q <Enter> to close the help window.
Vim script
这个主要是关于 Vim环境配置文件 脚本的编写
** Enable Vim features **
- Start editing the “vimrc” file. This depends on your system:
:e ~/.vimrc for Unix
:e ~/_vimrc for Windows - Now read the example “vimrc” file contents:
:R $VIMRUNTIME/vimrc_example.vim - Write the file with:
:w
‘’’ 这里给出一个配置语法高亮的例子 ‘’’
Completion
** Command line completion with CTRL-D and <TAB> **
在 command mode 下,键入 <CTRL-D> 会打印出 能够补全的所有items
键入<TAB> 会按顺序便利补全内容
vimium
对vimium来说,其实这一part没什么必要看,直接看知乎文章或者直接?
看指令集就好了。
不需要背书式的记忆公示,在使用的过程中就会不断掌握的。
页面操作
? 显示帮助对话框以获取所有可用键的列表
h 向左滚动一点
j 向下滚动一点
k 向上滚动一点
l 向右滚动一点
gg 滚动到页面顶部
G 滚动到页面底部
d 向下滚动半页
u 向上滚动半页
f 打开元素定位器,是在当前标签页打开
F 打开元素定位器,是在新标签页打开
r 刷新
gs 查看源码
i 进入插入模式 - 在您按Esc退出之前,将忽略所有命令
yy 将当前网址复制到剪贴板
yf 将链接URL复制到剪贴板
gf 循环到下一帧(尤其在选择网页内置视频的时候很管用)
gF 聚焦主/顶框架
新浏览器操作
o 从URL、书签、历史记录中搜索地址,回车打开
O 从URL、书签、历史记录中搜索地址,回车在新标签页中打开
b 仅从书签搜索地址,回车打开
B 仅从书签搜索地址,回车新标签页中打开
T 搜索当前浏览器的所有标签
使用搜索
/ 进入查找模式 - 输入您的搜索查询并按Enter键进行搜索,或按Esc键取消
n 查找下一个匹配项
N 查找上一个匹配项
浏览历史记录
H 回到历史,也就是回到前一页
L 在历史上前进,也就是回到后一页
标签操作
J, gT 跳到左标签
K, gt 跳到右标签
g0 跳转到第一个标签
g$ 跳转到最后一个标签
^ 回到上一个访问的标签
t 创建一个新的标签
yt 复制当前页面,在新标签页打开
x 关闭当前标签
X 恢复关闭的上一个标签
p 在当前标签页打开剪切板中的URL,如不是URL则默认引擎搜索
P 在新标签页打开剪切板中的URL,如不是URL则默认引擎搜索
T 在当前打开的标签中搜索
W 将当前标签移动到新窗口
<a-p> pin/unpin current tab
标记(锚点)
ma 设置本地标记 a
mA 设置全局标记 Aa 跳转到本地标记 a
A 跳转到q全局标记 a
`` 跳回到跳转之前的位置 (也就是说,在执行gg,G,n,N,或/ a 之前的位置)
其他高级浏览命令
<< 当前标签页向左移动
>> 当前标签页向右移动
<a-f> 在新标签中打开多个链接
gi 聚焦页面上的第一个(或第n个)文本输入框
gu 跳转到URL层次的父类(xxx.com/yyy/zzz 跳转到 xxx.com/yyy)
gU 转到URL层次结构的根目录(也就是 xxx.com)
ge 编辑当前URL
gE 编辑当前URL并在新选项卡中打开
zH 向左滚动
zL 向右滚动
v 进入预览模式;使用p / P粘贴,然后使用y来拷贝
V enter visual line mode
<a-m> 开/关静音
<a-p> 固定标签栏
预览模式 visual mode
1 | 先用 / 定位,找到想要选择的字符 |
网页链接跳转
这个vimium从需求出发设计的指令
输入指令 f 会生成各个链接键的对应指令(指令不分大小写
如果是 F 会打开新tab 但是不会切换到新页面;
如果是 f 会打开新tab 并且切换
写在最后
** 这里主要是 vimtutor 作者的一些留言 **
vimtutor 只是为了让方便入门的一个小文档,
如果想要更近一步 “:help user-manual”
好书推荐
Vim - Vi Improved - by Steve Oualline
Publisher: New Riders
介绍了许多细节,对于初学者相当受益。更多的案例与图片 见 https://iccf-holland.org/click5.html
Learning the Vi Editor - by Linda Lamb
Publisher: O’Reilly &Associates Inc.
这本书比上本书更古早,并且更接近于 Vi 的书,但是仍然推荐。
- Post title: vim_tutorial
- Create time: 2022-09-09 16:43:54
- Post link: Tutorial/vim-tutorial/
- Copyright notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.