Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 用#ifdef环绕多条选定线_Vim - Fatal编程技术网

Vim 用#ifdef环绕多条选定线

Vim 用#ifdef环绕多条选定线,vim,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

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

有什么想法吗?

你可以按照以下思路做一些事情:

qjc#ifdef<esc>magpO#else<esc>gpO#endif<esc>`aq
qjc#ifdefmagpO#elsegpO#endif`aq
基本上:

  • 开始录制
    qj
  • 删除所选内容并进入插入模式
    c
  • 键入构造,必要时将代码粘贴回原处
  • 您在键入#ifdef后立即放置一个标记(
    ma
    ),并在末尾跳回该标记
  • @j

希望这个例子有帮助

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

直观地选择文本,然后

qqc#ifdef 
<C-r><C-o>"
#else
<C-r><C-o>"
#endif<esc>'[A<C-o>q
qqc#ifdef
"
#否则
"
#endif'[Aq
如果不想,您也不必直观地选择文本。请使用相同的宏,但从
qqcj
开始