使用#ifdef围绕多个选定的行

时间:2013-01-15 16:01:54

标签: vim

我正在尝试编写一个宏,它允许我用#ifdef包围当前突出显示的文本行。理想情况下,将光标放在#ifdef之后,准备输入宏名称。我能够录制以创建一个宏,但我只能为一行代码执行此操作。

在:

    bool first_selected_line = false;
    int second_selected_line = 0;

后:

#ifdef // if possible, cursor placed here in insert mode
    bool first_selected_line = false;
    int second_selected_line = 0;
#else
    bool first_selected_line = false;
    int second_selected_line = 0;
#endif

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以采取以下措施:

qjc#ifdef<esc>magpO#else<esc>gpO#endif<esc>`aq

基本上:

  • 开始录制qj
  • 删除您选择的内容并进入insertmode c
  • 输入您的构造,根据需要粘贴代码
  • 在输入#ifdef后立即标记(ma)并在结尾处跳回
  • 使用@j
  • 重复该宏

希望这个例子有所帮助!

答案 1 :(得分:1)

我可能会使用snipmate或其他插件来完成此任务。虽然有几种方法可以手动进行。这是我对宏的解决方案:

然后在视觉上选择文字......

qqc#ifdef 
<C-r><C-o>"
#else
<C-r><C-o>"
#endif<esc>'[A<C-o>q

如果您不想,也不必在视觉上选择文本。使用相同的宏,但请改为qqcj