巨集 x 寄存器 x 命令行模式
延续 Vim 编辑器 入门指南 (上)
https://ithelp.ithome.com.tw/articles/10255325
接着说明 Vim 编辑器 :
其中搭配「寄存器」一起使用的「巨集」功能,以及命令行模式的指令工具。
可以让程序来帮你写程序,有效的提高开发效率。
滑鼠,除了垂直移动、水平移动与定位编辑的功能以外,还有一个最常使用的功能是「文字的选取」。
按键 v 指令 左下方出现 VISUAL,代表的是「可视模式」或者「视觉模式」
在这个模式中,方向键上下左右,可以扩大选择的范围
不过这种方式,对於 :
光标的初始位置有精准的要求
日常开发中 使用上不是那麽的方便。
这种情况可以使用
「 viw 」指令
三者构成的意思 :
就是选取一个单词,不管光标是在单词的哪一个位置。
「 vaw 」指令
三者构成的意思 :
也是选取一个单词,不管的光标的位置,
只不过这个指令,会再多选取包含空格的部分。
以 vaw 的指令来看,适用的场景并不是很多,但可以将 va 与 vi 当成一组独立的指令。
文字被符号包覆
小括号 () 中括号 [] 大括号 {} 单引号 ' 双引号 "
「 i 与 a 指令」之前,加上数字
「 v2i) 」 -> 选择第二层的小括号范围
「 vit / vat 」指令
t 代表的是 tag
网页 html 文件中的 xml 标签格式:
「 vit 」-> 两个标签中的文字
「 vat 」-> 包含标签的整个元素
小写 v 指令
选取以字元为单位
大写 V 指令
以行为单位,左下方出现的是 VISUAL LINE
选取方式,仅可以使用垂直的移动指令。
例如:
「 V3j 」-> 向下选择 3 行
「 ggVG」-> 全部选取
control + v 指令
垂直的方向进行选取
个人是认为这个指令使用起来并不是那麽的直觉,如果是在 IDE 中,我通常会用 IDE 的游标扩展功能。
例如 :
IntelliJ 的 opt 两次 + 方向会较为直觉并且容易使用
选取文字後,常见的编辑指令
其中的「 d y p 」剪贴簿指令,普通模式延伸 :
registers
使用的方法:
剪贴指令前方再加上「引号」与 「任一 a 到 z 的小写字母」或者 「数字 0 ~ 9」
例如 :
"q3yy -> 将拷贝的 3 行文字内容,保存到 q 的寄存器位置
取用寄存器方法
"qp -> 贴上 刚才拷贝的 3 行文字
大写的英文代号
"Qyy -> 追加寄存器代号 q 的内容
"qp -> 贴上的除了原始的三行文字还多了刚才拷贝的文字
就像阅读书籍的书签一样,可以先在特定的位置做上标记後,使用指令快速到达定位
这个功能必须搭配,方才说到的寄存器一起使用:
「 m 指令 」代表的是 mark,然後在加上任一 「 a 到 z 的小写字母 」或者「 数字 0 ~ 9 」
例如 :
「 mq 指令 」 -> 当前的光标位置,纪录在 q 的寄存器中
移动到其他的位置,想要快速地跳回刚才的地方
「 `q 指令 」-> 跳回刚才的位置 (间格号「 ` 」 : 键盘左上,Esc 下方)
小写字母的标记仅限於该档案,如果要跨档案的标记定位,则可以使用「大写的字母」
例如 :
「 mQ 指令 」-> 当前的文档的光标位置,纪录在 Q 的寄存器中
切换到其他的档案时 :
「 `Q 指令 」-> 跨档案的移动到刚才的位置
如果移动後发现位置不对,想要回到刚才的编辑位置
「 `` 指令 」-> 刚才的位置与跳转的位置进行快速切换
「 `T 指令 」-> 定位在代办清单,列表中的当天日期 (T - todo,list)
「 `N 指令 」-> 定位在最近作业的文件中 ( N - recent)
键盘上总共有 26 个字母加上 10 个数字
日常开发,数量绝对够用
编排一下就会获得在专案文件中瞬间移动的能力!
录制编辑指令,批次执行的编辑动作
「 q 指令 」後方加上「任一 a 到 z 的小写字母」或者「数字 0 ~ 9」
例如 「 qq 指令 」,下方出现「 recording @q 」代表开始纪录指令的执行动作
在录制时,开头与结尾的位置是特别需要注意 :
开头「 数字 0 指令 」 -> 移动到最前,预先做一个位置校正的动作。
结尾「 0j 指令 」 -> 移动到下一行的开头,为了下一个指令的执行。(执行巨集时才能指定执行的次数)
完成指令的输入以後,再使用一次 「 q 指令 」 结束巨集的录制。
「 @q 指令 」 -> 可以执行一次
「 @@ 指令 」 -> 重复上一次的巨集动作
使用按键 q 指令 加上大写 Q 就可以补上方才缺少的指令
「 qQ 指令 」 -> 追加代号 q 的巨集指令
如果录制时忘记加上逗号或者忘记换行,此时就不用重新录制一遍。
补充 5 个 常用的指令
将当前行中第一个旧的文字取代成新的文字
:s/{旧的文字}/{新的文字}
将取代文字的动作,作用於整行文字
:s/{旧的文字}/{新的文字}/g
将取代文字的动作作,用於整份文件
:%s/{旧的文字}/{新的文字}/g
搭配 大写 V 行的选取模式
选取後 输入冒号 (:),下方出现这组符号 「 :'<,'> 」输入相同的指令 「 : s/oldText/newText/g 」
替换的文字就只会作用在选取的范围上
:r {档案路径}
例如 :
同目录的 Parameter.txt 文件
「 :r Parameter.txt 」-> 不需要切换文本编辑器,就可以继续编辑。
Vim - Live Template
搭配上一个「 文字替代指令 」(:s) ,就可以当成是 vim 编辑器的 Live Template
预先写好许多常用的模板 :
两种情况:
「 :{行数}t. 」 -> 复制单行的情况
「 :{起始行数},{结束行数}t. 」复制多行的情况
例如 :
「 :6t. 」 -> 复制第 6 行的文字内容
「 :6,8t. 」 -> 复制从第 6 到第 8 行的文字内容
使用这个指令
可以让拷贝的动作更加精准,而且也不用光标来回移动,减少多余且繁琐的作业。
相似於第三个,指令格式完全相同,「 t 指令 」换成「 m 指令 」
「 :6m. 」 -> 移动第 6 行的文字内容
「 :6,8t. 」 -> 移动从第 6 到第 8 行的文字内容
搜寻当前目录底下的档案
:find {档案名称}
指令直接执行无法使用 :
因为搜索的路径并没有向下定位
路径指令
「 :set path 」指令 -> 预设的路径 「 path=.,/usr/include,, 」
重新设定这个指令,在原始的路径後方加上 「 ** 」
「 :set path=.,/usr/include,,** 」
再使用 find 指令,就可以找到子资料夹的文件。
配置档案
set path 指令,在退出 vim 编辑器後会被重置,
想要这个指令持续的生效,可以在 「 ~/.vimrc
」 的文件中加入。
set path=.,/usr/include,,**
如果不想要修改配置档,折衷方案 :
:find **/{档案名称}
:e **/{档案名称}
也可以发挥相同效果。
从上集的简单的文本编写开始,一直到方才说明的命令行模式,应该已经知道 Vim 编辑器的威力。
不过在日常开发时,我通常还是 以 IDE 加上 Vim 的插件,作为主要的开发环境。
因为 IDE 提供的文件导航、自动补全与环境配置,对於开发者来说仍是不可或缺的工具。
但若环境许可,初期要熟悉 Vim 的指令与功能,建议还是可以先使用终端机来学习。
:!
)调用 python 函式,进行 JSON 文字的格式化
%!python -m json.tool
~/.vimrc 配置内部指令
command! JSONFormat :execute '%!python -m json.tool'
\ | :execute '%!python -c "import re,sys;chr=__builtins__.__dict__.get(\"unichr\", chr);sys.stdout.write(re.sub(r\"\\\\u[0-9a-f]{4}\", lambda x: chr(int(\"0x\" + x.group(0)[2:], 16)).encode(\"utf-8\"), sys.stdin.read()))"'
\ | :set ft=javascript
\ | :1
也就是说:
系统中所有的指令工具,都可以成为 vim 的扩充功能,更甚者还可以用熟悉的程序语言撰写自己想要的功能脚本。
这麽做的好处,就是可以比巨集功能,更像是用程序来写程序的方法。
而且如果能够流畅地在终端机下作业,肯定是会更加理解程序语言背後运作的底层原理。
以技术层面来看:
程序的功力,就会再更进一步的提升。
巨集 @x : 固定配置代办清单的勾选
巨集 @z : 固定配置代办清单的取消
(一不小心就会写出很多 markdown 的笔记)
https://zh.wikipedia.org/wiki/Vim
https://blog.techbridge.cc/2020/04/06/how-to-use-vim-as-an-editor-tutorial/
https://coolshell.cn/articles/5426.html
>>: G Suite 教育版更名为 Google Workspace for Education,并取消无限制储存空间限制至 100 TB
Growth of a Population In a small town the populat...
BMI(身体质量指数)是用自己身高、体重的比例,来当作是否过胖的「身高体重指数」 它的计算方法也很简...
今天学习了变数以及变数的应用 上次学习到把文字显示於萤幕(命令提示字元)上 这次要来练习将变数存放的...
在动画做好之後,因为这个卷轴的做法是分段, 做等速动态,所以今天想调整他的节奏分段做不容易, 所以教...
本篇大纲:开放资料下载、绘制长条图 今天的一天一图表,我们来画图表世界中最常见的 长条图 吧!长条...