1

我正在尝试编写一个宏,它允许我用#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

有任何想法吗?

4

2 回答 2

2

您可以按照以下方式做一些事情:

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

基本上:

  • 开始录制qj
  • 删除您选择的内容并进入插入模式c
  • 键入您的构造,根据需要粘贴您的代码
  • 您在键入 #ifdef 后添加一个标记 ( ma) 并在最后跳回它
  • 重复宏@j

希望这个例子有帮助!

于 2013-01-15T16:42:18.110 回答
1

我可能会使用 snipmate 或其他一些插件来完成这项任务。不过,有几种方法可以手动进行。这是我的宏解决方案:

目视选择文本,然后...

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

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

于 2013-01-15T16:50:30.807 回答