Vim:231个按键命令
请注意,字符前面的任何^表示您应在键入该字符时保持控制
mbomayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0wmbyiwo@f @d^V^[@z ^["fc0"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0dd`bAe^[0@e
步骤,以便您也可以运行它!
- 将行复制到Vim
- 类型
:s/\^V/<Ctrl-V><Ctrl-V>/g
并按回车键(两个字母应该给您一个蓝色的^ V)
- 类型
:s/\^R/<Ctrl-V><Ctrl-R>/g
并按Enter键(你应该可以看到蓝色的^现在卢比)
- 类型
:s/\^X/<Ctrl-V><Ctrl-X>/g
并按Enter键(你应该可以看到蓝色的^两个X现在)
- 类型
:s/\^O/<Ctrl-V><Ctrl-O>/g
,然后按Enter
- 类型
:s/\^A/<Ctrl-V><Ctrl-A>/g
,然后按Enter
- 类型
:s/\^\[/<Ctrl-V><Ctrl-[>/g
并按Enter键(此命令是略有不同,因为我需要逃避[)
- 类型
0"yy$
。该命令现在存储在y寄存器中
- 在一行上设置输入,然后运行
@y
如果有人知道共享命令的更好方法,请告诉我。我知道这很冗长,但这是我能想到的最好的方法。
输入输出
输入字符串应在文件的任何行上单独存在。1 0 0 4 3 0 0 0 7
输出将简单地覆盖输入字符串1 2 3 4 3 4 5 6 7
说明
算法
- 从非零数字开始,请确保它不是最后一个数字
- 查找下一个非零数字
- 采取他们的区别。如果答案是否定的,则应递减以修复范围,否则,请递减以修复范围。
- 返回第一个字符,并通过递增/递减前一个数字来替换每个零。
- 重复直到找到最后一个字符
使用的宏
@e-检查结束。最后一个数字将附加一个e。如果光标下方的数字以e结尾,请删除e并停止执行。否则,使用@b开始插补循环。
mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t
@b-开始插补循环。将数字保存在光标下以进行减法运算(@s),然后找到下一个非零项(@f)
mayiwo^R"^V^X ^["sy0dd`a@f
@s-存储要在@d中使用的减法命令。它只是插值步骤开始时的数字在(val)^X
哪里(val)
。这是通过@b命令设置的。
@f-查找下一个非零项。将当前值写入未命名的寄存器,然后@f @d
在下一行写入,然后运行@z。如果数字为零,则将重复此命令,否则为@d。
wmbyiwo@f @d^[@z
@z-如果未命名的寄存器为0,则有条件执行。该命令期望在格式为的新行上有两个命令command1 command2
。如果未命名的寄存器为0,command1
则执行,否则command2
执行。请注意,两个命令都不能有任何空格。
IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`
@t-临时命令寄存器。在执行之前,将各种命令存储一小段时间。主要用于if语句中。
@d-确定插补方向。从光标下方的数字中减去序列中的第一个数字(使用@s)。如果结果为负,则插值必须递减,以便将^ X保存到@a。否则,我们应该增加,以便^ A保存到@a。保存后,返回到该插补循环的开始并运行@i进行实际插补
yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i
@a-存储^A
或^X
在插值步骤中递增或递减。这是通过@d命令设置的。
@i-内插。将当前位置的号码复制到@x,然后移至下一个号码。如果该数字为零,则将其替换为@x并运行@a以正确地上下修改它,然后重复此命令。如果数字不为零,则说明插值周期已结束。应该以该数字作为开头来开始一个新的,所以运行@e以检查结束并再次运行。
"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z
@x-临时存储寄存器。在插值命令(@i)中使用
击键
mbo :Set b mark to current position and open a new line below to write macros
mayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0 :Write to @b and reset line
yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0 :Write to @d and reset line
mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0 :Write to @e and reset line
wmbyiwo@f @d^V^[@z ^["fc0 :Write to @f and reset line
"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0 :Write to @i and reset line
IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0 :Write to @z and reset line
dd`b :Delete this line and move cursor back to original line
Ae^[ :Append an e to the last number
0@e :Move to the beginning of the line and run
0
我们的程序可以采用另一个值,例如null
吗?