![抽出所有函数声明](https://linux22.com/image/48020/%E6%8A%BD%E5%87%BA%E6%89%80%E6%9C%89%E5%87%BD%E6%95%B0%E5%A3%B0%E6%98%8E.png)
我经常要做的事情是确保在文件顶部的 C 代码中拥有所有函数的原型。有什么方法可以使用 vi/vim 快速选择 .c 文件中的所有函数声明,以便我可以将它们拉出并粘贴到文件顶部?
请注意,我使用带有内联参数的单行函数声明,因此每个声明始终是一行。
答案1
从第一个函数上方开始,然后使用 跳转到左大括号]M
。现在,您可以使用]}]M
( ]}
= 右大括号,然后再次)跳转到下一个]M
,这有点啰嗦,因此请将其映射到 f 键:
:nmap <F9> ]}]M
如果你使用“金发姑娘”样式缩进,例如:
void foo (int bar) {
这会将您带到与签名相同的行——假设它们都在一行上。如果您使用稍微愚蠢但更常见的 K&R、Allman 或 GNU 样式,那么您就只剩下一行了,在这种情况下您实际上想要:
:nmap <F9> ]}]Mk
k
向上移动一行。在第一个函数中,将行拉入命名缓冲区,我将使用“p”作为原型,所以"pyy
(yy
代表“拉行”)。在后续功能中,您想要附加通过将名称大写来添加到此缓冲区:"Pyy
。
如果您确信所有签名都在一行上,则可以将其添加到功能键 nmap 中。
:nmap <F9> ]}]Mk"Pyy
如果没有,您可以将其映射到一个单独的键,并在继续时适当地使用您的大脑;您必须仔细观察并手动粘贴多行符号。
获得所有这些后,您可以粘贴该缓冲区"pp
- 第二个 p 表示“粘贴缓冲区”。如果您使用金发姑娘风格,您现在需要:s/ {$/;/
这些线条。