我经常遇到可以通过自动编写代码来解决的问题,但是不足以证明它是合理的,因为繁琐地输入每个部分更快。
以下是一个例子:
将列表放入字典和类似的东西。将A转换为B。
A
hotdog HD
hamburger HB
hat H
乙
def symbolizeType
case self.type
when "hotdog"
return "HD"
when "hamburger"
return "HB"
when "hat"
return "H"
end
当然,我可以自动提出一些事情,但只有列表超过100个项目才有意义。对于10-20项的列表,有没有比繁琐的打字更好的解决方案?这是一个Ruby示例,但我通常会遇到这样的情况。可能是字典,也许是列表等,而不是案例陈述。
我目前的解决方案是一个python模板,其流输入和输出已经到位,我只需要编写解析和输出代码。这很不错,但有更好的吗?我觉得这将是VIM宏擅长的东西,但我对VIM很有经验。 VIM可以轻松完成吗?
答案 0 :(得分:4)
对于vim,它是一个在空格分隔的单词列表上运行的宏,插入第一个'当"' bit,长篇单词' hotdog',结尾引号,换行符&& 39; return"',然后是缩写,然后是最终引用,然后返回到列表并重复。
从注册w
开始:
when "
注册r
:
return "
初步清单:
hotdog HD
hamburger HB
hat H
和一个起始文件:
def symbolizeType
case self.type
"newline here"
您可以在初始列表的开头使用以下宏:
^"ayeeeb"byeo"wp"apa"^Mrb"j
其中^ M是换行符。
答案 1 :(得分:2)
对于这样的事情,我有几种方法可以让它变得更容易。一种是使用像Sublime Text这样的编辑器,它允许你一次多次编辑多个东西,所以你可以通过几次击键输入标记并将其转换为Hash,如:
NAME_TO_CODE = {
hotdog: 'HD',
hamburger: 'HB',
hat: 'H'
}
那里并没有真正改变。您的功能如下:
def symbolize_type(type)
NAME_TO_CODE[type.to_sym]
end
将其定义为数据结构具有能够操纵它的好处:
CODE_TO_NAME = NAME_TO_CODE.invert
现在你可以这样做:
def unsymbolize_type(symbol)
CODE_TO_NAME[symbol.to_s]
end
你也可以超级懒惰,只需动态解析它:
NAME_TO_CODE = Hash[%w[
hotdog HD
hamburger HB
hat H
].each_slice(2).to_a]
答案 2 :(得分:2)
我经常这样做,我使用一个寄存器和一个宏,所以我会分享。
只需选择一个注册表,记录您的击键,然后从注册表中重放您的击键。
这是一个很长的解释,但这个过程非常简单直观。
以下是我要采取的步骤:
hotdog HD
hamburger HB
hat H
def symbolizeType
case self.type
hotdog HD
hamburger HB
hat H
这一步我将以详细的子步骤写出来。
a
。类似于您通常会将线条转换为您想要的线条,这对我来说看起来像下面的宏
^i^Iwhen "^[ea"^[ldwi^M^Ireturn "^[ea"^[j
^I
Tab ,^[
Esc ,^M
输入。
根据您的喜好变换线条后,将光标移动到要变换的下一条线。您可以在上面的宏中看到这一点,最后是 j 。
这将允许您在循环每个重复行时自动重复宏。
再次输入 q 停止录制宏。
然后,您可以使用标准的vim计数前缀多次从寄存器a
重播宏,在这种情况下连续两次从下一行开始转换。
2 @ 一
这给出了以下文字
def symbolizeType
case self.type
when "hotdog"
return "HD"
when "hamburger"
return "HB"
when "hat"
return "H"
def symbolizeType
case self.type
when "hotdog"
return "HD"
when "hamburger"
return "HB"
when "hat"
return "H"
end
对于任何随机,重复的文本,这都非常快速,我发现它非常流畅。
只需选择一个注册表,记录您的击键,然后从注册表中重放您的击键。
答案 3 :(得分:1)
片段就像类固醇上的内置:abbreviate
一样,通常带有参数插入,镜像和内部多个停止。第一个非常着名(并且仍然广泛使用)的Vim插件之一是snipMate(受 TextMate 编辑器的启发);不幸的是,它不再维持;虽然有a fork。现代替代方案(虽然需要Python)是UltiSnips。还有更多内容,请参阅this list on the Vim Tips Wiki。
有三件事要评估:第一,摘录引擎本身的功能,第二,作者或其他人提供的片段的质量和广度;第三,添加新片段是多么容易。