vim 给代码行尾加分号的几种方法
给下面的代码每一行行尾加入分号,有几种方法呢?
var foo = 'aotu'
var bar = 'is a team'
var foobar = foo + bar
方法一,使用点操作符
$
移动到行尾,a;<Esc>
完成一行分号的输入;($a;<Esc>)- 按
j
移动到下一行,重复步骤 1 再来一遍,完成第二行;(j$a;<Esc>) - 重复步骤 2,完成第三行。(j$a;<Esc>)
好累,还不如鼠标点呢,vim 的哲学就是 Don't repeat yourself ,我们要想办法减少一些重复。
在 vim 里, .
命令是会 重复上次修改 ,我们要 构造可重复的修改 ,于是方法为:
$
移动到行尾,a;<Esc>
完成一行分号的输入;($a;<Esc>)- 按
j
移动到下一行,然后$.
,完成第二行;(j$.) - 重复步骤 2,完成第三行。(j$.)
可以看到 .
命令非常有用,尽量让可以重复的操作变成可以用 .
来重复的操作。
回过头来,什么样的才是“修改”呢, x
会删除光标下的字符; dd
删除一行; >G
从当前行到文档末尾缩进,都算得上修改,它们都是在普通模式中执行的命令。 插入模式的修改肯定也是修改啦,不过如何记录的呢?就是从进入插入模式的那一刻起(例如输入 i
),直到返回普通模式为止(也就是输入<Esc>或<Ctrl + [ >>,Vim 会记录每一个按键操作。 复合命令 A
相当于 $a
在这里更显得有用了,因为它是可重复的修改:
A
到行尾,;<Esc>
完成一行分号的输入;(A;<Esc>)- 按
j
移动到下一行,然后.
,完成第二行;(j.) - 重复步骤 2,完成第三行。(j.)
认识 .
命令的魅力,尽量使操作可重复。
方法二,使用列块模式
<Ctrl + v>
(如果 macvim 或者 gvim 则是<Ctrl + q>)进入列块可视模式,jj$
先下移动两行然后跳到行尾;A;
进入插入模式输入分号;- <Esc>回到普通模式完成插入。
这个方法里用了可视模式里列块选择,<Ctrl + v>是进入列块选择,通过移动建立选取后,使用 A
和 I
进入插入模式编辑文本,然后使用<Esc>退出插入模式,同时结束列块模式,这时插入的文本就会扩散到选区选中的行了。
有意思的是,可以进入列块选择后复制,然后把它贴出来,试试咯。
如果你多输入了一个字符怎么办呢? gv
可以重新选择刚才的选区,再调整一下选中你想删除的字符,删除它。 gv
适用于可视模式哦。
方法三,使用 EX
- 查看行号,假设是 x 到 y,然后适用命令
:x,ynormal A;
这个方法里用到了命令行模式,在命令行模式中执行的命令又被称为 Ex 命令。有时使用 Ex 命令,能比普通模式命令更快地完成同样的工作。
其中 :
是进入命令行模式, x,y
就是开始行号 x 和结束行号 y,两者中间加上逗号表示范围;除了行号,其实我们还可以使用正则,比如删除含 aotu 字符的行到含有 labs 的行,则可以使用 :/aotu/ , /labs/ d
,可以用 -
来表示匹配行的前一行, +
表示匹配行的下一行,那么删除匹配行的下一行则应该是 :/aotu/+ d
。
normal
就是表示执行正常(noramal)模式下的命令,后面的 A;
就很好理解了,在行尾插入分号。如果是 m(ove)
移动行, d(elet)
删除行, co(py)
或 t
复制行,是不用输入 noraml
的。如: 1,5 co 100
复制 1~5 行并把它们粘贴到 100 行以下。
.
代表当前行; :.,/pattern/ d
会删除当前行到包含 pattern 的行。
$
代表文件的最后一行; :5, . m $
会移动第 5 行到当前行移动到文件末尾。
%
代表文件的每一行,等同于 1,$
。全文替换到时候常常 :%s/foo/bar/g
。
也许有人问,如果这个例子里的行是不联系的,怎么办呢?
你可以使用 :x,y g/pattern/normal A;
或者 :x,y v/pattern/normal A;
这里的 g
就是 globally,整个的意思就是 x 到 y 行之间匹配 pattern 的行 normal 模式执行 A;
,而 v
则是来自于 conVerse 的 v,所以整个的意思就是 x 到 y 行之间 不匹配 pattern 的行 normal 模式执行 A;
。
方法四,使用宏
- 在第一行上
qa
,然后A;<Esc>
,按q
; j
到第二行上@a
;j
到第三行上@@
。
宏记录就是说 vim 会记录你所操作的序列,然后你可以在记录完成后的任意时间(normal 模式下)一键播放录制的操作序列(宏)。
上面的例子,在普通模式中 qa
中的 q
就是进入宏模式, a
就是这个宏的名字叫做 a,宏的名字可以是 26 个字母中的某一个,大小写都可以,然后可以看到 vim 状态栏上显示“recording @a”,这时你的所有操作都会被记录。直到你返回会普通模式,然后按 q
。
@a
就是播放名字为 a 的宏,而 @@
就是重复播放刚刚播放过的宏。
其实上面为了演示 @@
而没有让他们可重复起来,可重复应该是在第 1 步 qaA;<Esc>jq
,然后在第 2 步 2@qa
就直接添加了第 2 和第 3 行的分号了。
上面只是大概的四种方法,要细分可能还有一些方法。最后话说 VS code 的 vim 插件挺好用的,更新也很快。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: H5 直播起航
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论